From 5ae534ab606e6f2ba5ea60914224d665b0447d5a Mon Sep 17 00:00:00 2001
From: Kevin Kok Khah Whey <khahwhey.kok@3ds.com>
Date: 星期二, 07 十一月 2023 22:48:31 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/TIANMA_JITUAN into dev_Kevin

---
 _Main/BL/Type_PeggingResult/StaticMethod_SetParentChildRelationship.qbl                                                                                                       |   14 
 _Main/BL/Type_LaneLeg/StaticMethod_CreateLaneLegFromJson.qbl                                                                                                                  |    3 
 _Main/BL/Type_ModulePanelCorrespondence/StaticMethod_DeleteModule.qbl                                                                                                         |   20 
 _Main/BL/Type_PriorityFactorDetails/Attribute_PriorityFactorName.qbl                                                                                                          |    3 
 _Main/BL/Relations/Relation_Global_StockingPointCostCategory_Global_MappingProduct_MP_Global_Ma.qbl                                                                           |   23 
 _Main/BL/Type_Global_MappingProduct_MP/Attribute_KeyProduct.qbl                                                                                                               |    5 
 _Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_MAPISPIPCategory.qbl                                                                           |   14 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPeggingAnalyse_OnClick.def                                               |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_pFilterCriteria_ButtonCapacityAndSaleBudgeChartTest_OnClick#603.def                              |   41 
 _Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl                                                                                                             |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/_ROOT_Component_FormDataInterfaceLog.def                                                                           |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase#886.def                                               |   60 
 _Main/BL/Type_PriorityResultDetail/Attribute_BusinessType.qbl                                                                                                                 |    1 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def                                                                                                |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_TransactionDate.qbl                                                                                                  |    8 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged#613.def                                                                            |    3 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_AnnualBudgetData.qbl                                                                                 |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_ListModuleCorrespondence.def                                                                    |   42 
 _Main/BL/Type_Global_MappingForecast/Attribute_SegmentPriority.qbl                                                                                                            |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase#1.def                                      |   36 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listActionBarPageModulePanelCorrespondence#1.def                                                |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listContextMenuPeggingAllResult.def                                                                      |   25 
 _Main/BL/Type_GlobalParameters/_ROOT_Type_GlobalParameters.qbl                                                                                                                |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingProductInSalesDemandBase.def                                                          |   36 
 _Main/BL/Relations/Relation_Global_ProductCategory_GlobalOTDTable_GlobalOTDTable_Global_Product.qbl                                                                           |   23 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_ProductID.qbl                                                                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlActions_btnOk_OnClick.def                                                                          |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnClick#106.def                                                                          |    4 
 _Main/BL/Type_ModulePanelCorrespondence/Attribute_PanelStockingPointID.qbl                                                                                                    |    7 
 _Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                           |    6 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl                                                                                                           |   36 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                                |    5 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_PriorityName.qbl                                                                                                                     |    7 
 _Main/BL/Type_Lane/StaticMethod_CreateLane.qbl                                                                                                                                |    3 
 _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/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def                                                                                                 |    2 
 _Main/BL/Type_Global_ProductCategory/Attribute_BusinessTypeName.qbl                                                                                                           |    7 
 _Main/BL/Type_GlobalOTDSOP/Method_AsyncCapacityAndSaleBudgeCompare.qbl                                                                                                        |   24 
 _Main/BL/Type_S_DT_SpliteStruct/Attribute_Qty.qbl                                                                                                                             |    8 
 _Main/BL/Type_ModulePanelCorrespondence/Attribute_ModuleProductID.qbl                                                                                                         |    7 
 _var/_Main/ModelSettings/Common/Dev-25/_ROOT_Role_Dev-25.properties                                                                                                           |   46 
 _Main/BL/Type_PeggingResult/StaticMethod_CreateAllChildRelation.qbl                                                                                                           |   17 
 _Main/BL/Relations/Relation_ModulePanelCorrespondence_GlobalOTDSOP_GlobalOTDSOP_ModulePanelCorr.qbl                                                                           |   23 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_DefaultUOMConversionFactor#413.qbl                                                                                                   |    7 
 _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/BL/Type_PriorityPolicy/Attribute_Desc.qbl                                                                                                                               |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listActionBarPageModuleCorrespondence.def                                                       |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_ListSDIP.def                                                                                               |   14 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GetAnnualSalesQuantity.qbl                                                                                     |   62 
 _Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_InitializedData.qbl                                                                             |   18 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_Edit.def                                                                                         |    8 
 _Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_CreateStream.qbl                                                                                                  |   19 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total4.qbl                                                                                                                |    7 
 _Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation1.qbl                                                                                                             |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel1.def                                                                                               |   37 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/_ROOT_Component_FrmCustomOrderSpliteRow.def                                                                     |  102 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_IsEligibleForNetting.qbl                                                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_listOrders_635_OnSelectionChanged.def                                                                       |   18 
 _Main/BL/Type_Global_MappingCustomOrder/StaticMethod_CreateCustomOrder.qbl                                                                                                    |    9 
 _Main/BL/Relations/Relation_Global_ProductInLineCategory_Global_MappingProduct_MP_Global_Mappin.qbl                                                                           |   23 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingUnitData.qbl                                                                                                                     |    6 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_SupplyQuantity.qbl                                                                                             |    7 
 _Main/BL/Type_ModulePanelCorrespondence/StaticMethod_DeletePanel.qbl                                                                                                          |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_886_mGeneratePeggingResult_OnCl.def                    |   23 
 _Main/BL/Type_Currency_MP/StaticMethod_CreateCurrency.qbl                                                                                                                     |    2 
 _Main/BL/Type_LaneLeg/StaticMethod_CreateFromMapping.qbl                                                                                                                      |   42 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_ClickBtnOK.def                                                                                   |    6 
 _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                                                     |   33 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bRunPeggingAlgorithm_OnClick.def                                                                 |   22 
 _Main/BL/Type_Global_MAPISPIPCategory/Function_CalcIsCommon.qbl                                                                                                               |   13 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_PlantName.qbl                                                                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResultProductInStockingPoint_MP.def                                                              |   63 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlActions_btnOk_OnClick.def                                                                   |    2 
 _Main/BL/Type_Global_ProductCategory/StaticMethod_CreateStream.qbl                                                                                                            |   19 
 _Main/BL/Type_DataInterfaceLog/Attribute_ErrorNo.qbl                                                                                                                          |    7 
 _Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                         |    5 
 _Main/BL/Type_S_DT_SpliteStruct/Attribute_SpliteReason.qbl                                                                                                                    |    8 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listOrders#635.def                                                                                         |   54 
 _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/BL/Relations/Relation_PeggingResult_AllGroupChild_PeggingResult_AllGroupParent.qbl                                                                                      |   23 
 _Main/BL/Type_PriorityResult/Attribute_DemandDate.qbl                                                                                                                         |    1 
 _Main/BL/Type_Global_MAPISPIPCategory/Attribute_KeyProduct.qbl                                                                                                                |    7 
 _Main/BL/Type_Global_MappingProductInLane/DeclarativeReferenceRelation_CalcGlobal_ProductInLineCategory.qbl                                                                   |   14 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingProductData.qbl                                                                                                                  |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserCh#171.def |    4 
 _Main/BL/Type_Global_ProductInLineCategory/StaticMethod_Create.qbl                                                                                                            |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuEditPriorityFactor_OnClick#325.def                                                   |   20 
 _Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl                                                                                                                 |   10 
 _Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation.qbl                                                                                                              |   20 
 _Main/BL/Type_S_FunctionClass/_ROOT_Type_S_FunctionClass.qbl                                                                                                                  |   10 
 _Main/UI/MacroPlanner/Component_frmStandardAnalysis633/Component_swTop.def                                                                                                    |   29 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_CreateData.qbl                                                                                              |   32 
 _Main/BL/Type_PeggingResult/Attribute_NumberOfPlies.qbl                                                                                                                       |    7 
 _Main/BL/Type_S_DT_SpliteStruct/Attribute_OrderID.qbl                                                                                                                         |    8 
 _Main/BL/Type_PeggingResult/Attribute_ProductID.qbl                                                                                                                           |    7 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_ColumnType.qbl                                                                                                  |    7 
 _Main/Sys/ImgAttr/DataInterfaceLog.dme                                                                                                                                        |   31 
 _Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                       |    6 
 _Main/BL/Type_MacroPlan/Method_MappingProductData.qbl                                                                                                                         |    4 
 _Main/BL/Type_Global_ProductInLineCategory/_ROOT_Type_Global_ProductInLineCategory.qbl                                                                                        |    9 
 _Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                                |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingAllResultProductInStockingPoint_MP.def                                                           |   42 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListStockingPoint#140.def                                                                                   |   60 
 _Main/BL/Type_DataInterfaceLog/_ROOT_Type_DataInterfaceLog.qbl                                                                                                                |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_ListGlobalParameters.def                                                                                 |   59 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/_ROOT_Component_FormPriorityFactorGrading.def                                                                 |   22 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_ClickBtnOk.def                                                                                            |   19 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_IsExcludedFromFulfillmentKPIUser.qbl                                                                                                 |    7 
 _Main/BL/Type_Global_MappingAnnualBudgetReview/_ROOT_Type_Global_MappingSummaryOfInboundTransaction.qbl                                                                       |    9 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total5.qbl                                                                                                                |    7 
 _var/_Main/ModelSettings/Common/Dev-40/_ROOT_Role_Dev-40.properties                                                                                                           |    8 
 _Main/BL/Type_PriorityResult/Attribute_CustomerID.qbl                                                                                                                         |    1 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_Panel700_btn_OK_FCOS_OnClick.def                                                                       |   38 
 _Main/BL/Type_Global_MappingStockingPointCost/DeclarativeReferenceRelation_CalcGlobal_StockingPointCostCategory.qbl                                                           |   14 
 _Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_PlantName.qbl                                                                                                        |    9 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_SetFilterCriteria.qbl                                                                                          |   38 
 _Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl                                                                                                      |   10 
 _Main/BL/Type_S_DT_CustomOrder/DefaultValue_SegmentPriority.qbl                                                                                                               |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_ListPeggingProduct_MP_MenuSelectionAll_OnClick.def                                                       |   17 
 _Main/BL/Type_Global_MappingForecast/Attribute_ProductGrade.qbl                                                                                                               |    8 
 _Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_EmergencyTopping.qbl                                                                                              |   77 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_ListDataInterfaceLog_MenuDelete_OnClick.def                                                               |   18 
 _Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl                                                                                         |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingProduct_MP#34.def                                                                                |   59 
 _Main/UI/MacroPlannerWebApp/Views/PR_DATA.vw                                                                                                                                  |  204 
 _Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_Create.qbl                                                                                                        |   15 
 _Main/BL/Type_ModulePanelCorrespondence/_ROOT_Type_ModulePanelCorrespondence.qbl                                                                                              |    9 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_New.def                                                                                          |   19 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_OrderTag.qbl                                                                                                                         |    8 
 _Main/BL/Type_Global_MappingForecast/Attribute_SheetProfitability.qbl                                                                                                         |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Response_OnCreated.def                                                                               |   16 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnChanged.def                                                               |    4 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_pl_Function_FCOV_btn_sendERP_FCOV_OnClick.def                                                               |   16 
 _Main/BL/Type_PriorityResult/Attribute_PriorityResultScore.qbl                                                                                                                |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_pButton.def                                                                                          |   48 
 _Main/BL/Type_PeggingProduct_MP/StaticMethod_Create.qbl                                                                                                                       |   18 
 _Main/BL/Type_S_DT_SpliteStruct/_ROOT_Type_S_DT_SpliteStruct.qbl                                                                                                              |   10 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_CreateAllChildRelation.qbl                                                                                  |   17 
 _Main/BL/Type_PriorityPolicy/StaticMethod_GetDataByBusinessType.qbl                                                                                                           |    1 
 _Main/BL/Relations/Relation_PeggingResult_Child_PeggingResult_Parent.qbl                                                                                                      |   23 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_SheetProfitability.qbl                                                                                                               |    8 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_NumberOfPlies.qbl                                                                                              |    7 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_OutsideOfPlanningHorizonQuantity.qbl                                                                                                 |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_listActionBarPageDataInterfaceLog.def                                                                    |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingAllResult#1.def                                                                     |   10 
 _Main/BL/Relations/Relation_Global_ProductInLineCategory_GlobalOTDTable_GlobalOTDTable_Global_P.qbl                                                                           |   23 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_SummaryOfInboundTransaction.qbl                                                                             |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlContent.def                                                                                         |   83 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_ButtonGenerateProductCategory_OnClick#902.def                                                      |   24 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_pl_Function_FCOV_btn_deleteOrder_FCOV_OnClick.def                                                           |   36 
 _Main/BL/Type_Global_InventorySupplyCategory/Attribute_IsCommon.qbl                                                                                                           |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPageStockingPoint.def                                                        |   10 
 _Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                              |    5 
 _Main/BL/Type_InventoryValueAndCost/StaticMethod_FindById.qbl                                                                                                                 |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def                                                                                   |    2 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeData.qbl                                                                                      |   18 
 _Main/BL/Type_SummaryOfInboundTransaction/_ROOT_Type_SummaryOfInboundTransaction.qbl                                                                                          |    9 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_SetParentChildRelationship.qbl                                                                              |   14 
 _Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNew_OnClick.def                                                                                   |    2 
 _Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_ProductCategory.qbl                                                                            |   14 
 _Main/UI/MacroPlannerWebApp/Views/PriorityTest.vw                                                                                                                             | 2199 -----
 _Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeMacroPlanData.qbl                                                                    |    5 
 _Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRateFromJson.qbl                                                                                                     |    3 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeByScenario.qbl                                                                                |   30 
 _Main/BL/Relations/Relation_PeggingProductInStockingPoint_MP_PeggingProduct_MP_PeggingProduct_M.qbl                                                                           |   23 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_Price.qbl                                                                                                                            |    7 
 _Main/BL/Type_DataInterfaceLog/Attribute_ID.qbl                                                                                                                               |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_listContextMenuSD.def                                                                                      |   36 
 _Main/BL/Type_S_DT_CustomOrder/DefaultValue_OrderTag.qbl                                                                                                                      |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_pButton.def                                                                                   |   26 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_SanityCheckDataMostSevere.qbl                                                                                                        |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_listContextMenuPriorityFactor_MenuNewPriorityFactor_OnClick.def                                             |   17 
 _Main/BL/Type_PeggingResult/Attribute_SupplyType.qbl                                                                                                                          |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_ListPeggingAllResult.def                                                                                 |   60 
 _Main/BL/Type_PeggingProductInSalesDemandBase/_ROOT_Type_PeggingProductInSalesDemandBase.qbl                                                                                  |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuNew_OnClick.def                                                                  |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listContextMenuModuleCorrespondence.def                                                         |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Response_OnCreated.def                                                                               |   16 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_Edit.def                                                                                                  |   17 
 _Main/BL/Type_PriorityResult/Attribute_Quantity.qbl                                                                                                                           |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuSummaryOfInboundTransaction.def                                                          |   10 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_pl_splite_info_btn_splite_add_OnClick.def                                                              |   51 
 _Main/BL/Type_PriorityResult/Attribute_StockingPointID.qbl                                                                                                                    |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnSelectionChanged.def                                                                   |    4 
 _Main/BL/Type_ProductInLane/StaticMethod_FindById.qbl                                                                                                                         |   16 
 _var/_Main/ModelSettings/Common/Live-23/_ROOT_Role_Live-23.properties                                                                                                         |  575 +
 _Main/BL/Type_Global_StockingPointCostCategory/_ROOT_Type_Global_StockingPointCostCategory.qbl                                                                                |    9 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Component_pnlContent.def                                                                                |   34 
 _Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                             |   20 
 _Main/BL/EDI/Broker_GlobalOTDTable_CustomOrder.qbl                                                                                                                            |   12 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged.def                                                                                |    3 
 _Main/BL/Type_ModulePanelCorrespondence/Attribute_ModuleStockingPointID.qbl                                                                                                   |    7 
 _Main/UI/MacroPlannerWebApp/Views/全局参数.vw                                                                                                                                     |  351 
 _var/_Main/ModelSettings/Common/Live-25/_ROOT_Role_Live-25.properties                                                                                                         |  575 +
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/_ROOT_Component_FormPeggingAllResult.def                                                                           |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_ButtonDeleteMappingData_OnClick#608.def                                                            |   30 
 _Main/BL/Relations/Relation_GlobalParameters_GlobalOTDTable_GlobalOTDTable_GlobalParameters.qbl                                                                               |   23 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_EndDate.qbl                                                                                                                          |    7 
 _Main/BL/Type_S_DT_OrderSpliteRow/Attribute_NewAttribute.qbl                                                                                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_ListSummaryOfInboundTransaction.def                                                           |   41 
 _Main/BL/Relations/Relation_Global_InventorySupplyCategory_Global_MappingInventorySupply_Global.qbl                                                                           |   23 
 _Main/UI/MacroPlannerWebApp/Views/模组_面板关系.vw                                                                                                                                  |  194 
 _Main/BL/Type_Global_MAPISPIPCategory/Function_CalcKeyProduct.qbl                                                                                                             |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuStockingPoint#1.def                                                                          |   36 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingDataStream.qbl                                                                                                      |   32 
 _var/_Main/ModelSettings/Common/Live-27/_ROOT_Role_Live-27.properties                                                                                                         |  575 +
 _Main/BL/Type_S_DT_CustomOrder/Attribute_SalesDemandConversionFactor.qbl                                                                                                      |    7 
 _Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl                                                                                                                              |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def                                                                                   |    2 
 _Main/BL/Relations/Relation_PeggingResult_AllChild_PeggingResult_AllParent.qbl                                                                                                |   23 
 _Main/BL/Type_PriorityFactor/_ROOT_Type_PriorityFactor.qbl                                                                                                                    |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def                                                                                 |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResult_MenuSelectionAll_OnClick.def                                                               |   17 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_lisplitedetails#450.def                                                                                    |   42 
 _Main/BL/Type_GlobalParameters/Attribute_AttributeName.qbl                                                                                                                    |    8 
 _Main/BL/Relations/Relation_PriorityFactorDetail_PriorityFactor_PriorityFactor_PriorityFactorDe.qbl                                                                           |   23 
 _Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                             |    7 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total6.qbl                                                                                                                |    7 
 _Main/BL/Type_PeggingResult/StaticMethod_Create.qbl                                                                                                                           |   31 
 _Main/BL/Type_GlobalDTOTable/Method_CreateCapacityAndSaleBudgeTestData#500.qbl                                                                                                |   74 
 _Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                               |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel3.def                                                                                               |   48 
 _Main/BL/Type_GlobalParameters/Attribute_AttributeValue.qbl                                                                                                                   |    8 
 _Main/BL/Type_InventoryValueAndCost/StaticMethod_CreateOrUpdate.qbl                                                                                                           |    8 
 _Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcStr.qbl                                                                                                                      |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listContextMenuWorkOrderType493.def                                                                         |   10 
 _Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcFormula.qbl                                                                                                                  |    1 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnCancel_OnClick.def                                                                        |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_PanelModule116_bDeleteModule_OnClick#462.def                                                     |   16 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_IsPostponed.qbl                                                                                                                      |    7 
 _Main/BL/Type_PeggingProduct_MP/Attribute_ProductID.qbl                                                                                                                       |    7 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingCustomerOrderData.qbl                                                                                                            |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def                                                                     |   60 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_ProductGrade.qbl                                                                                                                     |    8 
 _Main/BL/Relations/Relation_Global_MAPISPIPCategory_Global_MappingProduct_MP_Global_MappingProd.qbl                                                                           |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def                                                                                 |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_PanelGlobalParameters.def                                                                                |   14 
 _Main/BL/Type_LaneLeg/StaticMethod_FindByIdAndLane.qbl                                                                                                                        |   17 
 _Main/BL/Type_Global_ProductCategory/StaticMethod_Create.qbl                                                                                                                  |   15 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByMonth.qbl                                                                                             |   42 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_pl_Function_FCOV.def                                                                                       |  114 
 _Main/BL/Type_GlobalOTDSOP/StaticMethod_Test.qbl                                                                                                                              |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listActionBarPageWorkOrderType423.def                                                                       |   10 
 _Main/BL/Type_Global_MappingLane/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                                    |   52 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_IsSoftDeleted.qbl                                                                                                                    |    7 
 _Main/BL/Type_PriorityPolicy/Attribute_CalculateValue.qbl                                                                                                                     |    1 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_PISPConversionFactor.qbl                                                                                                             |    7 
 _Main/BL/Relations/Relation_S_DT_OrderSpliteRow_S_DT_CustomOrder_S_DT_CustomOrder_S_DT_OrderSpl.qbl                                                                           |   23 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_IsExcludedFromFulfillmentKPI.qbl                                                                                                     |    7 
 _Main/BL/Type_PeggingProduct_MP/StaticMethod_CreateData.qbl                                                                                                                   |   18 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_ClickBtnOK.def                                                                                          |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/_ROOT_Component_FormPeggingProduct_MP.def                                                                         |   18 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_SummaryOfInboundTransaction.qbl                                                                      |    9 
 _Main/BL/Type_DataInterfaceLog/Attribute_CreateDate.qbl                                                                                                                       |    7 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total12.qbl                                                                                                               |    7 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupScenarioComparisonViews_ButtonAnnualPro.def                                |   16 
 _Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_OrganCode.qbl                                                                                                        |    9 
 _Main/BL/Type_PriorityFactor/StaticMethod_CheckNameValid.qbl                                                                                                                  |    3 
 _Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_PeggingProductInStockingPoin.qbl                                                                           |   23 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingProductInLaneData.qbl                                                                                                            |   15 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMData.qbl                                                                                                             |   29 
 _Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateFromMapping.qbl                                                                                                              |   27 
 _Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_Create.qbl                                                                                                          |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelLeft#865.def                                                                                           |   15 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_IsLeaf.qbl                                                                                                                           |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def                                                |    6 
 _Main/BL/Relations/Relation_Global_InventorySupplyCategory_Global_MappingProduct_MP_Global_Mapp.qbl                                                                           |   23 
 _Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl                                                                                                                        |    3 
 _var/_Main/ModelSettings/Common/Live-21/_ROOT_Role_Live-21.properties                                                                                                         |  575 +
 _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_S_DT_CustomOrder/Attribute_LastModifyTime.qbl                                                                                                                   |    8 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total10.qbl                                                                                                               |    7 
 _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl                                                                                                               |  294 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Response_OnCreated.def                                                                              |   16 
 _Main/BL/Type_PeggingResult/Attribute_FulfillmentQuantity.qbl                                                                                                                 |    8 
 _Main/BL/Type_S_DT_CustomOrder/DeclarativeTypeIndexRelation_CalcChild.qbl                                                                                                     |   16 
 _Main/BL/Type_InventoryValueAndCost/StaticMethod_DoASync.qbl                                                                                                                  |    5 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total7.qbl                                                                                                                |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_Button5_OnClick#605.def                                                                            |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuDeletePriorityFactorGrading_OnClick.def                                |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_ListPriorityFactorGrading.def                                                                       |    2 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_Panel651.def                                                                                               |   44 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_IsManuallyConfigured.qbl                                                                                                             |    7 
 _Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/DeclarativeReferenceRelation_CalcGlobal_MAPISPIPCategory.qbl                                                 |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/_ROOT_Component_FormGlobalParameters.def                                                                           |   18 
 _Main/BL/Type_Global_MAPISPIPCategory/Attribute_ProductID.qbl                                                                                                                 |    7 
 _Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl                                                                                                                     |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingProductInSalesDemandBase.def                                                        |   10 
 _Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ColumnTitles552.def                                                                                               |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Method_CreateCapacityAndSaleBudgeCompareData.def                                                        |   40 
 _Main/BL/Type_ModulePanelCorrespondence/StaticMethod_PullCapacityAllocationRule.qbl                                                                                           |   29 
 _Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation1#809.qbl                                                                                                         |   29 
 _Main/BL/Type_PeggingResult/Attribute_SupplyQuantity.qbl                                                                                                                      |    7 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_SplitCount.qbl                                                                                                                       |    8 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_FulfilledQuantity.qbl                                                                                                                |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuDeletePriorityFactor_OnClick.def                                                     |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_PanelModule116_bAddModule_OnClick#61.def                                                         |   16 
 _Main/BL/Type_GlobalParameters/Attribute_PostRequestBody.qbl                                                                                                                  |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2.def                                                                                   |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageStockingPoint#1.def                                                                        |   10 
 _Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_StartDate.qbl                                                                                                        |    7 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_OrderID.qbl                                                                                                                          |    7 
 _Main/BL/Type_S_DT_CustomOrder/DefaultValue_BusinessType.qbl                                                                                                                  |    0 
 _Main/BL/Type_PriorityFactorDetails/Attribute_IsBusinessType.qbl                                                                                                              |    1 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_pl_spliteDetails.def                                                                                  |   26 
 _Main/BL/Type_SummaryOfInboundTransaction/StaticMethod_FlushData.qbl                                                                                                          |   55 
 _Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_SalesDemandBaseID.qbl                                                                                                 |    7 
 _Main/BL/Relations/Relation_S_DT_CustomOrder_MacroPlan_MacroPlan_S_DT_CustomOrder.qbl                                                                                         |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/_ROOT_Component_FormSummaryOfInboundTransaction.def                                                     |   18 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_Variance.qbl                                                                                                                         |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_pButton_407_bRunPeggingAlgorithm_OnClick.def                                                                 |   22 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_list_SpliteDetails#136.def                                                                            |   61 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listActionBarPageGlobalParameters.def                                                                    |   10 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_dh_Paramer_FCOS_OnDataChanged.def                                                                      |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_pButton_ButtonCapacityAndSaleBudgeCompare_OnClick#231.def                                      |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_ListPeggingProduct_MP.def                                                                               |   59 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelPanel.def                                                                                  |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_ListDataInterfaceLog.def                                                                                 |   59 
 _Main/BL/Type_S_DT_SpliteStruct/Attribute_ID.qbl                                                                                                                              |    9 
 _Main/BL/Type_PeggingResult/Attribute_ActualFulfillmentQuantity.qbl                                                                                                           |    8 
 _Main/BL/Type_PriorityResult/Attribute_Customer.qbl                                                                                                                           |    1 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_pl_Function_FCOV_btn_splitRow_FCOV_OnClick.def                                                              |   25 
 _Main/BL/Type_PriorityPolicy/Attribute_BusinessType.qbl                                                                                                                       |    1 
 _Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl                                                                                                     |   10 
 _Main/BL/Type_Global_ProductInLineCategory/StaticMethod_CreateStream.qbl                                                                                                      |   19 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_IsLocked.qbl                                                                                                                         |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Response_ListPeggingAllResult_MenuSelectAll_OnClick.def                                                            |   17 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_Panel700.def                                                                                          |   39 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_StartDate.qbl                                                                                                                        |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest.def                                                                                      |    2 
 _Main/BL/Type_MacroPlan/Method_ApiCurencyRatesData.qbl                                                                                                                        |    3 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_ID_SpliteStruct.qbl                                                                                                                  |    8 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def                                                                     |   27 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_pl_DataView.def                                                                                            |   16 
 _Main/BL/Type_PeggingProduct_MP/_ROOT_Type_PeggingProduct_MP.qbl                                                                                                              |    9 
 _Main/BL/Type_Lane/StaticMethod_CreateLaneFromJson.qbl                                                                                                                        |   19 
 _Main/BL/Type_S_FunctionClass/StaticMethod_SM_OrderToSpliteOrder.qbl                                                                                                          |  207 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def                                                                         |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_PanelSalesDemands.def                                                                                      |    1 
 _Main/BL/Relations/Relation_Global_MAPISPIPCategory_Global_MappingActualProductInStockingPointI.qbl                                                                           |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def                                      |    8 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_DemandUncertaintyPercentage.qbl                                                                                                      |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/_ROOT_Component_FormHistoricalSalesOrders.def                                                                 |    4 
 _Main/BL/Type_S_DT_SpliteStruct/Attribute_Status.qbl                                                                                                                          |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingAllResult#1.def                                                                       |   25 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listActionBarPage243#1.def                                                                                 |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listContextMenuGlobalParameters.def                                                                      |   57 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_Quantity.qbl                                                                                                                         |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/_ROOT_Component_DialogEditPriorityFactorDetail.def                                                      |   32 
 _var/_Main/ModelSettings/Common/Dev-42/_ROOT_Role_Dev-42.properties                                                                                                           |    8 
 _Main/BL/Type_Global_MappingInventorySupply/DeclarativeReferenceRelation_CalcGlobal_InventorySupplyCategory.qbl                                                               |   14 
 _Main/BL/Type_DataInterfaceLog/StaticMethod_OnSuccess.qbl                                                                                                                     |   14 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_ID.qbl                                                                                                                               |    8 
 _Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan#127.qbl                                                                                                        |   18 
 _Main/BL/Type_S_DT_CustomOrder/DefaultValue_CustomerPolicy.qbl                                                                                                                |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelSalesDemand.def                                                                      |   15 
 _Main/BL/Type_DataInterfaceLog/StaticMethod_OnError.qbl                                                                                                                       |   18 
 _Main/BL/Type_PriorityResultDetail/Attribute_PriorityPolicyName.qbl                                                                                                           |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelStockingPoint.def                                                                    |   15 
 _Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl                                                                                                                     |   53 
 _Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_Item.qbl                                                                                                             |    9 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Item.qbl                                                                                                                  |    8 
 _Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                        |   24 
 _Main/BL/Type_PriorityResultDetail/Attribute_CustomerID.qbl                                                                                                                   |    1 
 _Main/BL/Type_PriorityFactorDetails/Attribute_GradeDesc.qbl                                                                                                                   |    1 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total8.qbl                                                                                                                |    7 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationBudget.qbl                                                                                |   28 
 _Main/BL/Type_MacroPlan/StaticMethod_DoASync.qbl                                                                                                                              |    6 
 _Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_CreateStream.qbl                                                                                                    |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelContent.def                                                                          |   16 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_DerivedPriorityName.qbl                                                                                                              |    7 
 _Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_AllChild_PeggingResultProduc.qbl                                                                           |   23 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_OrganCode.qbl                                                                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_listContextMenuDataInterfaceLog.def                                                                      |   36 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_LastModify.qbl                                                                                                                       |    8 
 _Main/BL/Type_Currency_MP/StaticMethod_CreateFromMapping.qbl                                                                                                                  |   27 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/_ROOT_Component_FormModulePanelCorrespondence.def                                                         |   44 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GetPanelAllocationQuantity.qbl                                                                                 |   31 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_QuantityInDefaultUoM.qbl                                                                                                             |    7 
 _Main/UI/MacroPlanner/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def                                                                                       |   41 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Response_TIANMA_JITUAN_listContextMenuSD_MenuSyncInterfaceData_OnClick.def                                           |   16 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total11.qbl                                                                                                               |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/_ROOT_Component_FormPeggingProductInSalesDemandBase.def                                             |   17 
 _Main/BL/EDI/Broker_GlobalOTDTable_AnnualBudgetData.qbl                                                                                                                       |   80 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_Panel655.def                                                                                    |   37 
 _Main/BL/Type_DataInterfaceLog/Attribute_ErrorMessage.qbl                                                                                                                     |    7 
 _Main/BL/Type_PriorityFactorDetails/Attribute_GradingName.qbl                                                                                                                 |    1 
 _Main/BL/Relations/Relation_PeggingResult_PeggingProductInSalesDemandBase_PeggingProductInSales.qbl                                                                           |   23 
 _Main/BL/Type_S_DT_SpliteStruct/DefaultValue_Status.qbl                                                                                                                       |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_New.def                                                                                                   |   15 
 _Main/BL/Type_PriorityFactorDetails/_ROOT_Type_PriorityFactorDetail.qbl                                                                                                       |   10 
 _Main/BL/EDI/Broker_GlobalOTDTable_Operation.qbl                                                                                                                              |   14 
 _Main/BL/Type_CurrencyRate_MP/StaticMethod_FindByIdAndStart.qbl                                                                                                               |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def                                                                   |   23 
 _Main/BL/Type_ProductInLane/StaticMethod_CreateOrUpdate.qbl                                                                                                                   |    6 
 _Main/BL/Type_S_DT_CustomOrder/_ROOT_Type_S_DT_CustomOrder.qbl                                                                                                                |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_pButton_ButtonExportCompare_OnClick#325.def                                                    |   20 
 _Main/BL/Type_PeggingResult/Attribute_UnitOfMeasurementName.qbl                                                                                                               |    7 
 _Main/BL/Relations/Relation_Global_InventorySupplyCategory_GlobalOTDTable_GlobalOTDTable_Global.qbl                                                                           |   23 
 _Main/BL/Relations/Relation_Global_ProductCategory_Global_MappingProduct_MP_Global_MappingProdu.qbl                                                                           |   23 
 _Main/BL/Relations/Relation_S_FunctionClass_MacroPlan_MacroPlan_S_FunctionClass.qbl                                                                                           |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageRight.def                                                                                  |   10 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_Panel651_btn_delete_FCOV_OnClick.def                                                                        |   22 
 _Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                        |    5 
 _Main/BL/Type_PriorityResult/Attribute_UnitOfMeasureName.qbl                                                                                                                  |    1 
 _Main/BL/Type_S_DT_SpliteStruct/Attribute_ID_S_DT_CustomOrder.qbl                                                                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def                                                                                   |    2 
 _Main/UI/MacroPlannerWebApp/Views/年度产销复盘.vw                                                                                                                                   |  738 -
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocation.qbl                                                                                      |   18 
 _Main/BL/Type_PriorityResult/Attribute_BusinessType.qbl                                                                                                                       |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuStockingPoint.def                                                          |   10 
 _Main/BL/Type_PriorityPolicy/StaticMethod_RollBackCalcStr.qbl                                                                                                                 |    1 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def                                                                           |    2 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_SpliteRenmain.qbl                                                                                                                    |    8 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByYear.qbl                                                                                              |   38 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_StartDate.qbl                                                                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_TIANMA_JITUAN_PanelGeneral_549_dsPlanningStart_OnCreated.def                                          |   16 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_DataHolderAllScenario_OnDataChanged.def                                                  |   33 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelSalesDemand#411.def                                                                                    |   15 
 _Main/BL/Relations/Relation_Global_MAPISPIPCategory_GlobalOTDTable_GlobalOTDTable_Global_MAPISP.qbl                                                                           |   23 
 _Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_CheckCanTopping.qbl                                                                                               |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def                                                                               |   19 
 _Main/BL/Relations/Relation_S_DT_SpliteStruct_MacroPlan_MacroPlan_S_DT_SpliteStruct.qbl                                                                                       |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_pButton#407.def                                                                                             |   37 
 _Main/BL/Type_PriorityFactorDetails/StaticMethod_GetDataByPriorityFactor.qbl                                                                                                  |    5 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationDataForScenario.qbl                                                                       |   42 
 _Main/BL/Type_PriorityFactorDetails/Attribute_RangeMin.qbl                                                                                                                    |    1 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlContent_IsApi_OnChanged.def                                                                          |   18 
 _Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_OrganName.qbl                                                                                                        |    9 
 _Main/BL/Type_PriorityPolicy/Attribute_Name.qbl                                                                                                                               |    1 
 _Main/BL/Type_DataInterfaceLog/Attribute_ExecuteStatus.qbl                                                                                                                    |   14 
 _Main/UI/MacroPlanner/Component_frmStandardAnalysis633/Component_swTopMost.def                                                                                                |   20 
 _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl                                                                                                             |  225 
 _Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_StockingPointID.qbl                                                                                                  |    7 
 _Main/BL/Type_PriorityFactorDetails/StaticMethod_ClearTestData.qbl                                                                                                            |    1 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GetPanelAllocationQuantityForBudget.qbl                                                                        |   62 
 _Main/BL/Type_GlobalOTDSOP/Method_SetCapacityAndSaleBudgeRunStatus.qbl                                                                                                        |   10 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioComparison.def                                                                   |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_PanelSDIP.def                                                                                              |    8 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_TotalIdentification.qbl                                                                                         |    8 
 _Main/BL/Type_BaseConversionFactor/StaticMethod_CreateOrUpdate.qbl                                                                                                            |   14 
 _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/BL/Type_MacroPlan/Method_DoASyncMappingActualPISPIPData.qbl                                                                                                             |   34 
 _Main/UI/MacroPlanner/Component_frmStandardAnalysis633/_ROOT_Component_frmStandardAnalysis633.def                                                                             |   19 
 _Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorName.qbl                                                                                                           |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListSummaryOfInboundTransaction.def                                                                     |   41 
 _Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                            |    5 
 _Main/BL/Type_ModulePanelCorrespondence/Attribute_PanelProductID.qbl                                                                                                          |    7 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_BusinessType.qbl                                                                                                                     |    8 
 _Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def                                                                                           |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnCreated.def                                                               |    4 
 _Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_InitializedData.qbl                                                                                                 |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelContent#807.def                                                                                        |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/_ROOT_Component_FormWorkOrderType.def                                                                                 |    1 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_pl_OperateBtns_FCOS.def                                                                               |   16 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listContextMenu655#1.def                                                                                   |   10 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total9.qbl                                                                                                                |    7 
 _Main/UI/MacroPlanner/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuGeneratePeggingResult_OnCli.def                                            |   15 
 _Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRate.qbl                                                                                                             |    5 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByQuarter.qbl                                                                                           |   45 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_886_MenuSelectionAll_OnClick.def                       |   17 
 _Main/BL/Relations/Relation_S_DT_OrderSpliteRow_MacroPlan_MacroPlan_S_DT_OrderSpliteRow.qbl                                                                                   |   23 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateData.qbl                                                                                                    |   28 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResultProductInStockingPoint_MP_MenuSelectionAll666_OnCl.def                                      |   17 
 _Main/BL/Type_GlobalParameters/StaticMethod_TestForApiRequest.qbl                                                                                                             |  172 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllCategoryDataStream.qbl                                                                                                     |   17 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_HasPostponedSalesDemand.qbl                                                                                                          |    7 
 _Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StockingPointID.qbl                                                                                                   |    7 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_listActionBarPage229#1.def                                                                            |   10 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/_ROOT_Component_FrmCustomOrderView.def                                                                               |   19 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_ScenarioName.qbl                                                                                                |    7 
 _Main/BL/Type_PriorityResultDetail/Attribute_DemandDate.qbl                                                                                                                   |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button4_OnClick#249.def                                                                            |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_pButton_407_bCreate_OnClick.def                                                                              |   23 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_CreateData.qbl                                                                                                      |    9 
 _Main/BL/Type_Global_MappingProduct_MP/Attribute_Critical.qbl                                                                                                                 |    8 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_SupplyType.qbl                                                                                                 |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def                                                                          |   33 
 _Main/BL/Type_LaneLeg/StaticMethod_CreateLaneleg.qbl                                                                                                                          |    7 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_OrderLineID.qbl                                                                                                                      |    7 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_IsFirmed.qbl                                                                                                                         |    7 
 _Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl                                                                                                                  |   41 
 _Main/BL/Type_ModulePanelCorrespondence/StaticMethod_CreatePanel.qbl                                                                                                          |   23 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_SanityCheckDataTotalViolationCount.qbl                                                                                               |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_pButton.def                                                                                   |   47 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResult.def                                                                                       |   63 
 _Main/BL/Type_DataInterfaceLog/StaticMethod_Create.qbl                                                                                                                        |   21 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/_ROOT_Type_PeggingResultProductInStockingPoint_MP.qbl                                                                    |    9 
 _Main/BL/Type_PriorityResultDetail/Attribute_PriorityResultScore.qbl                                                                                                          |    1 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_PriceUoM.qbl                                                                                                                         |    7 
 _Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_InitializedData.qbl                                                                                                |   16 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def                                                                                     |   37 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuEdit_OnClick.def                                                                 |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonExportDetail_OnClick#971.def                                                            |   23 
 _Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Method_DataDistribution.def                                                                                      |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listActionBarPagePeggingProduct_MP.def                                                                  |   10 
 _Main/BL/Relations/Relation_ModulePanelCorrespondence_Panel_ModulePanelCorrespondence_Module.qbl                                                                              |   23 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_FilterCalculationRows.qbl                                                                                         |   21 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GenerateBasicDataBasedOnFilteringCriteria.qbl                                                                  |   41 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_SpliteReason.qbl                                                                                                                     |    8 
 _Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                         |    5 
 _Main/BL/Relations/Relation_S_DT_CustomOrder_Child_S_DT_CustomOrder_Parent.qbl                                                                                                |   23 
 _Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl                                                                                                            |   10 
 _Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl                                                                                                         |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuNewPriorityFactor_OnClick.def                                                        |   20 
 _Main/BL/Type_Global_InventorySupplyCategory/_ROOT_Type_Global_InventorySupplyCategory.qbl                                                                                    |    9 
 _Main/BL/Type_MacroPlan/StaticMethod_DoASync#253.qbl                                                                                                                          |  108 
 _Main/BL/Type_PriorityResult/Attribute_SalesSegmentName.qbl                                                                                                                   |    1 
 _Main/BL/Relations/Relation_DataInterfaceLog_GlobalOTDLog_GlobalOTDLog_DataInterfaceLog.qbl                                                                                   |   23 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnOk_OnClick.def                                                                            |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listContextMenuModulePanelCorrespondence#1.def                                                  |   25 
 _Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_InventorySupplyCategory.qbl                                                                    |   14 
 _Main/BL/Type_PriorityResult/_ROOT_Type_PriorityResult.qbl                                                                                                                    |    1 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByHalfAYear.qbl                                                                                         |   42 
 _Main/BL/Type_ModulePanelCorrespondence/Attribute_IsModule.qbl                                                                                                                |    7 
 _Main/BL/Type_DataInterfaceLog/StaticMethod_OnException.qbl                                                                                                                   |   16 
 _Main/BL/Type_PriorityFactorDetails/Attribute_IsRange.qbl                                                                                                                     |    1 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_OrganName.qbl                                                                                                             |    8 
 _Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl                                                                                                          |   13 
 _Main/BL/Type_PeggingProduct_MP/StaticMethod_CreateDataForSalesDemandBase.qbl                                                                                                 |   21 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_pl_function_FCOS.def                                                                                  |   41 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingResult.def                                                                          |   10 
 _Main/BL/Type_CapacityAndSaleBudgeRunStatus/_ROOT_Type_CapacityAndSaleBudgeRunStatus.qbl                                                                                      |    9 
 _Main/BL/Type_Lane/StaticMethod_FindByIdAndUnit.qbl                                                                                                                           |   16 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingData.qbl                                                                                                            |   15 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_Status_Splite.qbl                                                                                                                    |    8 
 _Main/BL/Type_PriorityFactor/StaticMethod_GetDataByBusinessType.qbl                                                                                                           |    1 
 _Main/BL/Type_S_DT_OrderSpliteRow/_ROOT_Type_S_DT_OrderSpliteRow.qbl                                                                                                          |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button3_OnClick#918.def                                                                            |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_DataHolderPriorityFactor_OnDataChanged.def                                                           |   19 
 _Main/BL/Type_Global_ProductInLineCategory/Attribute_ProductID.qbl                                                                                                            |    7 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total1.qbl                                                                                                                |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_ListPriorityFactor.def                                                                                     |    6 
 _Main/BL/Relations/Relation_Global_StockingPointCostCategory_Global_MappingStockingPointCost_Gl.qbl                                                                           |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listContextMenuPriorityFactorGrading.def                                                            |   36 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelStockingPoint#569.def                                                                                  |   15 
 _var/_Main/ModelSettings/Common/Dev-23/_ROOT_Role_Dev-23.properties                                                                                                           |   46 
 _Main/BL/Type_PeggingResult/StaticMethod_CreateData.qbl                                                                                                                       |   28 
 _Main/BL/Type_Global_MAPISPIPCategory/Function_CalcCritical.qbl                                                                                                               |   13 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_Create.qbl                                                                                                  |   31 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_SetAllChildRelation.qbl                                                                                     |   20 
 _Main/BL/Type_PriorityResult/Attribute_ProductID.qbl                                                                                                                          |    1 
 _Main/BL/Type_PeggingResult/Attribute_StartDate.qbl                                                                                                                           |    7 
 _Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl                                                                                                                 |   27 
 _Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Component_pnlContent.def                                                                                         |   39 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_listContextMenu950#1.def                                                                              |   25 
 _Main/BL/Type_Lane/StaticMethod_CreasteFromMapping.qbl                                                                                                                        |   59 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_SanityCheckDataMostSevereCount.qbl                                                                                                   |    7 
 _Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_ProductInLineCategory.qbl                                                                      |   14 
 _Main/BL/EDI/Broker_GlobalOTDTable_Forecast.qbl                                                                                                                               |   18 
 _Main/BL/Type_PriorityResultDetail/Attribute_Quantity.qbl                                                                                                                     |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_Button1_OnClick#673.def                                                                            |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListStockingPoint_140_MenuSelectionAll506_OnClick.def                                                        |   17 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_ParentID.qbl                                                                                                                         |    7 
 _Main/BL/Type_PriorityFactorDetails/Attribute_GradeTarget.qbl                                                                                                                 |    1 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_OrderTime.qbl                                                                                                                        |    8 
 _Main/BL/Type_Global_MappingProduct_MP/Function_CalcCritical.qbl                                                                                                              |   12 
 _Main/BL/Type_GlobalParameters/Attribute_Address.qbl                                                                                                                          |    8 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_Year.qbl                                                                                                        |    7 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl                                                                                            |    6 
 _Main/BL/Type_DataInterfaceLog/Attribute_Message.qbl                                                                                                                          |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_pButton.def                                                                                             |   37 
 _Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl                                                                                                              |   10 
 _Main/BL/Type_MacroPlan/Method_ApiLaneLegsData.qbl                                                                                                                            |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelModule116.def                                                                              |   48 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_dh_Paramer_SCustomOrder_FCOS_OnDataChanged.def                                                         |   25 
 _var/_Main/ModelSettings/Common/Dev-38/_ROOT_Role_Dev-38.properties                                                                                                           |    8 
 _Main/BL/Type_PeggingProductInStockingPoint_MP/_ROOT_Type_PeggingProductInStockingPoint_MP.qbl                                                                                |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListStockingPoint_140_mGeneratePeggingResult266_OnClick.def                                                  |   19 
 _Main/BL/Type_PriorityFactor/Method_CreatePrioitifyFacotrDetail.qbl                                                                                                           |   11 
 _Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl                                                                                                                 |   57 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_OrderType.qbl                                                                                                                        |    8 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_UnitOfMeasureName.qbl                                                                                                                |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_PanelModule116_bPullCapacityAllocationRule_OnClick.def                                           |   16 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_GeneratePeggingResult.qbl                                                                                   |   25 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/_ROOT_Component_DialogGlobalParameters.def                                                                       |   31 
 _Main/BL/Relations/Relation_Global_StockingPointCostCategory_GlobalOTDTable_GlobalOTDTable_Glob.qbl                                                                           |   23 
 _Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                        |   20 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_UnitOfMeasurementName.qbl                                                                                      |    7 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_ExpectedQuantity.qbl                                                                                                                 |    7 
 _Main/BL/Type_StockingPoint_MP/StaticMethod_CreateFromMapping.qbl                                                                                                             |   28 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_listContextMenuGlobalParameters_MenuInitial_OnClick.def                                                   |   16 
 _Main/BL/EDI/Broker_GlobalOTDTable_SummaryOfInboundTransaction.qbl                                                                                                            |  127 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonCreateData_OnClick.def                                                                  |   34 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel4#2.def                                                                                             |   37 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_PanelSalesDemand_411_OnActivate.def                                                                          |   20 
 _Main/BL/Type_PeggingResult/StaticMethod_GenerateInventorySupply.qbl                                                                                                          |   31 
 _Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def                                                                           |  117 
 _Main/BL/Type_Global_InventorySupplyCategory/Function_CalcIsCommon.qbl                                                                                                        |   13 
 _Main/BL/Type_Global_MAPISPIPCategory/Attribute_Critical.qbl                                                                                                                  |    8 
 _Main/BL/Relations/Relation_Global_MappingSummaryOfInboundTransaction_GlobalOTDTable_GlobalOTDT.qbl                                                                           |   23 
 _Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl                                                                                                                     |    1 
 _Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_CreateStream.qbl                                                                                                           |   20 
 _Main/BL/Type_Lane/StaticMethod_FindById.qbl                                                                                                                                  |   15 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlActions.def                                                                                         |   40 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_ListModulePanelCorrespondence_612_MenuSelectAll_OnClick.def                                      |   17 
 _Main/BL/Type_Global_MappingAnnualBudgetReview/TypeIndex_Global_MappingSummaryOfInboundTransactionTypeIndex.qbl                                                               |   28 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_QuantityPerDay.qbl                                                                                                                   |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingAllResult_103_MenuSelectAll_OnClick.def                                                           |   17 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_IsValidData.qbl                                                                                                                      |    7 
 _Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_Child_PeggingResultProductIn.qbl                                                                           |   23 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeRunStatus_GlobalOTDSOP_GlobalOTDSOP_CapacityAnd.qbl                                                                           |   23 
 _Main/UI/MacroPlannerWebApp/Views/Pegging分析.vw                                                                                                                                |  519 +
 _Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_InitializedData.qbl                                                                                         |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelRight#520.def                                                                                          |   16 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_Month.qbl                                                                                                       |    7 
 _Main/BL/Type_DataInterfaceLog/StaticMethod_Success.qbl                                                                                                                       |   16 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_StockingPointID.qbl                                                                                                                  |    7 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeDataForScenario.qbl                                                                           |   47 
 _Main/BL/Type_PeggingResult/_ROOT_Type_PeggingResult.qbl                                                                                                                      |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_PanelStockingPoint_569_OnActivate.def                                                                        |   20 
 _Main/BL/Type_Global_StockingPointCostCategory/Attribute_ProductID.qbl                                                                                                        |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase#1.def                                    |   10 
 _Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_Quantity.qbl                                                                                                          |    7 
 _Main/BL/Type_PriorityFactorDetails/Attribute_RangeMax.qbl                                                                                                                    |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelSummaryOfInboundTransaction.def                                                                    |   15 
 _Main/BL/Type_S_DT_SpliteStruct/Attribute_ForecastDate.qbl                                                                                                                    |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageBelow.def                                                                                  |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_CheckSelectAll_OnChanged.def                                                                                 |   35 
 _Main/BL/Type_PRData/StaticMethod_GeneratesTheSpecifiedXMLColumn#56.qbl                                                                                                       |    0 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_dhStatus_OnDataChanged.def                                                                     |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelBelow.def                                                                                              |   16 
 _Main/BL/Type_Global_MappingAnnualBudgetReview/StaticMethod_SynchronizeInterfaceData.qbl                                                                                      |   18 
 _Main/BL/Type_S_DT_CustomOrder/DefaultValue_LastModify.qbl                                                                                                                    |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuEditPriorityFactorGrading_OnClick.def                                  |   20 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listContextMenu199#1.def                                                                                   |   10 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_AnnualBudgetData.qbl                                                                                        |    6 
 _Main/BL/Type_ModulePanelCorrespondence/StaticMethod_CreateModule.qbl                                                                                                         |   19 
 _Main/BL/Type_S_DT_CustomOrder/DefaultValue_OrderType.qbl                                                                                                                     |    0 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuDelete_OnClick.def                                                               |   19 
 _Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StartDate.qbl                                                                                                         |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonGenerateTestData_OnClick#19.def                                                         |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_ListWorkOrderType713.def                                                                                    |   37 
 _Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                         |   20 
 _var/_Main/ModelSettings/Common/Dev-27/_ROOT_Role_Dev-27.properties                                                                                                           |   46 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuBelow.def                                                                                    |   10 
 _var/_Main/ProjSettings/MacroPlanner/Views/X_分析视图_[414702.1.50321581].vw                                                                                                      | 3354 ++++++-
 _Main/BL/Relations/Relation_PeggingProductInSalesDemandBase_PeggingProduct_MP_PeggingProduct_MP.qbl                                                                           |   23 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_ExecuteAsyncCapacityAndSaleBudgeCompare.qbl                                                                    |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelAbove.def                                                                                              |   16 
 _Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorGradingName.qbl                                                                                                    |    1 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total2.qbl                                                                                                                |    7 
 _Main/UI/MacroPlannerWebApp/Views/接口测试.vw                                                                                                                                     |   88 
 _Main/BL/Type_GlobalParameters/Attribute_Port.qbl                                                                                                                             |    8 
 _Main/BL/Type_Global_MAPISPIPCategory/_ROOT_Type_Global_MAPISPIPCategory.qbl                                                                                                  |    9 
 _Main/BL/Type_Global_MappingLaneLeg/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                                 |   35 
 _Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Response_pnlActions_btnOk_OnClick.def                                                                            |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listContextMenuPeggingProduct_MP.def                                                                    |   25 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationByScenario.qbl                                                                            |   30 
 _Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl                                                                                                                             |    2 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_SegmentPriority.qbl                                                                                                                  |    8 
 _Main/BL/Type_Global_ProductCategory/_ROOT_Type_Global_ProductCategory.qbl                                                                                                    |    9 
 _Main/BL/Type_DataInterfaceLog/Attribute_ExecuteUser.qbl                                                                                                                      |    7 
 _Main/BL/Type_PeggingResult/StaticMethod_GeneratePeggingResult.qbl                                                                                                            |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingAllResult#103.def                                                                                |   60 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuNewPriorityFactorGrading_OnClick.def                                   |   18 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_HasValidConversionFactor.qbl                                                                                                         |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_ListDataInterfaceLog_MenuSelectionAll_OnClick.def                                                         |   17 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMDataRouting.qbl                                                                                                      |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserChecke.def |    6 
 _Main/BL/Type_PriorityResultDetail/Attribute_Customer.qbl                                                                                                                     |    1 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_FulfillmentQuantity.qbl                                                                                        |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_pFilterCriteria.def                                                                             |   60 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_StockingPointID.qbl                                                                                            |    7 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_SalesSegmentName.qbl                                                                                                                 |    7 
 _Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpoint.qbl                                                                                                           |    2 
 _Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def                                                                                       |    2 
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl                                                                                                               |    4 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_Create.qbl                                                                                                        |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingProduct_MP#1.def                                                                    |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageSummaryOfInboundTransaction.def                                                        |   10 
 _Main/BL/Type_PeggingResult/Attribute_StockingPointID.qbl                                                                                                                     |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def                                       |   23 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationDataForBudget.qbl                                                                         |   48 
 _Main/BL/Type_S_DT_CustomOrder/DefaultValue_ProductGrade.qbl                                                                                                                  |    6 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_CurrencyID.qbl                                                                                                                       |    7 
 _Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_StockingPointCostCategory.qbl                                                                  |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Response_TIANMA_JITUAN_ListSalesDemands_MenuSpliteOrder_OnClick.def                                                  |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def                                                              |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_listActionBarPageSummaryOfInboundTransaction.def                                              |   10 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_pl_Function_FCOV_btn_huanyuan_FCOV_OnClick.def                                                              |   40 
 _Main/BL/Type_CapacityAndSaleBudgeRunStatus/Attribute_RunSataus.qbl                                                                                                           |    7 
 _Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl                                                                                                                |    1 
 _Main/BL/Type_PriorityResult/Attribute_CustomerOrderID.qbl                                                                                                                    |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelModule.def                                                                                 |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListStockingPoint.def                                                                     |   42 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button2_OnClick#836.def                                                                            |   20 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral#549.def                                                                                 |   10 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_SelectGenerateChartRows.qbl                                                                                       |   25 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_CustomerName.qbl                                                                                                                     |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingResult.def                                                                            |   25 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_ProductID.qbl                                                                                                                        |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_listContextMenuSummaryOfInboundTransaction.def                                                |   10 
 _Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl                                                                                                                |   70 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_pl_function_FCOS_btn_add_FCOS_OnClick.def                                                              |   32 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total3.qbl                                                                                                                |    7 
 _Main/BL/Type_PriorityResultDetail/Attribute_UnitOfMeasureName.qbl                                                                                                            |    1 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_Panel700_btn_Cancel_FCOS_OnClick.def                                                                   |   41 
 _Main/BL/Type_PriorityResultDetail/_ROOT_Type_PriorityResultDetail.qbl                                                                                                        |    1 
 _Main/BL/Relations/Relation_PeggingProduct_MP_GlobalOTDSOP_GlobalOTDSOP_PeggingProduct_MP.qbl                                                                                 |   23 
 _Main/BL/Type_Global_MAPISPIPCategory/Attribute_IsCommon.qbl                                                                                                                  |    7 
 _Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_ProductID.qbl                                                                                                        |    7 
 _Main/BL/Type_S_DT_CustomOrder/DefaultValue_SheetProfitability.qbl                                                                                                            |    6 
 _Main/BL/Type_PriorityFactor/Attribute_Desc.qbl                                                                                                                               |    1 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_GenerateNewSupply.qbl                                                                                       |   70 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listActionBarPagePeggingAllResult.def                                                                    |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def                                                   |    2 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_pl_splite_info.def                                                                                    |   50 
 _Main/BL/Type_PriorityPolicy/Attribute_Formula.qbl                                                                                                                            |    1 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllCategoryData.qbl                                                                                                           |   15 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_CustomerPolicy.qbl                                                                                                                   |    8 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_IsAvailable.qbl                                                                                                                      |    8 
 _Main/BL/Type_Global_InventorySupplyCategory/Attribute_ProductID.qbl                                                                                                          |    7 
 _Main/BL/Type_PriorityFactor/Attribute_Name.qbl                                                                                                                               |    1 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_list_SpliteDetails_136_m_delete_list_SD_OnClick.def                                                    |   37 
 _Main/BL/Type_PriorityResultDetail/Attribute_SalesSegmentName.qbl                                                                                                             |    1 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupScenarioComparisonViews#859.def                                                         |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def                                                         |   53 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_Panel713.def                                                                                               |   26 
 _Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_InitializedData.qbl                                                                                                 |   19 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_GetQuantity.qbl                                                                                                   |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bCreate_OnClick.def                                                                              |   23 
 _Main/BL/Type_Flag/_ROOT_Type_Flag.qbl                                                                                                                                        |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProduct_MP_34_MenuSelectionAll852_OnClick.def                                                     |   17 
 _Main/BL/Type_S_DT_CustomOrder/Attribute_CustomerID.qbl                                                                                                                       |    8 
 /dev/null                                                                                                                                                                     |  205 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_ListModulePanelCorrespondence#612.def                                                           |   75 
 _Main/BL/Relations/Relation_SummaryOfInboundTransaction_GlobalOTDSOP_GlobalOTDSOP_SummaryOfInbo.qbl                                                                           |   23 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolume.qbl                                                                                          |   28 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingInventoryValueAndCostData.qbl                                                                                                    |   15 
 _Main/BL/Relations/Relation_Global_ProductInLineCategory_Global_MappingProductInLane_Global_Map.qbl                                                                           |   23 
 _Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_Create.qbl                                                                                                                 |   15 
 _Main/BL/Type_PriorityFactor/Attribute_BusinessType.qbl                                                                                                                       |    1 
 _Main/BL/Type_PriorityResultDetail/Attribute_StockingPointID.qbl                                                                                                              |    1 
 _Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listActionBarPage978#1.def                                                                                 |   10 
 _Main/BL/Type_PriorityFactorDetails/Attribute_GradeValueStr.qbl                                                                                                               |    1 
 _Main/BL/Type_S_DT_CustomOrder/TypeIndex_PrimaryKey_ID.qbl                                                                                                                    |   12 
 749 files changed, 18,934 insertions(+), 4,743 deletions(-)

diff --git a/_Main/BL/EDI/Broker_Broker_OTD_ActualPISPIP.qbl b/_Main/BL/EDI/Broker_Broker_OTD_ActualPISPIP.qbl
deleted file mode 100644
index bc7c6a3..0000000
--- a/_Main/BL/EDI/Broker_Broker_OTD_ActualPISPIP.qbl
+++ /dev/null
@@ -1,153 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-EDIBroker Broker_OTD_ActualPISPIP
-{
-  MDSDefinition: MacroPlan
-  TimeZone: 'ACT'
-  UseOSTimeZone: false
-  EDIModelLink.Destination Des_ActualPISPIP
-  {
-    EDIMLTable MappingActualPISPIP
-    {
-      PrimaryKeyColumns: Date
-      PrimaryKeyColumns: ProductID
-      PrimaryKeyColumns: StockingPointID
-      TargetType: MappingActualPISPIP
-      TypeIndex: MappingActualPISPIPTypeIndex
-      EDIMLColumn ActualInventoryLevelEnd { Attribute: ActualInventoryLevelEnd ValueType: Real }
-      EDIMLColumn Date { Attribute: Date ValueType: Date }
-      EDIMLColumn Description { Attribute: Description ValueType: String }
-      EDIMLColumn IsAvailable { Attribute: IsAvailable ValueType: Boolean }
-      EDIMLColumn ManufacturedDate { Attribute: ManufacturedDate ValueType: Date }
-      EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
-      EDIMLColumn StockType { Attribute: StockType ValueType: String }
-      EDIMLColumn StockingPointID { Attribute: StockingPointID ValueType: String }
-    }
-  }
-  EDIODBCLink.Source MID_ActualPISPIP
-  {
-    DataIntegrityStrategy: 'Disabled'
-    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
-    EDIODBCLinkTable MID_ACTUALPISPIP
-    {
-      OthersMayCreateTable: true
-      OthersMayDeleteRow: true
-      OthersMayDropTable: true
-      OthersMayFlushTable: true
-      OthersMayInsertRow: true
-      Parameters: '/owner="TIANMA"'
-      RecordModificationHintStrategy: 'None'
-      EDIODBCLinkColumn ACTUALLINVENTORYLEVELEND
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn DATE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: DateTime
-      }
-      EDIODBCLinkColumn DESCRIPTION
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ISAVAILABLE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn MANUFACTUREDDATE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: DateTime
-      }
-      EDIODBCLinkColumn PRODUCTID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn STOCKINGPOINTID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn STOCKTYPE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-    }
-  }
-  EDITransformation.Transformation TransformationActualPISPIP
-  {
-    EDITableTransformation
-    {
-      InputTable: MID_ACTUALPISPIP
-      OutputTable: MappingActualPISPIP
-      EDIColumnMatch
-      {
-        InputColumn: ACTUALLINVENTORYLEVELEND
-        OutputColumn: ActualInventoryLevelEnd
-        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>
-          *]
-        }
-      }
-      EDIColumnMatch
-      {
-        InputColumn: DATE
-        OutputColumn: Date
-        Converter
-        {
-          XMLDefinition:
-          [*
-            <?xml version="1.0" encoding="UTF-16"?>
-            <DateTimeToDate xmlns="http://www.quintiq.com/GEB/DateTimeToDate" Key="@1">
-              <IsStandard>true</IsStandard>
-              <IsISO>false</IsISO>
-              <IsCustom>false</IsCustom>
-              <ConversionType>0</ConversionType>
-            </DateTimeToDate>
-          *]
-        }
-      }
-      EDIColumnMatch { InputColumn: DESCRIPTION OutputColumn: Description }
-      EDIColumnMatch { InputColumn: ISAVAILABLE OutputColumn: IsAvailable }
-      EDIColumnMatch
-      {
-        InputColumn: MANUFACTUREDDATE
-        OutputColumn: ManufacturedDate
-        Converter
-        {
-          XMLDefinition:
-          [*
-            <?xml version="1.0" encoding="UTF-16"?>
-            <DateTimeToDate xmlns="http://www.quintiq.com/GEB/DateTimeToDate" Key="@1">
-              <IsStandard>true</IsStandard>
-              <IsISO>false</IsISO>
-              <IsCustom>false</IsCustom>
-              <ConversionType>0</ConversionType>
-            </DateTimeToDate>
-          *]
-        }
-      }
-      EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductID }
-      EDIColumnMatch { InputColumn: STOCKINGPOINTID OutputColumn: StockingPointID }
-      EDIColumnMatch { InputColumn: STOCKTYPE OutputColumn: StockType }
-    }
-  }
-}
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_BOM.qbl b/_Main/BL/EDI/Broker_Broker_OTD_BOM.qbl
deleted file mode 100644
index 965dd1b..0000000
--- a/_Main/BL/EDI/Broker_Broker_OTD_BOM.qbl
+++ /dev/null
@@ -1,206 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-EDIBroker Broker_OTD_BOM
-{
-  MDSDefinition: MacroPlan
-  TimeZone: 'ACT'
-  UseOSTimeZone: false
-  EDIModelLink.Destination Des_MappingBOM
-  {
-    EDIMLTable MappingBOM
-    {
-      PrimaryKeyColumns: AlternativeMaterialCode
-      PrimaryKeyColumns: BusinessType
-      PrimaryKeyColumns: ComponentCode
-      PrimaryKeyColumns: OrganCode
-      PrimaryKeyColumns: ProcessSection
-      PrimaryKeyColumns: ProductCode
-      TargetType: MappingBOM
-      TypeIndex: BOMTypeIndex
-      EDIMLColumn AlternativeMaterialCode { Attribute: AlternativeMaterialCode ValueType: String }
-      EDIMLColumn AlternativeMaterialType { Attribute: AlternativeMaterialType ValueType: String }
-      EDIMLColumn AlternativeMaterialUnit { Attribute: AlternativeMaterialUnit ValueType: String }
-      EDIMLColumn AlternativeRate { Attribute: AlternativeRate ValueType: Real }
-      EDIMLColumn BusinessType { Attribute: BusinessType ValueType: String }
-      EDIMLColumn ComponentCode { Attribute: ComponentCode ValueType: String }
-      EDIMLColumn ComponentDescription { Attribute: ComponentDescription ValueType: String }
-      EDIMLColumn ComponentOutputRate { Attribute: ComponentOutputRate ValueType: Real }
-      EDIMLColumn ComponentType { Attribute: ComponentType ValueType: String }
-      EDIMLColumn ComponentUnit { Attribute: ComponentUnit ValueType: String }
-      EDIMLColumn ComponentUnitDescription { Attribute: ComponentUnitDescription ValueType: String }
-      EDIMLColumn DescriptionOfAlternativeMaterial { Attribute: DescriptionOfAlternativeMaterial ValueType: String }
-      EDIMLColumn DescriptionOfAlternativeMaterialUnits { Attribute: DescriptionOfAlternativeMaterialUnits ValueType: String }
-      EDIMLColumn MaterialSystem { Attribute: MaterialSystem ValueType: String }
-      EDIMLColumn OrganCode { Attribute: OrganCode ValueType: String }
-      EDIMLColumn ProcessSection { Attribute: ProcessSection ValueType: String }
-      EDIMLColumn ProductCode { Attribute: ProductCode ValueType: String }
-      EDIMLColumn ProductDescribe { Attribute: ProductDescribe ValueType: String }
-      EDIMLColumn ProductType { Attribute: ProductType ValueType: String }
-      EDIMLColumn ProductUnitDescription { Attribute: ProductUnitDescription ValueType: String }
-      EDIMLColumn SubstitutionRelationship { Attribute: SubstitutionRelationship ValueType: String }
-      EDIMLColumn UnitOfMeasureName { Attribute: UnitOfMeasureName ValueType: String }
-      EDIMLColumn UnitUsageOfComponents { Attribute: UnitUsageOfComponents ValueType: Real }
-    }
-  }
-  EDIODBCLink.Source MID_BOM
-  {
-    DataIntegrityStrategy: 'Disabled'
-    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
-    EDIODBCLinkTable MID_BOM
-    {
-      OthersMayCreateTable: true
-      OthersMayDeleteRow: true
-      OthersMayDropTable: true
-      OthersMayFlushTable: true
-      OthersMayInsertRow: true
-      Parameters: '/owner="TIANMA"'
-      RecordModificationHintStrategy: 'None'
-      EDIODBCLinkColumn ALTERNATIVEMATERIALCODE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ALTERNATIVEMATERIALTYPE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ALTERNATIVEMATERIALUNIT
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ALTERNATIVERATE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: Real
-      }
-      EDIODBCLinkColumn BUSINESSTYPE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn COMPONENTCODE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn COMPONENTDESCRIPTION
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn COMPONENTOUTPUTRATE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: Real
-      }
-      EDIODBCLinkColumn COMPONENTTYPE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn COMPONENTUNIT
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn COMPONENTUNITDESCRIPTION
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn DESCRIPTIONOFALTERNATIVEMATERIAL
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn DESCRIPTIONOFALTERNATIVEMATERIALUNIT
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn MATERIALSYSTEM
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ORGANCODE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PROCESSSECTION
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PRODUCTCODE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PRODUCTDESCRIBE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PRODUCTTYPE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PRODUCTUNITDESCRIPTION
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn SUBSTITUTIONRELATIONSHIP
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn UNITOFMEASURENAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn UNITUSAGEOFCOMPENENT
-      {
-        OthersMayUpdateColumn: true
-        ValueType: Real
-      }
-    }
-  }
-  EDITransformation.Transformation TransformationBOM
-  {
-    EDITableTransformation
-    {
-      InputTable: MID_BOM
-      OutputTable: MappingBOM
-      EDIColumnMatch { InputColumn: ALTERNATIVEMATERIALCODE OutputColumn: AlternativeMaterialCode }
-      EDIColumnMatch { InputColumn: ALTERNATIVEMATERIALTYPE OutputColumn: AlternativeMaterialType }
-      EDIColumnMatch { InputColumn: ALTERNATIVEMATERIALUNIT OutputColumn: AlternativeMaterialUnit }
-      EDIColumnMatch { InputColumn: ALTERNATIVERATE OutputColumn: AlternativeRate }
-      EDIColumnMatch { InputColumn: BUSINESSTYPE OutputColumn: BusinessType }
-      EDIColumnMatch { InputColumn: COMPONENTCODE OutputColumn: ComponentCode }
-      EDIColumnMatch { InputColumn: COMPONENTDESCRIPTION OutputColumn: ComponentDescription }
-      EDIColumnMatch { InputColumn: COMPONENTOUTPUTRATE OutputColumn: ComponentOutputRate }
-      EDIColumnMatch { InputColumn: COMPONENTTYPE OutputColumn: ComponentType }
-      EDIColumnMatch { InputColumn: COMPONENTUNIT OutputColumn: ComponentUnit }
-      EDIColumnMatch { InputColumn: COMPONENTUNITDESCRIPTION OutputColumn: ComponentUnitDescription }
-      EDIColumnMatch { InputColumn: DESCRIPTIONOFALTERNATIVEMATERIAL OutputColumn: DescriptionOfAlternativeMaterial }
-      EDIColumnMatch { InputColumn: DESCRIPTIONOFALTERNATIVEMATERIALUNIT OutputColumn: DescriptionOfAlternativeMaterialUnits }
-      EDIColumnMatch { InputColumn: MATERIALSYSTEM OutputColumn: MaterialSystem }
-      EDIColumnMatch { InputColumn: ORGANCODE OutputColumn: OrganCode }
-      EDIColumnMatch { InputColumn: PROCESSSECTION OutputColumn: ProcessSection }
-      EDIColumnMatch { InputColumn: PRODUCTCODE OutputColumn: ProductCode }
-      EDIColumnMatch { InputColumn: PRODUCTDESCRIBE OutputColumn: ProductDescribe }
-      EDIColumnMatch { InputColumn: PRODUCTTYPE OutputColumn: ProductType }
-      EDIColumnMatch { InputColumn: PRODUCTUNITDESCRIPTION OutputColumn: ProductUnitDescription }
-      EDIColumnMatch { InputColumn: SUBSTITUTIONRELATIONSHIP OutputColumn: SubstitutionRelationship }
-      EDIColumnMatch { InputColumn: UNITOFMEASURENAME OutputColumn: UnitOfMeasureName }
-      EDIColumnMatch { InputColumn: UNITUSAGEOFCOMPENENT OutputColumn: UnitUsageOfComponents }
-    }
-  }
-}
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_BaseConversionFactor.qbl b/_Main/BL/EDI/Broker_Broker_OTD_BaseConversionFactor.qbl
deleted file mode 100644
index 4bca9ec..0000000
--- a/_Main/BL/EDI/Broker_Broker_OTD_BaseConversionFactor.qbl
+++ /dev/null
@@ -1,78 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-EDIBroker Broker_OTD_BaseConversionFactor
-{
-  MDSDefinition: MacroPlan
-  TimeZone: 'ACT'
-  UseOSTimeZone: false
-  EDIModelLink.Destination Des_BaseConversionFactor
-  {
-    EDIMLTable MappingBaseConversionFactor
-    {
-      PrimaryKeyColumns: IsEnabled
-      PrimaryKeyColumns: ProductId
-      PrimaryKeyColumns: SourceUnitOfMeasureName
-      PrimaryKeyColumns: TargetUnitOfMeasureName
-      TargetType: MappingBaseConversionFactor
-      TypeIndex: MappingBaseConversionFactorTypeIndex
-      EDIMLColumn Factor { Attribute: Factor ValueType: Real }
-      EDIMLColumn IsEnabled { Attribute: IsEnabled ValueType: Boolean }
-      EDIMLColumn ProductId { Attribute: ProductId ValueType: String }
-      EDIMLColumn SourceUnitOfMeasureName { Attribute: SourceUnitOfMeasureName ValueType: String }
-      EDIMLColumn TargetUnitOfMeasureName { Attribute: TargetUnitOfMeasureName ValueType: String }
-    }
-  }
-  EDIODBCLink.Source MID_BaseConversionFactor
-  {
-    DataIntegrityStrategy: 'Disabled'
-    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
-    EDIODBCLinkTable MID_BASECONVERSIONFACTORS
-    {
-      OthersMayCreateTable: true
-      OthersMayDeleteRow: true
-      OthersMayDropTable: true
-      OthersMayFlushTable: true
-      OthersMayInsertRow: true
-      Parameters: '/owner="YUXTEST"'
-      RecordModificationHintStrategy: 'None'
-      EDIODBCLinkColumn FACTOR
-      {
-        OthersMayUpdateColumn: true
-        ValueType: Real
-      }
-      EDIODBCLinkColumn ISENABLED
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PRODUCTID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn SOURCEUNITOFMEASURENAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn TARGETUNITOFMEASURENAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-    }
-  }
-  EDITransformation.Transformation TransformationBaseConversionFactor
-  {
-    EDITableTransformation
-    {
-      InputTable: MID_BASECONVERSIONFACTORS
-      OutputTable: MappingBaseConversionFactor
-      EDIColumnMatch { InputColumn: FACTOR OutputColumn: Factor }
-      EDIColumnMatch { InputColumn: ISENABLED OutputColumn: IsEnabled }
-      EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductId }
-      EDIColumnMatch { InputColumn: SOURCEUNITOFMEASURENAME OutputColumn: SourceUnitOfMeasureName }
-      EDIColumnMatch { InputColumn: TARGETUNITOFMEASURENAME OutputColumn: TargetUnitOfMeasureName }
-    }
-  }
-}
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_CustomerOrder.qbl b/_Main/BL/EDI/Broker_Broker_OTD_CustomerOrder.qbl
deleted file mode 100644
index 362c208..0000000
--- a/_Main/BL/EDI/Broker_Broker_OTD_CustomerOrder.qbl
+++ /dev/null
@@ -1,176 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-EDIBroker Broker_OTD_CustomerOrder
-{
-  MDSDefinition: MacroPlan
-  TimeZone: 'ACT'
-  UseOSTimeZone: false
-  EDIModelLink.Destination Des_CustomerOrder
-  {
-    EDIMLTable MappingCustomerOrder
-    {
-      PrimaryKeyColumns: ID
-      TargetType: MappingCustomerOrder
-      TypeIndex: MappingCustomerOrderTypeIndex
-      EDIMLColumn BusinessType { Attribute: BusinessType ValueType: String }
-      EDIMLColumn CurrencyID { Attribute: CurrencyID ValueType: String }
-      EDIMLColumn Customer { Attribute: Customer ValueType: String }
-      EDIMLColumn CustomerID { Attribute: CustomerID ValueType: String }
-      EDIMLColumn ID { Attribute: ID ValueType: String }
-      EDIMLColumn IsAvailable { Attribute: IsAvailable ValueType: Boolean }
-      EDIMLColumn OrderDate { Attribute: OrderDate ValueType: Date }
-      EDIMLColumn OrderID { Attribute: OrderID ValueType: String }
-      EDIMLColumn OrderLineID { Attribute: OrderLineID ValueType: String }
-      EDIMLColumn OrderType { Attribute: OrderType ValueType: String }
-      EDIMLColumn Price { Attribute: Price ValueType: Real }
-      EDIMLColumn PriorityName { Attribute: PriorityName ValueType: String }
-      EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
-      EDIMLColumn Quantity { Attribute: Quantity ValueType: Real }
-      EDIMLColumn SalesSegmentName { Attribute: SalesSegmentName ValueType: String }
-      EDIMLColumn StockPointID { Attribute: StockPointID ValueType: String }
-      EDIMLColumn UnitOfMeasureName { Attribute: UnitOfMeasureName ValueType: String }
-    }
-  }
-  EDIODBCLink.Source MID_CUSTOMERORDER
-  {
-    DataIntegrityStrategy: 'Disabled'
-    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
-    EDIODBCLinkTable MID_CUSTOMERORDER
-    {
-      OthersMayCreateTable: true
-      OthersMayDeleteRow: true
-      OthersMayDropTable: true
-      OthersMayFlushTable: true
-      OthersMayInsertRow: true
-      Parameters: '/owner="TIANMA"'
-      RecordModificationHintStrategy: 'None'
-      EDIODBCLinkColumn BUSINESSTYPE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn CURRENCYID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn CUSTOMER
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn CUSTOMERID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ISAVAILABLE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ORDERDATE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: DateTime
-      }
-      EDIODBCLinkColumn ORDERID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ORDERLINEID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ORDERTYPE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PRICE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: Real
-      }
-      EDIODBCLinkColumn PRIORITYNAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PRODUCTID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn QUANTITY
-      {
-        OthersMayUpdateColumn: true
-        ValueType: Real
-      }
-      EDIODBCLinkColumn SALESEGMENTNAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn STOCKINGPOINTID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn UNITOFMEASURENAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-    }
-  }
-  EDITransformation.Transformation TransformationCustomerOrder
-  {
-    EDITableTransformation
-    {
-      InputTable: MID_CUSTOMERORDER
-      OutputTable: MappingCustomerOrder
-      EDIColumnMatch { InputColumn: BUSINESSTYPE OutputColumn: BusinessType }
-      EDIColumnMatch { InputColumn: CURRENCYID OutputColumn: CurrencyID }
-      EDIColumnMatch { InputColumn: CUSTOMER OutputColumn: Customer }
-      EDIColumnMatch { InputColumn: CUSTOMERID OutputColumn: CustomerID }
-      EDIColumnMatch { InputColumn: ID OutputColumn: ID }
-      EDIColumnMatch { InputColumn: ISAVAILABLE OutputColumn: IsAvailable }
-      EDIColumnMatch
-      {
-        InputColumn: ORDERDATE
-        OutputColumn: OrderDate
-        Converter
-        {
-          XMLDefinition:
-          [*
-            <?xml version="1.0" encoding="UTF-16"?>
-            <DateTimeToDate xmlns="http://www.quintiq.com/GEB/DateTimeToDate" Key="@1">
-              <IsStandard>true</IsStandard>
-              <IsISO>false</IsISO>
-              <IsCustom>false</IsCustom>
-              <ConversionType>0</ConversionType>
-            </DateTimeToDate>
-          *]
-        }
-      }
-      EDIColumnMatch { InputColumn: ORDERID OutputColumn: OrderID }
-      EDIColumnMatch { InputColumn: ORDERLINEID OutputColumn: OrderLineID }
-      EDIColumnMatch { InputColumn: ORDERTYPE OutputColumn: OrderType }
-      EDIColumnMatch { InputColumn: PRICE OutputColumn: Price }
-      EDIColumnMatch { InputColumn: PRIORITYNAME OutputColumn: PriorityName }
-      EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductID }
-      EDIColumnMatch { InputColumn: QUANTITY OutputColumn: Quantity }
-      EDIColumnMatch { InputColumn: SALESEGMENTNAME OutputColumn: SalesSegmentName }
-      EDIColumnMatch { InputColumn: STOCKINGPOINTID OutputColumn: StockPointID }
-      EDIColumnMatch { InputColumn: UNITOFMEASURENAME OutputColumn: UnitOfMeasureName }
-    }
-  }
-}
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_ExternalSupply.qbl b/_Main/BL/EDI/Broker_Broker_OTD_ExternalSupply.qbl
deleted file mode 100644
index 90a3bea..0000000
--- a/_Main/BL/EDI/Broker_Broker_OTD_ExternalSupply.qbl
+++ /dev/null
@@ -1,152 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-EDIBroker Broker_OTD_ExternalSupply
-{
-  MDSDefinition: MacroPlan
-  TimeZone: 'ACT'
-  UseOSTimeZone: false
-  EDIModelLink.Destination Des_ExternalSupply
-  {
-    EDIMLTable MappingExternalSupply
-    {
-      PrimaryKeyColumns: ID
-      TargetType: MappingExternalSupply
-      TypeIndex: MappingExternalSupplyTypeIndex
-      EDIMLColumn Date { Attribute: Date ValueType: Date }
-      EDIMLColumn Description { Attribute: Description ValueType: String }
-      EDIMLColumn ID { Attribute: ID ValueType: String }
-      EDIMLColumn ManufacturedDate { Attribute: ManufacturedDate ValueType: Date }
-      EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
-      EDIMLColumn StockingPointID { Attribute: StockingPointID ValueType: String }
-      EDIMLColumn SupplyType { Attribute: SupplyType ValueType: String }
-      EDIMLColumn UserQuantity { Attribute: UserQuantity ValueType: Real }
-    }
-  }
-  EDIODBCLink.Source MID_ExternalSupply
-  {
-    DataIntegrityStrategy: 'Disabled'
-    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
-    EDIODBCLinkTable MID_EXTERNALSUPPLY
-    {
-      OthersMayCreateTable: true
-      OthersMayDeleteRow: true
-      OthersMayDropTable: true
-      OthersMayFlushTable: true
-      OthersMayInsertRow: true
-      Parameters: '/owner="TIANMA"'
-      PrimaryKeyColumns: ID
-      RecordModificationHintStrategy: 'None'
-      EDIODBCLinkColumn DATE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: DateTime
-      }
-      EDIODBCLinkColumn DESCRIPTION
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn MANUFACTUREDDATE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: DateTime
-      }
-      EDIODBCLinkColumn PRODUCTID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn STOCKINGPOINTID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn SUPPLYTYPE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn USERQUANTITY
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-    }
-  }
-  EDITransformation.Transformation TransformationExternalSupply
-  {
-    EDITableTransformation
-    {
-      InputTable: MID_EXTERNALSUPPLY
-      OutputTable: MappingExternalSupply
-      EDIColumnMatch
-      {
-        InputColumn: DATE
-        OutputColumn: Date
-        Converter
-        {
-          XMLDefinition:
-          [*
-            <?xml version="1.0" encoding="UTF-16"?>
-            <DateTimeToDate xmlns="http://www.quintiq.com/GEB/DateTimeToDate" Key="@1">
-              <IsStandard>true</IsStandard>
-              <IsISO>false</IsISO>
-              <IsCustom>false</IsCustom>
-              <ConversionType>0</ConversionType>
-            </DateTimeToDate>
-          *]
-        }
-      }
-      EDIColumnMatch { InputColumn: DESCRIPTION OutputColumn: Description }
-      EDIColumnMatch { InputColumn: ID OutputColumn: ID }
-      EDIColumnMatch
-      {
-        InputColumn: MANUFACTUREDDATE
-        OutputColumn: ManufacturedDate
-        Converter
-        {
-          XMLDefinition:
-          [*
-            <?xml version="1.0" encoding="UTF-16"?>
-            <DateTimeToDate xmlns="http://www.quintiq.com/GEB/DateTimeToDate" Key="@1">
-              <IsStandard>true</IsStandard>
-              <IsISO>false</IsISO>
-              <IsCustom>false</IsCustom>
-              <ConversionType>0</ConversionType>
-            </DateTimeToDate>
-          *]
-        }
-      }
-      EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductID }
-      EDIColumnMatch { InputColumn: STOCKINGPOINTID OutputColumn: StockingPointID }
-      EDIColumnMatch { InputColumn: SUPPLYTYPE OutputColumn: SupplyType }
-      EDIColumnMatch
-      {
-        InputColumn: USERQUANTITY
-        OutputColumn: UserQuantity
-        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/EDI/Broker_Broker_OTD_Forecast.qbl b/_Main/BL/EDI/Broker_Broker_OTD_Forecast.qbl
deleted file mode 100644
index 6b4a67f..0000000
--- a/_Main/BL/EDI/Broker_Broker_OTD_Forecast.qbl
+++ /dev/null
@@ -1,158 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-EDIBroker Broker_OTD_Forecast
-{
-  MDSDefinition: MacroPlan
-  TimeZone: 'ACT'
-  UseOSTimeZone: false
-  EDIModelLink.Destination Des_Forecast
-  {
-    EDIMLTable MappingForecast
-    {
-      PrimaryKeyColumns: ID
-      TargetType: MappingForecast
-      TypeIndex: MappingForecastTypeIndex
-      EDIMLColumn BusinessType { Attribute: BusinessType ValueType: String }
-      EDIMLColumn CurrencyID { Attribute: CurrencyID ValueType: String }
-      EDIMLColumn EndDate { Attribute: EndDate ValueType: Date }
-      EDIMLColumn ID { Attribute: ID ValueType: String }
-      EDIMLColumn Price { Attribute: Price ValueType: Real }
-      EDIMLColumn PriorityName { Attribute: PriorityName ValueType: String }
-      EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
-      EDIMLColumn Quantity { Attribute: Quantity ValueType: Real }
-      EDIMLColumn SalesSegmentName { Attribute: SalesSegmentName ValueType: String }
-      EDIMLColumn StartDate { Attribute: StartDate ValueType: Date }
-      EDIMLColumn StockingPointID { Attribute: StockingPointID ValueType: String }
-      EDIMLColumn UnitOfMeasureName { Attribute: UnitOfMeasureName ValueType: String }
-    }
-  }
-  EDIODBCLink.Source MID_FORECAST
-  {
-    DataIntegrityStrategy: 'Disabled'
-    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
-    EDIODBCLinkTable MID_FORECAST
-    {
-      OthersMayCreateTable: true
-      OthersMayDeleteRow: true
-      OthersMayDropTable: true
-      OthersMayFlushTable: true
-      OthersMayInsertRow: true
-      Parameters: '/owner="YUXTEST"'
-      RecordModificationHintStrategy: 'None'
-      EDIODBCLinkColumn BUSINESSTYPE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn CURRENCYID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ENDDATE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: DateTime
-      }
-      EDIODBCLinkColumn ID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PRICE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: Real
-      }
-      EDIODBCLinkColumn PRIORITYNAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PRODUCTID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn QUANTITY
-      {
-        OthersMayUpdateColumn: true
-        ValueType: Real
-      }
-      EDIODBCLinkColumn SALESEGMENTNAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn STARTDATE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: DateTime
-      }
-      EDIODBCLinkColumn STOCKINGPOINTID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn UNITOFMEASURENAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-    }
-  }
-  EDITransformation.Transformation TransformationForecast
-  {
-    EDITableTransformation
-    {
-      InputTable: MID_FORECAST
-      OutputTable: MappingForecast
-      EDIColumnMatch { InputColumn: BUSINESSTYPE OutputColumn: BusinessType }
-      EDIColumnMatch { InputColumn: CURRENCYID OutputColumn: CurrencyID }
-      EDIColumnMatch
-      {
-        InputColumn: ENDDATE
-        OutputColumn: EndDate
-        Converter
-        {
-          XMLDefinition:
-          [*
-            <?xml version="1.0" encoding="UTF-16"?>
-            <DateTimeToDate xmlns="http://www.quintiq.com/GEB/DateTimeToDate" Key="@1">
-              <IsStandard>true</IsStandard>
-              <IsISO>false</IsISO>
-              <IsCustom>false</IsCustom>
-              <ConversionType>0</ConversionType>
-            </DateTimeToDate>
-          *]
-        }
-      }
-      EDIColumnMatch { InputColumn: ID OutputColumn: ID }
-      EDIColumnMatch { InputColumn: PRICE OutputColumn: Price }
-      EDIColumnMatch { InputColumn: PRIORITYNAME OutputColumn: PriorityName }
-      EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductID }
-      EDIColumnMatch { InputColumn: QUANTITY OutputColumn: Quantity }
-      EDIColumnMatch { InputColumn: SALESEGMENTNAME OutputColumn: SalesSegmentName }
-      EDIColumnMatch
-      {
-        InputColumn: STARTDATE
-        OutputColumn: StartDate
-        Converter
-        {
-          XMLDefinition:
-          [*
-            <?xml version="1.0" encoding="UTF-16"?>
-            <DateTimeToDate xmlns="http://www.quintiq.com/GEB/DateTimeToDate" Key="@1">
-              <IsStandard>true</IsStandard>
-              <IsISO>false</IsISO>
-              <IsCustom>false</IsCustom>
-              <ConversionType>0</ConversionType>
-            </DateTimeToDate>
-          *]
-        }
-      }
-      EDIColumnMatch { InputColumn: STOCKINGPOINTID OutputColumn: StockingPointID }
-      EDIColumnMatch { InputColumn: UNITOFMEASURENAME OutputColumn: UnitOfMeasureName }
-    }
-  }
-}
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_InventoryCost.qbl b/_Main/BL/EDI/Broker_Broker_OTD_InventoryCost.qbl
deleted file mode 100644
index b332e9d..0000000
--- a/_Main/BL/EDI/Broker_Broker_OTD_InventoryCost.qbl
+++ /dev/null
@@ -1,106 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-EDIBroker Broker_OTD_InventoryCost
-{
-  MDSDefinition: MacroPlan
-  TimeZone: 'ACT'
-  UseOSTimeZone: false
-  EDIModelLink.Destination Des_InventoryCost
-  {
-    EDIMLTable MappingInventoryValueAndCost
-    {
-      PrimaryKeyColumns: ID
-      TargetType: MappingInventoryValueAndCost
-      TypeIndex: MappingInventoryCostTypeIndex
-      EDIMLColumn AccountName { Attribute: AccountName ValueType: String }
-      EDIMLColumn Cost { Attribute: Cost ValueType: Real }
-      EDIMLColumn CostDriver { Attribute: CostDriver ValueType: String }
-      EDIMLColumn ID { Attribute: ID ValueType: String }
-      EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
-      EDIMLColumn Start { Attribute: Start ValueType: Date }
-      EDIMLColumn StockingPointID { Attribute: StockingPointID ValueType: String }
-    }
-  }
-  EDIODBCLink.Source MID_INVENTORYCOST
-  {
-    DataIntegrityStrategy: 'Disabled'
-    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
-    EDIODBCLinkTable MID_INVENTORYCOST
-    {
-      OthersMayCreateTable: true
-      OthersMayDeleteRow: true
-      OthersMayDropTable: true
-      OthersMayFlushTable: true
-      OthersMayInsertRow: true
-      Parameters: '/owner="YUXTEST"'
-      RecordModificationHintStrategy: 'None'
-      EDIODBCLinkColumn ACCOUNTNAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn COST
-      {
-        OthersMayUpdateColumn: true
-        ValueType: Real
-      }
-      EDIODBCLinkColumn COSTDRIVER
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PRODUCTID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn START
-      {
-        OthersMayUpdateColumn: true
-        ValueType: DateTime
-      }
-      EDIODBCLinkColumn STOCKINGPOINTID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-    }
-  }
-  EDITransformation.Transformation TransformationInventoryCost
-  {
-    EDITableTransformation
-    {
-      InputTable: MID_INVENTORYCOST
-      OutputTable: MappingInventoryValueAndCost
-      EDIColumnMatch { InputColumn: ACCOUNTNAME OutputColumn: AccountName }
-      EDIColumnMatch { InputColumn: COST OutputColumn: Cost }
-      EDIColumnMatch { InputColumn: COSTDRIVER OutputColumn: CostDriver }
-      EDIColumnMatch { InputColumn: ID OutputColumn: ID }
-      EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductID }
-      EDIColumnMatch
-      {
-        InputColumn: START
-        OutputColumn: Start
-        Converter
-        {
-          XMLDefinition:
-          [*
-            <?xml version="1.0" encoding="UTF-16"?>
-            <DateTimeToDate xmlns="http://www.quintiq.com/GEB/DateTimeToDate" Key="@1">
-              <IsStandard>true</IsStandard>
-              <IsISO>false</IsISO>
-              <IsCustom>false</IsCustom>
-              <ConversionType>0</ConversionType>
-            </DateTimeToDate>
-          *]
-        }
-      }
-      EDIColumnMatch { InputColumn: STOCKINGPOINTID OutputColumn: StockingPointID }
-    }
-  }
-}
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_Operation.qbl b/_Main/BL/EDI/Broker_Broker_OTD_Operation.qbl
deleted file mode 100644
index e269f2f..0000000
--- a/_Main/BL/EDI/Broker_Broker_OTD_Operation.qbl
+++ /dev/null
@@ -1,200 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-EDIBroker Broker_OTD_Operation
-{
-  MDSDefinition: MacroPlan
-  TimeZone: 'ACT'
-  UseOSTimeZone: false
-  EDIModelLink.Destination Des_Operation
-  {
-    EDIMLTable MappingOperation
-    {
-      PrimaryKeyColumns: BusinessType
-      PrimaryKeyColumns: Line
-      PrimaryKeyColumns: OrganCode
-      PrimaryKeyColumns: PlantName
-      PrimaryKeyColumns: ProcessSection
-      PrimaryKeyColumns: ProductID
-      PrimaryKeyColumns: SequenceNumber
-      TargetType: MappingOperation
-      TypeIndex: MappingOperationTypeIndex
-      EDIMLColumn ActualCapacity { Attribute: ActualCapacity ValueType: Real }
-      EDIMLColumn BusinessType { Attribute: BusinessType 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 OrganName { Attribute: OrganName ValueType: String }
-      EDIMLColumn PlantName { Attribute: PlantName ValueType: String }
-      EDIMLColumn ProcessSection { Attribute: ProcessSection ValueType: String }
-      EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
-      EDIMLColumn SequenceNumber { Attribute: SequenceNumber ValueType: Number }
-      EDIMLColumn UnitOfMeasureName { Attribute: UnitOfMeasureName ValueType: String }
-      EDIMLColumn UserLeadTime { Attribute: UserLeadTime ValueType: Real }
-    }
-  }
-  EDIODBCLink.Source MID_OPERATION
-  {
-    DataIntegrityStrategy: 'Disabled'
-    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
-    EDIODBCLinkTable MID_OPERATION
-    {
-      OthersMayCreateTable: true
-      OthersMayDeleteRow: true
-      OthersMayDropTable: true
-      OthersMayFlushTable: true
-      OthersMayInsertRow: true
-      Parameters: '/owner="TIANMA"'
-      RecordModificationHintStrategy: 'None'
-      EDIODBCLinkColumn ACTUALCAPACITY
-      {
-        OthersMayUpdateColumn: true
-        ValueType: Real
-      }
-      EDIODBCLinkColumn BUSINESSTYPE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn LINE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn MAXIMUMQUANTITY
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn MINIMUMQUANTITY
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ORGANCODE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ORGANNAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PLANTNAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PROCESSSECTION
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PRODUCTID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn SEQUENCENUMBER
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn UNITOFMEASURENAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn USERLEADTIME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: Real
-      }
-    }
-  }
-  EDITransformation.Transformation TransformationOperation
-  {
-    EDITableTransformation
-    {
-      InputTable: MID_OPERATION
-      OutputTable: MappingOperation
-      EDIColumnMatch { InputColumn: ACTUALCAPACITY OutputColumn: ActualCapacity }
-      EDIColumnMatch { InputColumn: BUSINESSTYPE OutputColumn: BusinessType }
-      EDIColumnMatch { InputColumn: LINE OutputColumn: Line }
-      EDIColumnMatch
-      {
-        InputColumn: MAXIMUMQUANTITY
-        OutputColumn: MaximumQuantity
-        Converter
-        {
-          XMLDefinition:
-          [*
-            <?xml version="1.0" encoding="UTF-16"?>
-            <StringToNumber xmlns="http://www.quintiq.com/GEB/StringToNumber" 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>
-            </StringToNumber>
-          *]
-        }
-      }
-      EDIColumnMatch
-      {
-        InputColumn: MINIMUMQUANTITY
-        OutputColumn: MinimumQuantity
-        Converter
-        {
-          XMLDefinition:
-          [*
-            <?xml version="1.0" encoding="UTF-16"?>
-            <StringToNumber xmlns="http://www.quintiq.com/GEB/StringToNumber" 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>
-            </StringToNumber>
-          *]
-        }
-      }
-      EDIColumnMatch { InputColumn: ORGANCODE OutputColumn: OrganCode }
-      EDIColumnMatch { InputColumn: ORGANNAME OutputColumn: OrganName }
-      EDIColumnMatch { InputColumn: PLANTNAME OutputColumn: PlantName }
-      EDIColumnMatch { InputColumn: PROCESSSECTION OutputColumn: ProcessSection }
-      EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductID }
-      EDIColumnMatch
-      {
-        InputColumn: SEQUENCENUMBER
-        OutputColumn: SequenceNumber
-        Converter
-        {
-          XMLDefinition:
-          [*
-            <?xml version="1.0" encoding="UTF-16"?>
-            <StringToNumber xmlns="http://www.quintiq.com/GEB/StringToNumber" 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>
-            </StringToNumber>
-          *]
-        }
-      }
-      EDIColumnMatch { InputColumn: UNITOFMEASURENAME OutputColumn: UnitOfMeasureName }
-      EDIColumnMatch { InputColumn: USERLEADTIME OutputColumn: UserLeadTime }
-    }
-  }
-}
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_OperationCost.qbl b/_Main/BL/EDI/Broker_Broker_OTD_OperationCost.qbl
deleted file mode 100644
index e60201f..0000000
--- a/_Main/BL/EDI/Broker_Broker_OTD_OperationCost.qbl
+++ /dev/null
@@ -1,141 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-EDIBroker Broker_OTD_OperationCost
-{
-  MDSDefinition: MacroPlan
-  TimeZone: 'ACT'
-  UseOSTimeZone: false
-  EDIModelLink.Destination Des_MappingOperationCost
-  {
-    EDIMLTable MappingOperationCost
-    {
-      PrimaryKeyColumns: ID
-      TargetType: MappingOperationCost
-      TypeIndex: MappingOperationCostTypeIndex
-      EDIMLColumn AccountName { Attribute: AccountName ValueType: String }
-      EDIMLColumn Cost { Attribute: Cost ValueType: Real }
-      EDIMLColumn CostDriver { Attribute: CostDriver ValueType: String }
-      EDIMLColumn ID { Attribute: ID ValueType: String }
-      EDIMLColumn LengthOfTime { Attribute: LengthOfTime ValueType: Number }
-      EDIMLColumn OrgCode { Attribute: OrgCode ValueType: String }
-      EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
-      EDIMLColumn Start { Attribute: Start ValueType: Date }
-      EDIMLColumn TimeUnit { Attribute: TimeUnit ValueType: String }
-    }
-  }
-  EDIODBCLink.Source MID_OPERATIONCOST
-  {
-    DataIntegrityStrategy: 'Disabled'
-    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
-    EDIODBCLinkTable MID_OPERATIONCOST
-    {
-      OthersMayCreateTable: true
-      OthersMayDeleteRow: true
-      OthersMayDropTable: true
-      OthersMayFlushTable: true
-      OthersMayInsertRow: true
-      Parameters: '/owner="TIANMA"'
-      RecordModificationHintStrategy: 'None'
-      EDIODBCLinkColumn ACCOUNTNAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn COST
-      {
-        OthersMayUpdateColumn: true
-        ValueType: Real
-      }
-      EDIODBCLinkColumn COSTDRIVER
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn LENGTHOFTIME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ORGCODE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PRODUCTID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn START
-      {
-        OthersMayUpdateColumn: true
-        ValueType: DateTime
-      }
-      EDIODBCLinkColumn TIMEUNIT
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-    }
-  }
-  EDITransformation.Transformation TransformationOperationCost
-  {
-    EDITableTransformation
-    {
-      InputTable: MID_OPERATIONCOST
-      OutputTable: MappingOperationCost
-      EDIColumnMatch { InputColumn: ACCOUNTNAME OutputColumn: AccountName }
-      EDIColumnMatch { InputColumn: COST OutputColumn: Cost }
-      EDIColumnMatch { InputColumn: COSTDRIVER OutputColumn: CostDriver }
-      EDIColumnMatch { InputColumn: ID OutputColumn: ID }
-      EDIColumnMatch
-      {
-        InputColumn: LENGTHOFTIME
-        OutputColumn: LengthOfTime
-        Converter
-        {
-          XMLDefinition:
-          [*
-            <?xml version="1.0" encoding="UTF-16"?>
-            <StringToNumber xmlns="http://www.quintiq.com/GEB/StringToNumber" 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>
-            </StringToNumber>
-          *]
-        }
-      }
-      EDIColumnMatch { InputColumn: ORGCODE OutputColumn: OrgCode }
-      EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductID }
-      EDIColumnMatch
-      {
-        InputColumn: START
-        OutputColumn: Start
-        Converter
-        {
-          XMLDefinition:
-          [*
-            <?xml version="1.0" encoding="UTF-16"?>
-            <DateTimeToDate xmlns="http://www.quintiq.com/GEB/DateTimeToDate" Key="@1">
-              <IsStandard>true</IsStandard>
-              <IsISO>false</IsISO>
-              <IsCustom>false</IsCustom>
-              <ConversionType>0</ConversionType>
-            </DateTimeToDate>
-          *]
-        }
-      }
-      EDIColumnMatch { InputColumn: TIMEUNIT OutputColumn: TimeUnit }
-    }
-  }
-}
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_Product.qbl b/_Main/BL/EDI/Broker_Broker_OTD_Product.qbl
deleted file mode 100644
index 7bcabef..0000000
--- a/_Main/BL/EDI/Broker_Broker_OTD_Product.qbl
+++ /dev/null
@@ -1,144 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-EDIBroker Broker_OTD_Product
-{
-  MDSDefinition: MacroPlan
-  TimeZone: 'ACT'
-  UseOSTimeZone: false
-  EDIModelLink.Destination Des_MappingProduct
-  {
-    EDIMLTable MappingProduct
-    {
-      PrimaryKeyColumns: BusinessType
-      PrimaryKeyColumns: ID
-      TargetType: MappingProduct
-      TypeIndex: MappingProductTypeIndex
-      EDIMLColumn BusinessType { Attribute: BusinessType ValueType: String }
-      EDIMLColumn CommonBusiness { Attribute: CommonBusiness ValueType: String }
-      EDIMLColumn EndDate { Attribute: EndDate ValueType: Date }
-      EDIMLColumn ID { Attribute: ID ValueType: String }
-      EDIMLColumn IsCommon { Attribute: IsCommon ValueType: Boolean }
-      EDIMLColumn KeyProduct { Attribute: KeyProduct ValueType: Boolean }
-      EDIMLColumn Name { Attribute: Name ValueType: String }
-      EDIMLColumn Notes { Attribute: Notes ValueType: String }
-      EDIMLColumn ProductMajorType { Attribute: ProductMajorType ValueType: String }
-      EDIMLColumn ProductSubclassType { Attribute: ProductSubclassType ValueType: String }
-      EDIMLColumn ShelfLife { Attribute: ShelfLife ValueType: Real }
-      EDIMLColumn UnitOfMeasureName { Attribute: UnitOfMeasureName ValueType: String }
-    }
-  }
-  EDIODBCLink.Source MID_PRODUCT
-  {
-    DataIntegrityStrategy: 'Disabled'
-    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
-    EDIODBCLinkTable MID_PRODUCT
-    {
-      OthersMayCreateTable: true
-      OthersMayDeleteRow: true
-      OthersMayDropTable: true
-      OthersMayFlushTable: true
-      OthersMayInsertRow: true
-      Parameters: '/owner="TIANMA"'
-      PrimaryKeyColumns: BUSINESSTYPE
-      PrimaryKeyColumns: ID
-      RecordModificationHintStrategy: 'None'
-      EDIODBCLinkColumn BUSINESSTYPE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn COMMONBUSINESS
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ENDDATE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: DateTime
-      }
-      EDIODBCLinkColumn ID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ISCOMMON
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn KEYPRODUCT
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn NAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn NOTE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PRODUCTMAJORTYPE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PRODUCTSUBCLASSTYPE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn SHELFLIFE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: Real
-      }
-      EDIODBCLinkColumn UNITOFMEAURENAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-    }
-  }
-  EDITransformation.Transformation TransformationProduct
-  {
-    EDITableTransformation
-    {
-      InputTable: MID_PRODUCT
-      OutputTable: MappingProduct
-      EDIColumnMatch { InputColumn: BUSINESSTYPE OutputColumn: BusinessType }
-      EDIColumnMatch { InputColumn: COMMONBUSINESS OutputColumn: CommonBusiness }
-      EDIColumnMatch
-      {
-        InputColumn: ENDDATE
-        OutputColumn: EndDate
-        Converter
-        {
-          XMLDefinition:
-          [*
-            <?xml version="1.0" encoding="UTF-16"?>
-            <DateTimeToDate xmlns="http://www.quintiq.com/GEB/DateTimeToDate" Key="@1">
-              <IsStandard>true</IsStandard>
-              <IsISO>false</IsISO>
-              <IsCustom>false</IsCustom>
-              <ConversionType>0</ConversionType>
-            </DateTimeToDate>
-          *]
-        }
-      }
-      EDIColumnMatch { InputColumn: ID OutputColumn: ID }
-      EDIColumnMatch { InputColumn: ISCOMMON OutputColumn: IsCommon }
-      EDIColumnMatch { InputColumn: KEYPRODUCT OutputColumn: KeyProduct }
-      EDIColumnMatch { InputColumn: NAME OutputColumn: Name }
-      EDIColumnMatch { InputColumn: NOTE OutputColumn: Notes }
-      EDIColumnMatch { InputColumn: PRODUCTMAJORTYPE OutputColumn: ProductMajorType }
-      EDIColumnMatch { InputColumn: PRODUCTSUBCLASSTYPE OutputColumn: ProductSubclassType }
-      EDIColumnMatch { InputColumn: SHELFLIFE OutputColumn: ShelfLife }
-      EDIColumnMatch { InputColumn: UNITOFMEAURENAME OutputColumn: UnitOfMeasureName }
-    }
-  }
-}
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_ProductInLane.qbl b/_Main/BL/EDI/Broker_Broker_OTD_ProductInLane.qbl
deleted file mode 100644
index b523027..0000000
--- a/_Main/BL/EDI/Broker_Broker_OTD_ProductInLane.qbl
+++ /dev/null
@@ -1,57 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-EDIBroker Broker_OTD_ProductInLane
-{
-  MDSDefinition: MacroPlan
-  TimeZone: 'ACT'
-  UseOSTimeZone: false
-  EDIModelLink.Destination Des_MappingProductInLane
-  {
-    EDIMLTable MappingProductInLane
-    {
-      PrimaryKeyColumns: LineID
-      PrimaryKeyColumns: ProductID
-      TargetType: MappingProductInLane
-      TypeIndex: MappingProductInLineTypeIndex
-      EDIMLColumn LineID { Attribute: LineID ValueType: String }
-      EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
-    }
-  }
-  EDIODBCLink.Source MID_PRODUCTINLINES
-  {
-    DataIntegrityStrategy: 'Disabled'
-    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
-    EDIODBCLinkTable MID_PRODUCTINLINES
-    {
-      OthersMayCreateTable: true
-      OthersMayDeleteRow: true
-      OthersMayDropTable: true
-      OthersMayFlushTable: true
-      OthersMayInsertRow: true
-      Parameters: '/owner="OTD"'
-      PrimaryKeyColumns: LINEID
-      PrimaryKeyColumns: PRODUCTID
-      RecordModificationHintStrategy: 'None'
-      EDIODBCLinkColumn LINEID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PRODUCTID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-    }
-  }
-  EDITransformation.Transformation TransformationProductInLane
-  {
-    EDITableTransformation
-    {
-      InputTable: MID_PRODUCTINLINES
-      OutputTable: MappingProductInLane
-      EDIColumnMatch { InputColumn: LINEID OutputColumn: LineID }
-      EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductID }
-    }
-  }
-}
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_SalesSegment.qbl b/_Main/BL/EDI/Broker_Broker_OTD_SalesSegment.qbl
deleted file mode 100644
index 6176047..0000000
--- a/_Main/BL/EDI/Broker_Broker_OTD_SalesSegment.qbl
+++ /dev/null
@@ -1,92 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-EDIBroker Broker_OTD_SalesSegment
-{
-  MDSDefinition: MacroPlan
-  TimeZone: 'ACT'
-  UseOSTimeZone: false
-  EDIModelLink.Destination Des_SalesSegment
-  {
-    EDIMLTable MappingSalesSegment
-    {
-      PrimaryKeyColumns: BusinessType
-      PrimaryKeyColumns: Name
-      TargetType: MappingSalesSegment
-      TypeIndex: MappingSalesSegmentTypeIndex
-      EDIMLColumn BusinessType { Attribute: BusinessType ValueType: String }
-      EDIMLColumn DisplayIndex { Attribute: DisplayIndex ValueType: Number }
-      EDIMLColumn Name { Attribute: Name ValueType: String }
-      EDIMLColumn ParentName { Attribute: ParentName ValueType: String }
-    }
-  }
-  EDIODBCLink.Source MID_SALESSEGMENT
-  {
-    DataIntegrityStrategy: 'Disabled'
-    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
-    EDIODBCLinkTable MID_SALESSEGMENT
-    {
-      OthersMayCreateTable: true
-      OthersMayDeleteRow: true
-      OthersMayDropTable: true
-      OthersMayFlushTable: true
-      OthersMayInsertRow: true
-      Parameters: '/owner="YUXTEST"'
-      PrimaryKeyColumns: BUSINESSTYPE
-      PrimaryKeyColumns: NAME
-      RecordModificationHintStrategy: 'None'
-      EDIODBCLinkColumn BUSINESSTYPE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn DISPLAYINDEX
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn NAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PARENTNAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-    }
-  }
-  EDITransformation.Transformation TransformationSalesSegment
-  {
-    EDITableTransformation
-    {
-      InputTable: MID_SALESSEGMENT
-      OutputTable: MappingSalesSegment
-      EDIColumnMatch { InputColumn: BUSINESSTYPE OutputColumn: BusinessType }
-      EDIColumnMatch
-      {
-        InputColumn: DISPLAYINDEX
-        OutputColumn: DisplayIndex
-        Converter
-        {
-          XMLDefinition:
-          [*
-            <?xml version="1.0" encoding="UTF-16"?>
-            <StringToNumber xmlns="http://www.quintiq.com/GEB/StringToNumber" 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>
-            </StringToNumber>
-          *]
-        }
-      }
-      EDIColumnMatch { InputColumn: NAME OutputColumn: Name }
-      EDIColumnMatch { InputColumn: PARENTNAME OutputColumn: ParentName }
-    }
-  }
-}
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_Unit.qbl b/_Main/BL/EDI/Broker_Broker_OTD_Unit.qbl
deleted file mode 100644
index 80cde4f..0000000
--- a/_Main/BL/EDI/Broker_Broker_OTD_Unit.qbl
+++ /dev/null
@@ -1,85 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-EDIBroker Broker_OTD_Unit
-{
-  MDSDefinition: MacroPlan
-  TimeZone: 'ACT'
-  UseOSTimeZone: false
-  EDIModelLink.Destination Des_Unit
-  {
-    EDIMLTable MappingUnit
-    {
-      PrimaryKeyColumns: EquipmentID
-      PrimaryKeyColumns: OperationType
-      PrimaryKeyColumns: OrganCode
-      PrimaryKeyColumns: PlantName
-      TargetType: MappingUnit
-      TypeIndex: MappingUnitTypeIndex
-      EDIMLColumn Equipment { Attribute: Equipment ValueType: String }
-      EDIMLColumn EquipmentID { Attribute: EquipmentID ValueType: String }
-      EDIMLColumn OperationType { Attribute: OperationType ValueType: String }
-      EDIMLColumn OrganCode { Attribute: OrganCode ValueType: String }
-      EDIMLColumn OrganName { Attribute: OrganName ValueType: String }
-      EDIMLColumn PlantName { Attribute: PlantName ValueType: String }
-    }
-  }
-  EDIODBCLink.Source MID_UNIT
-  {
-    DataIntegrityStrategy: 'Disabled'
-    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
-    EDIODBCLinkTable MID_UNIT
-    {
-      OthersMayCreateTable: true
-      OthersMayDeleteRow: true
-      OthersMayDropTable: true
-      OthersMayFlushTable: true
-      OthersMayInsertRow: true
-      Parameters: '/owner="OTD"'
-      RecordModificationHintStrategy: 'None'
-      EDIODBCLinkColumn EQUIPMENT
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn EQUIPMENTID
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn OPERATIONTYPE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ORGANCODE
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn ORGANNAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn PLANTNAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-    }
-  }
-  EDITransformation.Transformation TransformationUnit
-  {
-    EDITableTransformation
-    {
-      InputTable: MID_UNIT
-      OutputTable: MappingUnit
-      EDIColumnMatch { InputColumn: EQUIPMENT OutputColumn: Equipment }
-      EDIColumnMatch { InputColumn: EQUIPMENTID OutputColumn: EquipmentID }
-      EDIColumnMatch { InputColumn: OPERATIONTYPE OutputColumn: OperationType }
-      EDIColumnMatch { InputColumn: ORGANCODE OutputColumn: OrganCode }
-      EDIColumnMatch { InputColumn: ORGANNAME OutputColumn: OrganName }
-      EDIColumnMatch { InputColumn: PLANTNAME OutputColumn: PlantName }
-    }
-  }
-}
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_UnitOfMeasure.qbl b/_Main/BL/EDI/Broker_Broker_OTD_UnitOfMeasure.qbl
deleted file mode 100644
index 0ece78e..0000000
--- a/_Main/BL/EDI/Broker_Broker_OTD_UnitOfMeasure.qbl
+++ /dev/null
@@ -1,55 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-EDIBroker Broker_OTD_UnitOfMeasure
-{
-  MDSDefinition: MacroPlan
-  TimeZone: 'ACT'
-  UseOSTimeZone: false
-  EDIModelLink.Destination Des_UnitOfMeasure
-  {
-    EDIMLTable MappingUnitOfMeasure
-    {
-      PrimaryKeyColumns: Name
-      TargetType: MappingUnitOfMeasure
-      TypeIndex: MappingUnitOfMeasureTypeIndex
-      EDIMLColumn IsDefault { Attribute: IsDefault ValueType: Boolean }
-      EDIMLColumn Name { Attribute: Name ValueType: String }
-    }
-  }
-  EDIODBCLink.Source MID_UnitOfMeasure
-  {
-    DataIntegrityStrategy: 'Disabled'
-    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
-    EDIODBCLinkTable MID_UNITOFMEASURES
-    {
-      OthersMayCreateTable: true
-      OthersMayDeleteRow: true
-      OthersMayDropTable: true
-      OthersMayFlushTable: true
-      OthersMayInsertRow: true
-      Parameters: '/owner="YUXTEST"'
-      PrimaryKeyColumns: NAME
-      RecordModificationHintStrategy: 'None'
-      EDIODBCLinkColumn ISDEFAULT
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn NAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-    }
-  }
-  EDITransformation.Transformation TransformationUnitOfMeasure
-  {
-    EDITableTransformation
-    {
-      InputTable: MID_UNITOFMEASURES
-      OutputTable: MappingUnitOfMeasure
-      EDIColumnMatch { InputColumn: ISDEFAULT OutputColumn: IsDefault }
-      EDIColumnMatch { InputColumn: NAME OutputColumn: Name }
-    }
-  }
-}
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_CAR_Export.qbl b/_Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl
index 571fce9..f201682 100644
--- a/_Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl
+++ b/_Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 EDIBroker GlobalOTDTable_CAR_Export
 {
-  MDSDefinition: GlobalOTDTable
+  MDSDefinition: GlobalOTDSOP
   TimeZone: 'ACT'
   UseOSTimeZone: false
   EDIModelLink.Source Source13
diff --git a/_Main/BL/EDI/Broker_GlobalOTDTable_CustomOrder.qbl b/_Main/BL/EDI/Broker_GlobalOTDTable_CustomOrder.qbl
index c405497..c0a1573 100644
--- a/_Main/BL/EDI/Broker_GlobalOTDTable_CustomOrder.qbl
+++ b/_Main/BL/EDI/Broker_GlobalOTDTable_CustomOrder.qbl
@@ -54,6 +54,10 @@
         OthersMayUpdateColumn: true
         ValueType: String
       }
+      EDIODBCLinkColumn CHECKMSG
+      {
+        ValueType: String
+      }
       EDIODBCLinkColumn CURRENCYID
       {
         OthersMayUpdateColumn: true
@@ -79,6 +83,14 @@
         OthersMayUpdateColumn: true
         ValueType: String
       }
+      EDIODBCLinkColumn ISCHECKED
+      {
+        ValueType: Number
+      }
+      EDIODBCLinkColumn ISPASS
+      {
+        ValueType: Number
+      }
       EDIODBCLinkColumn ORDERDATE
       {
         OthersMayUpdateColumn: true
diff --git a/_Main/BL/EDI/Broker_GlobalOTDTable_Forecast.qbl b/_Main/BL/EDI/Broker_GlobalOTDTable_Forecast.qbl
index 5d2e4f1..785463b 100644
--- a/_Main/BL/EDI/Broker_GlobalOTDTable_Forecast.qbl
+++ b/_Main/BL/EDI/Broker_GlobalOTDTable_Forecast.qbl
@@ -18,9 +18,12 @@
       EDIMLColumn ID { Attribute: ID ValueType: String }
       EDIMLColumn Price { Attribute: Price ValueType: Real }
       EDIMLColumn PriorityName { Attribute: PriorityName ValueType: String }
+      EDIMLColumn ProductGrade { Attribute: ProductGrade ValueType: String }
       EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
       EDIMLColumn Quantity { Attribute: Quantity ValueType: Real }
       EDIMLColumn SalesSegmentName { Attribute: SalesSegmentName ValueType: String }
+      EDIMLColumn SegmentPriority { Attribute: SegmentPriority ValueType: String }
+      EDIMLColumn SheetProfitability { Attribute: SheetProfitability ValueType: String }
       EDIMLColumn StartDate { Attribute: StartDate ValueType: Date }
       EDIMLColumn StockingPointID { Attribute: StockingPointID ValueType: String }
       EDIMLColumn UnitOfMeasureName { Attribute: UnitOfMeasureName ValueType: String }
@@ -45,6 +48,10 @@
         OthersMayUpdateColumn: true
         ValueType: String
       }
+      EDIODBCLinkColumn CHECKMSG
+      {
+        ValueType: String
+      }
       EDIODBCLinkColumn CURRENCYID
       {
         OthersMayUpdateColumn: true
@@ -59,6 +66,14 @@
       {
         OthersMayUpdateColumn: true
         ValueType: String
+      }
+      EDIODBCLinkColumn ISCHECKED
+      {
+        ValueType: Number
+      }
+      EDIODBCLinkColumn ISPASS
+      {
+        ValueType: Number
       }
       EDIODBCLinkColumn PRICE
       {
@@ -146,9 +161,12 @@
       EDIColumnMatch { InputColumn: ID OutputColumn: ID }
       EDIColumnMatch { InputColumn: PRICE OutputColumn: Price }
       EDIColumnMatch { InputColumn: PRIORITYNAME OutputColumn: PriorityName }
+      EDIColumnMatch { InputColumn: PRODUCTGRADE OutputColumn: ProductGrade }
       EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductID }
       EDIColumnMatch { InputColumn: QUANTITY OutputColumn: Quantity }
       EDIColumnMatch { InputColumn: SALESEGMENTNAME OutputColumn: SalesSegmentName }
+      EDIColumnMatch { InputColumn: SEGMENTPRIORITY OutputColumn: SegmentPriority }
+      EDIColumnMatch { InputColumn: SHEETPROFITABILITY OutputColumn: SheetProfitability }
       EDIColumnMatch
       {
         InputColumn: STARTDATE
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_DataInterfaceLog_GlobalOTDLog_GlobalOTDLog_DataInterfaceLog.qbl b/_Main/BL/Relations/Relation_DataInterfaceLog_GlobalOTDLog_GlobalOTDLog_DataInterfaceLog.qbl
new file mode 100644
index 0000000..04035ff
--- /dev/null
+++ b/_Main/BL/Relations/Relation_DataInterfaceLog_GlobalOTDLog_GlobalOTDLog_DataInterfaceLog.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation DataInterfaceLog_GlobalOTDLog_GlobalOTDLog_DataInterfaceLog
+{
+  #keys: '1[414702.1.240820064]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDLog
+  {
+    #keys: '3[414702.1.240820066][414702.1.240820065][414702.1.240820067]'
+    Cardinality: '0to1'
+    ObjectDefinition: DataInterfaceLog
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide DataInterfaceLog
+  {
+    #keys: '3[414702.1.240820069][414702.1.240820068][414702.1.240820070]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDLog
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_GlobalParameters_GlobalOTDTable_GlobalOTDTable_GlobalParameters.qbl b/_Main/BL/Relations/Relation_GlobalParameters_GlobalOTDTable_GlobalOTDTable_GlobalParameters.qbl
new file mode 100644
index 0000000..05afed6
--- /dev/null
+++ b/_Main/BL/Relations/Relation_GlobalParameters_GlobalOTDTable_GlobalOTDTable_GlobalParameters.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation GlobalParameters_GlobalOTDTable_GlobalOTDTable_GlobalParameters
+{
+  #keys: '1[412960.0.369930029]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[412960.0.369930031][412960.0.369930030][412960.0.369930032]'
+    Cardinality: '0to1'
+    ObjectDefinition: GlobalParameters
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide GlobalParameters
+  {
+    #keys: '3[412960.0.369930034][412960.0.369930033][412960.0.369930035]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_Global_InventorySupplyCategory_GlobalOTDTable_GlobalOTDTable_Global.qbl b/_Main/BL/Relations/Relation_Global_InventorySupplyCategory_GlobalOTDTable_GlobalOTDTable_Global.qbl
new file mode 100644
index 0000000..6828008
--- /dev/null
+++ b/_Main/BL/Relations/Relation_Global_InventorySupplyCategory_GlobalOTDTable_GlobalOTDTable_Global.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation Global_InventorySupplyCategory_GlobalOTDTable_GlobalOTDTable_Global_InventorySupplyCategory
+{
+  #keys: '1[414702.1.220612437]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[414702.1.220612439][414702.1.220612438][414702.1.220612440]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_InventorySupplyCategory
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Global_InventorySupplyCategory
+  {
+    #keys: '3[414702.1.220612442][414702.1.220612441][414702.1.220612443]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_Global_InventorySupplyCategory_Global_MappingInventorySupply_Global.qbl b/_Main/BL/Relations/Relation_Global_InventorySupplyCategory_Global_MappingInventorySupply_Global.qbl
new file mode 100644
index 0000000..d5b1a83
--- /dev/null
+++ b/_Main/BL/Relations/Relation_Global_InventorySupplyCategory_Global_MappingInventorySupply_Global.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation Global_InventorySupplyCategory_Global_MappingInventorySupply_Global_MappingInventorySupply_Global_InventorySupplyCategory
+{
+  #keys: '1[414702.1.220612411]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Global_MappingInventorySupply
+  {
+    #keys: '3[414702.1.220612413][414702.1.220612412][414702.1.220612414]'
+    Cardinality: '1toN'
+    ObjectDefinition: Global_InventorySupplyCategory
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Global_InventorySupplyCategory
+  {
+    #keys: '3[414702.1.220612416][414702.1.220612415][414702.1.220612417]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingInventorySupply
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_Global_InventorySupplyCategory_Global_MappingProduct_MP_Global_Mapp.qbl b/_Main/BL/Relations/Relation_Global_InventorySupplyCategory_Global_MappingProduct_MP_Global_Mapp.qbl
new file mode 100644
index 0000000..76a7147
--- /dev/null
+++ b/_Main/BL/Relations/Relation_Global_InventorySupplyCategory_Global_MappingProduct_MP_Global_Mapp.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation Global_InventorySupplyCategory_Global_MappingProduct_MP_Global_MappingProduct_MP_Global_InventorySupplyCategory
+{
+  #keys: '1[414702.1.220612424]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Global_MappingProduct_MP
+  {
+    #keys: '3[414702.1.220612426][414702.1.220612425][414702.1.220612427]'
+    Cardinality: '1toN'
+    ObjectDefinition: Global_InventorySupplyCategory
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Global_InventorySupplyCategory
+  {
+    #keys: '3[414702.1.220612429][414702.1.220612428][414702.1.220612430]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingProduct_MP
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_Global_MAPISPIPCategory_GlobalOTDTable_GlobalOTDTable_Global_MAPISP.qbl b/_Main/BL/Relations/Relation_Global_MAPISPIPCategory_GlobalOTDTable_GlobalOTDTable_Global_MAPISP.qbl
new file mode 100644
index 0000000..783e09e
--- /dev/null
+++ b/_Main/BL/Relations/Relation_Global_MAPISPIPCategory_GlobalOTDTable_GlobalOTDTable_Global_MAPISP.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation Global_MAPISPIPCategory_GlobalOTDTable_GlobalOTDTable_Global_MAPISPIPCategory
+{
+  #keys: '1[414702.1.226768030]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[414702.1.226768032][414702.1.226768031][414702.1.226768033]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MAPISPIPCategory
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Global_MAPISPIPCategory
+  {
+    #keys: '3[414702.1.226768035][414702.1.226768034][414702.1.226768036]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_Global_MAPISPIPCategory_Global_MappingActualProductInStockingPointI.qbl b/_Main/BL/Relations/Relation_Global_MAPISPIPCategory_Global_MappingActualProductInStockingPointI.qbl
new file mode 100644
index 0000000..3952c31
--- /dev/null
+++ b/_Main/BL/Relations/Relation_Global_MAPISPIPCategory_Global_MappingActualProductInStockingPointI.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation Global_MAPISPIPCategory_Global_MappingActualProductInStockingPointInPeriod_Global_MappingActualProductInStockingPointInPeriod_Global_MAPISPIPCategory
+{
+  #keys: '1[414702.1.226768004]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Global_MappingActualProductInStockingPointInPeriod
+  {
+    #keys: '3[414702.1.226768006][414702.1.226768005][414702.1.226768007]'
+    Cardinality: '1toN'
+    ObjectDefinition: Global_MAPISPIPCategory
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Global_MAPISPIPCategory
+  {
+    #keys: '3[414702.1.226768009][414702.1.226768008][414702.1.226768010]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingActualProductInStockingPointInPeriod
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_Global_MAPISPIPCategory_Global_MappingProduct_MP_Global_MappingProd.qbl b/_Main/BL/Relations/Relation_Global_MAPISPIPCategory_Global_MappingProduct_MP_Global_MappingProd.qbl
new file mode 100644
index 0000000..408356c
--- /dev/null
+++ b/_Main/BL/Relations/Relation_Global_MAPISPIPCategory_Global_MappingProduct_MP_Global_MappingProd.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation Global_MAPISPIPCategory_Global_MappingProduct_MP_Global_MappingProduct_MP_Global_MAPISPIPCategory
+{
+  #keys: '1[414702.1.226768017]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Global_MappingProduct_MP
+  {
+    #keys: '3[414702.1.226768019][414702.1.226768018][414702.1.226768020]'
+    Cardinality: '1toN'
+    ObjectDefinition: Global_MAPISPIPCategory
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Global_MAPISPIPCategory
+  {
+    #keys: '3[414702.1.226768022][414702.1.226768021][414702.1.226768023]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingProduct_MP
+    OwningSide: 'Reference'
+  }
+}
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_Global_ProductCategory_GlobalOTDTable_GlobalOTDTable_Global_Product.qbl b/_Main/BL/Relations/Relation_Global_ProductCategory_GlobalOTDTable_GlobalOTDTable_Global_Product.qbl
new file mode 100644
index 0000000..b35e9f5
--- /dev/null
+++ b/_Main/BL/Relations/Relation_Global_ProductCategory_GlobalOTDTable_GlobalOTDTable_Global_Product.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation Global_ProductCategory_GlobalOTDTable_GlobalOTDTable_Global_ProductCategory
+{
+  #keys: '1[414702.1.222746446]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[414702.1.222746448][414702.1.222746447][414702.1.222746449]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_ProductCategory
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Global_ProductCategory
+  {
+    #keys: '3[414702.1.222746451][414702.1.222746450][414702.1.222746452]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_Global_ProductCategory_Global_MappingProduct_MP_Global_MappingProdu.qbl b/_Main/BL/Relations/Relation_Global_ProductCategory_Global_MappingProduct_MP_Global_MappingProdu.qbl
new file mode 100644
index 0000000..0be0b32
--- /dev/null
+++ b/_Main/BL/Relations/Relation_Global_ProductCategory_Global_MappingProduct_MP_Global_MappingProdu.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation Global_ProductCategory_Global_MappingProduct_MP_Global_MappingProduct_MP_Global_ProductCategory
+{
+  #keys: '1[414702.1.222746433]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Global_MappingProduct_MP
+  {
+    #keys: '3[414702.1.222746435][414702.1.222746434][414702.1.222746436]'
+    Cardinality: '1toN'
+    ObjectDefinition: Global_ProductCategory
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Global_ProductCategory
+  {
+    #keys: '3[414702.1.222746438][414702.1.222746437][414702.1.222746439]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingProduct_MP
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_Global_ProductInLineCategory_GlobalOTDTable_GlobalOTDTable_Global_P.qbl b/_Main/BL/Relations/Relation_Global_ProductInLineCategory_GlobalOTDTable_GlobalOTDTable_Global_P.qbl
new file mode 100644
index 0000000..399cbfd
--- /dev/null
+++ b/_Main/BL/Relations/Relation_Global_ProductInLineCategory_GlobalOTDTable_GlobalOTDTable_Global_P.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation Global_ProductInLineCategory_GlobalOTDTable_GlobalOTDTable_Global_ProductInLineCategory
+{
+  #keys: '1[414702.1.220556276]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[414702.1.220556278][414702.1.220556277][414702.1.220556279]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_ProductInLineCategory
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Global_ProductInLineCategory
+  {
+    #keys: '3[414702.1.220556281][414702.1.220556280][414702.1.220556282]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_Global_ProductInLineCategory_Global_MappingProductInLane_Global_Map.qbl b/_Main/BL/Relations/Relation_Global_ProductInLineCategory_Global_MappingProductInLane_Global_Map.qbl
new file mode 100644
index 0000000..f827bdb
--- /dev/null
+++ b/_Main/BL/Relations/Relation_Global_ProductInLineCategory_Global_MappingProductInLane_Global_Map.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation Global_ProductInLineCategory_Global_MappingProductInLane_Global_MappingProductInLane_Global_ProductInLineCategory
+{
+  #keys: '1[414702.1.220556250]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Global_MappingProductInLane
+  {
+    #keys: '3[414702.1.220556252][414702.1.220556251][414702.1.220556253]'
+    Cardinality: '1toN'
+    ObjectDefinition: Global_ProductInLineCategory
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Global_ProductInLineCategory
+  {
+    #keys: '3[414702.1.220556255][414702.1.220556254][414702.1.220556256]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingProductInLane
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_Global_ProductInLineCategory_Global_MappingProduct_MP_Global_Mappin.qbl b/_Main/BL/Relations/Relation_Global_ProductInLineCategory_Global_MappingProduct_MP_Global_Mappin.qbl
new file mode 100644
index 0000000..bff781f
--- /dev/null
+++ b/_Main/BL/Relations/Relation_Global_ProductInLineCategory_Global_MappingProduct_MP_Global_Mappin.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation Global_ProductInLineCategory_Global_MappingProduct_MP_Global_MappingProduct_MP_Global_ProductInLineCategory
+{
+  #keys: '1[414702.1.220556263]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Global_MappingProduct_MP
+  {
+    #keys: '3[414702.1.220556265][414702.1.220556264][414702.1.220556266]'
+    Cardinality: '1toN'
+    ObjectDefinition: Global_ProductInLineCategory
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Global_ProductInLineCategory
+  {
+    #keys: '3[414702.1.220556268][414702.1.220556267][414702.1.220556269]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingProduct_MP
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_Global_StockingPointCostCategory_GlobalOTDTable_GlobalOTDTable_Glob.qbl b/_Main/BL/Relations/Relation_Global_StockingPointCostCategory_GlobalOTDTable_GlobalOTDTable_Glob.qbl
new file mode 100644
index 0000000..5f4ae65
--- /dev/null
+++ b/_Main/BL/Relations/Relation_Global_StockingPointCostCategory_GlobalOTDTable_GlobalOTDTable_Glob.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation Global_StockingPointCostCategory_GlobalOTDTable_GlobalOTDTable_Global_StockingPointCostCategory
+{
+  #keys: '1[414702.1.224718240]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[414702.1.224718242][414702.1.224718241][414702.1.224718243]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_StockingPointCostCategory
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Global_StockingPointCostCategory
+  {
+    #keys: '3[414702.1.224718245][414702.1.224718244][414702.1.224718246]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_Global_StockingPointCostCategory_Global_MappingProduct_MP_Global_Ma.qbl b/_Main/BL/Relations/Relation_Global_StockingPointCostCategory_Global_MappingProduct_MP_Global_Ma.qbl
new file mode 100644
index 0000000..9a77d29
--- /dev/null
+++ b/_Main/BL/Relations/Relation_Global_StockingPointCostCategory_Global_MappingProduct_MP_Global_Ma.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation Global_StockingPointCostCategory_Global_MappingProduct_MP_Global_MappingProduct_MP_Global_StockingPointCostCategory
+{
+  #keys: '1[414702.1.224718214]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Global_MappingProduct_MP
+  {
+    #keys: '3[414702.1.224718216][414702.1.224718215][414702.1.224718217]'
+    Cardinality: '1toN'
+    ObjectDefinition: Global_StockingPointCostCategory
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Global_StockingPointCostCategory
+  {
+    #keys: '3[414702.1.224718219][414702.1.224718218][414702.1.224718220]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingProduct_MP
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_Global_StockingPointCostCategory_Global_MappingStockingPointCost_Gl.qbl b/_Main/BL/Relations/Relation_Global_StockingPointCostCategory_Global_MappingStockingPointCost_Gl.qbl
new file mode 100644
index 0000000..207890c
--- /dev/null
+++ b/_Main/BL/Relations/Relation_Global_StockingPointCostCategory_Global_MappingStockingPointCost_Gl.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation Global_StockingPointCostCategory_Global_MappingStockingPointCost_Global_MappingStockingPointCost_Global_StockingPointCostCategory
+{
+  #keys: '1[414702.1.224718227]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Global_MappingStockingPointCost
+  {
+    #keys: '3[414702.1.224718229][414702.1.224718228][414702.1.224718230]'
+    Cardinality: '1toN'
+    ObjectDefinition: Global_StockingPointCostCategory
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Global_StockingPointCostCategory
+  {
+    #keys: '3[414702.1.224718232][414702.1.224718231][414702.1.224718233]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingStockingPointCost
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_HistoricalSalesOrder_MacroPlan_MacroPlan_HistoricalSalesOrder.qbl b/_Main/BL/Relations/Relation_HistoricalSalesOrder_MacroPlan_MacroPlan_HistoricalSalesOrder.qbl
deleted file mode 100644
index 3a7a8c1..0000000
--- a/_Main/BL/Relations/Relation_HistoricalSalesOrder_MacroPlan_MacroPlan_HistoricalSalesOrder.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation HistoricalSalesOrder_MacroPlan_MacroPlan_HistoricalSalesOrder
-{
-  #keys: '1[414382.0.385610086]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MacroPlan
-  {
-    #keys: '3[414382.0.385610088][414382.0.385610087][414382.0.385610089]'
-    Cardinality: '0to1'
-    ObjectDefinition: HistoricalSalesOrder
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide HistoricalSalesOrder
-  {
-    #keys: '3[414382.0.385610091][414382.0.385610090][414382.0.385610092]'
-    Cardinality: '1toN'
-    ObjectDefinition: MacroPlan
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MacroPlan_MappingActualPISPIP_MappingActualPISPIP_MacroPlan.qbl b/_Main/BL/Relations/Relation_MacroPlan_MappingActualPISPIP_MappingActualPISPIP_MacroPlan.qbl
deleted file mode 100644
index 8f7d3ba..0000000
--- a/_Main/BL/Relations/Relation_MacroPlan_MappingActualPISPIP_MappingActualPISPIP_MacroPlan.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MacroPlan_MappingActualPISPIP_MappingActualPISPIP_MacroPlan
-{
-  #keys: '1[414480.0.61560199]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MappingActualPISPIP
-  {
-    #keys: '3[414480.0.61560201][414480.0.61560200][414480.0.61560202]'
-    Cardinality: '1toN'
-    ObjectDefinition: MacroPlan
-    OwningSide: 'Owned'
-  }
-  RelationSide.RightSide MacroPlan
-  {
-    #keys: '3[414480.0.61560204][414480.0.61560203][414480.0.61560205]'
-    Cardinality: '0to1'
-    ObjectDefinition: MappingActualPISPIP
-    OwningSide: 'Reference'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MacroPlan_MappingExternalSupply_MappingExternalSupply_MacroPlan.qbl b/_Main/BL/Relations/Relation_MacroPlan_MappingExternalSupply_MappingExternalSupply_MacroPlan.qbl
deleted file mode 100644
index 606070c..0000000
--- a/_Main/BL/Relations/Relation_MacroPlan_MappingExternalSupply_MappingExternalSupply_MacroPlan.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MacroPlan_MappingExternalSupply_MappingExternalSupply_MacroPlan
-{
-  #keys: '1[414480.0.61581395]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MappingExternalSupply
-  {
-    #keys: '3[414480.0.61581397][414480.0.61581396][414480.0.61581398]'
-    Cardinality: '1toN'
-    ObjectDefinition: MacroPlan
-    OwningSide: 'Owned'
-  }
-  RelationSide.RightSide MacroPlan
-  {
-    #keys: '3[414480.0.61581400][414480.0.61581399][414480.0.61581401]'
-    Cardinality: '0to1'
-    ObjectDefinition: MappingExternalSupply
-    OwningSide: 'Reference'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MacroPlan_MappingProduct_MappingProduct_MacroPlan.qbl b/_Main/BL/Relations/Relation_MacroPlan_MappingProduct_MappingProduct_MacroPlan.qbl
deleted file mode 100644
index f0b9f15..0000000
--- a/_Main/BL/Relations/Relation_MacroPlan_MappingProduct_MappingProduct_MacroPlan.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MacroPlan_MappingProduct_MappingProduct_MacroPlan
-{
-  #keys: '1[414480.0.61560241]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MappingProduct
-  {
-    #keys: '3[414480.0.61560243][414480.0.61560242][414480.0.61560244]'
-    Cardinality: '1toN'
-    ObjectDefinition: MacroPlan
-    OwningSide: 'Owned'
-  }
-  RelationSide.RightSide MacroPlan
-  {
-    #keys: '3[414480.0.61560246][414480.0.61560245][414480.0.61560247]'
-    Cardinality: '0to1'
-    ObjectDefinition: MappingProduct
-    OwningSide: 'Reference'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MappingBOM_MacroPlan_MacroPlan_MappingBOM.qbl b/_Main/BL/Relations/Relation_MappingBOM_MacroPlan_MacroPlan_MappingBOM.qbl
deleted file mode 100644
index 902d4e9..0000000
--- a/_Main/BL/Relations/Relation_MappingBOM_MacroPlan_MacroPlan_MappingBOM.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MappingBOM_MacroPlan_MacroPlan_MappingBOM
-{
-  #keys: '1[412960.0.86935179]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MacroPlan
-  {
-    #keys: '3[412960.0.86935181][412960.0.86935180][412960.0.86935182]'
-    Cardinality: '0to1'
-    ObjectDefinition: MappingBOM
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide MappingBOM
-  {
-    #keys: '3[412960.0.86935184][412960.0.86935183][412960.0.86935185]'
-    Cardinality: '1toN'
-    ObjectDefinition: MacroPlan
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MappingBaseConversionFactor_MacroPlan_MacroPlan_MappingBaseConversi.qbl b/_Main/BL/Relations/Relation_MappingBaseConversionFactor_MacroPlan_MacroPlan_MappingBaseConversi.qbl
deleted file mode 100644
index a3c06fc..0000000
--- a/_Main/BL/Relations/Relation_MappingBaseConversionFactor_MacroPlan_MacroPlan_MappingBaseConversi.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MappingBaseConversionFactor_MacroPlan_MacroPlan_MappingBaseConversionFactor
-{
-  #keys: '1[414384.0.583154683]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MacroPlan
-  {
-    #keys: '3[414384.0.583154685][414384.0.583154684][414384.0.583154686]'
-    Cardinality: '0to1'
-    ObjectDefinition: MappingBaseConversionFactor
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide MappingBaseConversionFactor
-  {
-    #keys: '3[414384.0.583154688][414384.0.583154687][414384.0.583154689]'
-    Cardinality: '1toN'
-    ObjectDefinition: MacroPlan
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MappingCustomerOrder_MacroPlan_MacroPlan_MappingCustomerOrder.qbl b/_Main/BL/Relations/Relation_MappingCustomerOrder_MacroPlan_MacroPlan_MappingCustomerOrder.qbl
deleted file mode 100644
index 203709b..0000000
--- a/_Main/BL/Relations/Relation_MappingCustomerOrder_MacroPlan_MacroPlan_MappingCustomerOrder.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MappingCustomerOrder_MacroPlan_MacroPlan_MappingCustomerOrder
-{
-  #keys: '1[414384.0.583154766]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MacroPlan
-  {
-    #keys: '3[414384.0.583154768][414384.0.583154767][414384.0.583154769]'
-    Cardinality: '0to1'
-    ObjectDefinition: MappingCustomerOrder
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide MappingCustomerOrder
-  {
-    #keys: '3[414384.0.583154771][414384.0.583154770][414384.0.583154772]'
-    Cardinality: '1toN'
-    ObjectDefinition: MacroPlan
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MappingForecast_MacroPlan_MacroPlan_MappingForecast.qbl b/_Main/BL/Relations/Relation_MappingForecast_MacroPlan_MacroPlan_MappingForecast.qbl
deleted file mode 100644
index e3bd43d..0000000
--- a/_Main/BL/Relations/Relation_MappingForecast_MacroPlan_MacroPlan_MappingForecast.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MappingForecast_MacroPlan_MacroPlan_MappingForecast
-{
-  #keys: '1[414384.0.583160291]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MacroPlan
-  {
-    #keys: '3[414384.0.583160293][414384.0.583160292][414384.0.583160294]'
-    Cardinality: '0to1'
-    ObjectDefinition: MappingForecast
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide MappingForecast
-  {
-    #keys: '3[414384.0.583160296][414384.0.583160295][414384.0.583160297]'
-    Cardinality: '1toN'
-    ObjectDefinition: MacroPlan
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MappingInventoryValueAndCost_MacroPlan_MacroPlan_MappingInventoryVa.qbl b/_Main/BL/Relations/Relation_MappingInventoryValueAndCost_MacroPlan_MacroPlan_MappingInventoryVa.qbl
deleted file mode 100644
index f282c80..0000000
--- a/_Main/BL/Relations/Relation_MappingInventoryValueAndCost_MacroPlan_MacroPlan_MappingInventoryVa.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MappingInventoryValueAndCost_MacroPlan_MacroPlan_MappingInventoryValueAndCost
-{
-  #keys: '1[414384.0.601560025]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MacroPlan
-  {
-    #keys: '3[414384.0.601560027][414384.0.601560026][414384.0.601560028]'
-    Cardinality: '0to1'
-    ObjectDefinition: MappingInventoryValueAndCost
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide MappingInventoryValueAndCost
-  {
-    #keys: '3[414384.0.601560030][414384.0.601560029][414384.0.601560031]'
-    Cardinality: '1toN'
-    ObjectDefinition: MacroPlan
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MappingOperationCost_MacroPlan_MacroPlan_MappingOperationCost.qbl b/_Main/BL/Relations/Relation_MappingOperationCost_MacroPlan_MacroPlan_MappingOperationCost.qbl
deleted file mode 100644
index 28c2cbe..0000000
--- a/_Main/BL/Relations/Relation_MappingOperationCost_MacroPlan_MacroPlan_MappingOperationCost.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MappingOperationCost_MacroPlan_MacroPlan_MappingOperationCost
-{
-  #keys: '1[412960.0.95000601]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MacroPlan
-  {
-    #keys: '3[412960.0.95000603][412960.0.95000602][412960.0.95000604]'
-    Cardinality: '0to1'
-    ObjectDefinition: MappingOperationCost
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide MappingOperationCost
-  {
-    #keys: '3[412960.0.95000606][412960.0.95000605][412960.0.95000607]'
-    Cardinality: '1toN'
-    ObjectDefinition: MacroPlan
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MappingOperation_MacroPlan_MacroPlan_MappingOperation.qbl b/_Main/BL/Relations/Relation_MappingOperation_MacroPlan_MacroPlan_MappingOperation.qbl
deleted file mode 100644
index 4e7f7bc..0000000
--- a/_Main/BL/Relations/Relation_MappingOperation_MacroPlan_MacroPlan_MappingOperation.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MappingOperation_MacroPlan_MacroPlan_MappingOperation
-{
-  #keys: '1[412960.0.86990893]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MacroPlan
-  {
-    #keys: '3[412960.0.86990895][412960.0.86990894][412960.0.86990896]'
-    Cardinality: '0to1'
-    ObjectDefinition: MappingOperation
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide MappingOperation
-  {
-    #keys: '3[412960.0.86990898][412960.0.86990897][412960.0.86990899]'
-    Cardinality: '1toN'
-    ObjectDefinition: MacroPlan
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MappingProductInLane_MacroPlan_MacroPlan_MappingProductInLane.qbl b/_Main/BL/Relations/Relation_MappingProductInLane_MacroPlan_MacroPlan_MappingProductInLane.qbl
deleted file mode 100644
index 22712fa..0000000
--- a/_Main/BL/Relations/Relation_MappingProductInLane_MacroPlan_MacroPlan_MappingProductInLane.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MappingProductInLane_MacroPlan_MacroPlan_MappingProductInLane
-{
-  #keys: '1[412960.0.86844662]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MacroPlan
-  {
-    #keys: '3[412960.0.86844664][412960.0.86844663][412960.0.86844665]'
-    Cardinality: '0to1'
-    ObjectDefinition: MappingProductInLane
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide MappingProductInLane
-  {
-    #keys: '3[412960.0.86844667][412960.0.86844666][412960.0.86844668]'
-    Cardinality: '1toN'
-    ObjectDefinition: MacroPlan
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MappingSalesSegment_MacroPlan_MacroPlan_MappingSalesSegment.qbl b/_Main/BL/Relations/Relation_MappingSalesSegment_MacroPlan_MacroPlan_MappingSalesSegment.qbl
deleted file mode 100644
index 691032b..0000000
--- a/_Main/BL/Relations/Relation_MappingSalesSegment_MacroPlan_MacroPlan_MappingSalesSegment.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MappingSalesSegment_MacroPlan_MacroPlan_MappingSalesSegment
-{
-  #keys: '1[414384.0.583160113]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MacroPlan
-  {
-    #keys: '3[414384.0.583160115][414384.0.583160114][414384.0.583160116]'
-    Cardinality: '0to1'
-    ObjectDefinition: MappingSalesSegment
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide MappingSalesSegment
-  {
-    #keys: '3[414384.0.583160118][414384.0.583160117][414384.0.583160119]'
-    Cardinality: '1toN'
-    ObjectDefinition: MacroPlan
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MappingUnitOfMeasure_MacroPlan_MacroPlan_MappingUnitOfMeasure.qbl b/_Main/BL/Relations/Relation_MappingUnitOfMeasure_MacroPlan_MacroPlan_MappingUnitOfMeasure.qbl
deleted file mode 100644
index e01a2f2..0000000
--- a/_Main/BL/Relations/Relation_MappingUnitOfMeasure_MacroPlan_MacroPlan_MappingUnitOfMeasure.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MappingUnitOfMeasure_MacroPlan_MacroPlan_MappingUnitOfMeasure
-{
-  #keys: '1[414384.0.583160058]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MacroPlan
-  {
-    #keys: '3[414384.0.583160060][414384.0.583160059][414384.0.583160061]'
-    Cardinality: '0to1'
-    ObjectDefinition: MappingUnitOfMeasure
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide MappingUnitOfMeasure
-  {
-    #keys: '3[414384.0.583160063][414384.0.583160062][414384.0.583160064]'
-    Cardinality: '1toN'
-    ObjectDefinition: MacroPlan
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MappingUnit_MacroPlan_MacroPlan_MappingUnit.qbl b/_Main/BL/Relations/Relation_MappingUnit_MacroPlan_MacroPlan_MappingUnit.qbl
deleted file mode 100644
index e226c90..0000000
--- a/_Main/BL/Relations/Relation_MappingUnit_MacroPlan_MacroPlan_MappingUnit.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MappingUnit_MacroPlan_MacroPlan_MappingUnit
-{
-  #keys: '1[412960.0.96453721]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MacroPlan
-  {
-    #keys: '3[412960.0.96453723][412960.0.96453722][412960.0.96453724]'
-    Cardinality: '0to1'
-    ObjectDefinition: MappingUnit
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide MappingUnit
-  {
-    #keys: '3[412960.0.96453726][412960.0.96453725][412960.0.96453727]'
-    Cardinality: '1toN'
-    ObjectDefinition: MacroPlan
-    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_PeggingProductInSalesDemandBase_PeggingProduct_MP_PeggingProduct_MP.qbl b/_Main/BL/Relations/Relation_PeggingProductInSalesDemandBase_PeggingProduct_MP_PeggingProduct_MP.qbl
new file mode 100644
index 0000000..aabfffd
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PeggingProductInSalesDemandBase_PeggingProduct_MP_PeggingProduct_MP.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PeggingProductInSalesDemandBase_PeggingProduct_MP_PeggingProduct_MP_PeggingProductInSalesDemandBase
+{
+  #keys: '1[414702.1.290710058]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PeggingProduct_MP
+  {
+    #keys: '3[414702.1.290710060][414702.1.290710059][414702.1.290710061]'
+    Cardinality: '0to1'
+    ObjectDefinition: PeggingProductInSalesDemandBase
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PeggingProductInSalesDemandBase
+  {
+    #keys: '3[414702.1.290710063][414702.1.290710062][414702.1.290710064]'
+    Cardinality: '1toN'
+    ObjectDefinition: PeggingProduct_MP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_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_PeggingProduct_MP_GlobalOTDSOP_GlobalOTDSOP_PeggingProduct_MP.qbl b/_Main/BL/Relations/Relation_PeggingProduct_MP_GlobalOTDSOP_GlobalOTDSOP_PeggingProduct_MP.qbl
new file mode 100644
index 0000000..17eff95
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PeggingProduct_MP_GlobalOTDSOP_GlobalOTDSOP_PeggingProduct_MP.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PeggingProduct_MP_GlobalOTDSOP_GlobalOTDSOP_PeggingProduct_MP
+{
+  #keys: '1[414702.1.290710038]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414702.1.290710040][414702.1.290710039][414702.1.290710041]'
+    Cardinality: '0to1'
+    ObjectDefinition: PeggingProduct_MP
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PeggingProduct_MP
+  {
+    #keys: '3[414702.1.290710043][414702.1.290710042][414702.1.290710044]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_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_PeggingResult_AllChild_PeggingResult_AllParent.qbl b/_Main/BL/Relations/Relation_PeggingResult_AllChild_PeggingResult_AllParent.qbl
new file mode 100644
index 0000000..485b308
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PeggingResult_AllChild_PeggingResult_AllParent.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PeggingResult_AllChild_PeggingResult_AllParent
+{
+  #keys: '1[414702.1.294852003]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide AllChild
+  {
+    #keys: '3[414702.1.294852005][414702.1.294852004][414702.1.294852006]'
+    Cardinality: '1toN'
+    ObjectDefinition: PeggingResult
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide AllParent
+  {
+    #keys: '3[414702.1.294852008][414702.1.294852007][414702.1.294852009]'
+    Cardinality: '0to1'
+    ObjectDefinition: PeggingResult
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PeggingResult_AllGroupChild_PeggingResult_AllGroupParent.qbl b/_Main/BL/Relations/Relation_PeggingResult_AllGroupChild_PeggingResult_AllGroupParent.qbl
new file mode 100644
index 0000000..edc59bb
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PeggingResult_AllGroupChild_PeggingResult_AllGroupParent.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PeggingResult_AllGroupChild_PeggingResult_AllGroupParent
+{
+  #keys: '1[414702.1.320753677]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide AllGroupChild
+  {
+    #keys: '3[414702.1.320753679][414702.1.320753678][414702.1.320753680]'
+    Cardinality: '1toN'
+    ObjectDefinition: PeggingResult
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide AllGroupParent
+  {
+    #keys: '3[414702.1.320753682][414702.1.320753681][414702.1.320753683]'
+    Cardinality: '0to1'
+    ObjectDefinition: PeggingResult
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PeggingResult_Child_PeggingResult_Parent.qbl b/_Main/BL/Relations/Relation_PeggingResult_Child_PeggingResult_Parent.qbl
new file mode 100644
index 0000000..c36e77b
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PeggingResult_Child_PeggingResult_Parent.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PeggingResult_Child_PeggingResult_Parent
+{
+  #keys: '1[414702.1.290710113]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Child
+  {
+    #keys: '3[414702.1.290710115][414702.1.290710114][414702.1.290710116]'
+    Cardinality: '1toN'
+    ObjectDefinition: PeggingResult
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Parent
+  {
+    #keys: '3[414702.1.290710118][414702.1.290710117][414702.1.290710119]'
+    Cardinality: '0to1'
+    ObjectDefinition: PeggingResult
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PeggingResult_PeggingProductInSalesDemandBase_PeggingProductInSales.qbl b/_Main/BL/Relations/Relation_PeggingResult_PeggingProductInSalesDemandBase_PeggingProductInSales.qbl
new file mode 100644
index 0000000..b399e75
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PeggingResult_PeggingProductInSalesDemandBase_PeggingProductInSales.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PeggingResult_PeggingProductInSalesDemandBase_PeggingProductInSalesDemandBase_PeggingResult
+{
+  #keys: '1[414702.1.290710098]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PeggingProductInSalesDemandBase
+  {
+    #keys: '3[414702.1.290710100][414702.1.290710099][414702.1.290710101]'
+    Cardinality: '0to1'
+    ObjectDefinition: PeggingResult
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PeggingResult
+  {
+    #keys: '3[414702.1.290710103][414702.1.290710102][414702.1.290710104]'
+    Cardinality: '1toN'
+    ObjectDefinition: PeggingProductInSalesDemandBase
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PriorityFactorDetail_PriorityFactor_PriorityFactor_PriorityFactorDe.qbl b/_Main/BL/Relations/Relation_PriorityFactorDetail_PriorityFactor_PriorityFactor_PriorityFactorDe.qbl
new file mode 100644
index 0000000..5da1a69
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PriorityFactorDetail_PriorityFactor_PriorityFactor_PriorityFactorDe.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PriorityFactorDetail_PriorityFactor_PriorityFactor_PriorityFactorDetail
+{
+  #keys: '1[414382.0.444850082]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PriorityFactor
+  {
+    #keys: '3[414382.0.444850084][414382.0.444850083][414382.0.444850085]'
+    Cardinality: '0to1'
+    ObjectDefinition: PriorityFactorDetail
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PriorityFactorDetail
+  {
+    #keys: '3[414382.0.444850087][414382.0.444850086][414382.0.444850088]'
+    Cardinality: '1toN'
+    ObjectDefinition: PriorityFactor
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PriorityFactorDetails_PriorityFactor_PriorityFactor_PriorityFactorD.qbl b/_Main/BL/Relations/Relation_PriorityFactorDetails_PriorityFactor_PriorityFactor_PriorityFactorD.qbl
deleted file mode 100644
index f58818b..0000000
--- a/_Main/BL/Relations/Relation_PriorityFactorDetails_PriorityFactor_PriorityFactor_PriorityFactorD.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation PriorityFactorDetails_PriorityFactor_PriorityFactor_PriorityFactorDetails
-{
-  #keys: '1[414382.0.444850082]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide PriorityFactor
-  {
-    #keys: '3[414382.0.444850084][414382.0.444850083][414382.0.444850085]'
-    Cardinality: '0to1'
-    ObjectDefinition: PriorityFactorDetails
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide PriorityFactorDetails
-  {
-    #keys: '3[414382.0.444850087][414382.0.444850086][414382.0.444850088]'
-    Cardinality: '1toN'
-    ObjectDefinition: PriorityFactor
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_S_DT_CustomOrder_Child_S_DT_CustomOrder_Parent.qbl b/_Main/BL/Relations/Relation_S_DT_CustomOrder_Child_S_DT_CustomOrder_Parent.qbl
new file mode 100644
index 0000000..ba14057
--- /dev/null
+++ b/_Main/BL/Relations/Relation_S_DT_CustomOrder_Child_S_DT_CustomOrder_Parent.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation S_DT_CustomOrder_Child_S_DT_CustomOrder_Parent
+{
+  #keys: '1[414724.0.301487674]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Child
+  {
+    #keys: '3[414724.0.301487676][414724.0.301487675][414724.0.301487677]'
+    Cardinality: '0to1'
+    ObjectDefinition: S_DT_CustomOrder
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Parent
+  {
+    #keys: '3[414724.0.301487679][414724.0.301487678][414724.0.301487680]'
+    Cardinality: '1toN'
+    ObjectDefinition: S_DT_CustomOrder
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_S_DT_CustomOrder_MacroPlan_MacroPlan_S_DT_CustomOrder.qbl b/_Main/BL/Relations/Relation_S_DT_CustomOrder_MacroPlan_MacroPlan_S_DT_CustomOrder.qbl
new file mode 100644
index 0000000..1060e96
--- /dev/null
+++ b/_Main/BL/Relations/Relation_S_DT_CustomOrder_MacroPlan_MacroPlan_S_DT_CustomOrder.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation S_DT_CustomOrder_MacroPlan_MacroPlan_S_DT_CustomOrder
+{
+  #keys: '1[414724.0.292616032]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[414724.0.292616034][414724.0.292616033][414724.0.292616035]'
+    Cardinality: '0to1'
+    ObjectDefinition: S_DT_CustomOrder
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide S_DT_CustomOrder
+  {
+    #keys: '3[414724.0.292616037][414724.0.292616036][414724.0.292616038]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_S_DT_OrderSpliteRow_MacroPlan_MacroPlan_S_DT_OrderSpliteRow.qbl b/_Main/BL/Relations/Relation_S_DT_OrderSpliteRow_MacroPlan_MacroPlan_S_DT_OrderSpliteRow.qbl
new file mode 100644
index 0000000..101f476
--- /dev/null
+++ b/_Main/BL/Relations/Relation_S_DT_OrderSpliteRow_MacroPlan_MacroPlan_S_DT_OrderSpliteRow.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation S_DT_OrderSpliteRow_MacroPlan_MacroPlan_S_DT_OrderSpliteRow
+{
+  #keys: '1[414724.0.289871273]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[414724.0.289871275][414724.0.289871274][414724.0.289871276]'
+    Cardinality: '0to1'
+    ObjectDefinition: S_DT_OrderSpliteRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide S_DT_OrderSpliteRow
+  {
+    #keys: '3[414724.0.289871278][414724.0.289871277][414724.0.289871279]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_S_DT_OrderSpliteRow_S_DT_CustomOrder_S_DT_CustomOrder_S_DT_OrderSpl.qbl b/_Main/BL/Relations/Relation_S_DT_OrderSpliteRow_S_DT_CustomOrder_S_DT_CustomOrder_S_DT_OrderSpl.qbl
new file mode 100644
index 0000000..673ec22
--- /dev/null
+++ b/_Main/BL/Relations/Relation_S_DT_OrderSpliteRow_S_DT_CustomOrder_S_DT_CustomOrder_S_DT_OrderSpl.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation S_DT_OrderSpliteRow_S_DT_CustomOrder_S_DT_CustomOrder_S_DT_OrderSpliteRow
+{
+  #keys: '1[414724.0.292600485]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide S_DT_CustomOrder
+  {
+    #keys: '3[414724.0.292600487][414724.0.292600486][414724.0.292600488]'
+    Cardinality: '0to1'
+    ObjectDefinition: S_DT_OrderSpliteRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide S_DT_OrderSpliteRow
+  {
+    #keys: '3[414724.0.292600490][414724.0.292600489][414724.0.292600491]'
+    Cardinality: '1toN'
+    ObjectDefinition: S_DT_CustomOrder
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_S_DT_SpliteStruct_MacroPlan_MacroPlan_S_DT_SpliteStruct.qbl b/_Main/BL/Relations/Relation_S_DT_SpliteStruct_MacroPlan_MacroPlan_S_DT_SpliteStruct.qbl
new file mode 100644
index 0000000..71e9ae6
--- /dev/null
+++ b/_Main/BL/Relations/Relation_S_DT_SpliteStruct_MacroPlan_MacroPlan_S_DT_SpliteStruct.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation S_DT_SpliteStruct_MacroPlan_MacroPlan_S_DT_SpliteStruct
+{
+  #keys: '1[414724.0.291485612]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[414724.0.291485614][414724.0.291485613][414724.0.291485615]'
+    Cardinality: '0to1'
+    ObjectDefinition: S_DT_SpliteStruct
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide S_DT_SpliteStruct
+  {
+    #keys: '3[414724.0.291485617][414724.0.291485616][414724.0.291485618]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_S_FunctionClass_MacroPlan_MacroPlan_S_FunctionClass.qbl b/_Main/BL/Relations/Relation_S_FunctionClass_MacroPlan_MacroPlan_S_FunctionClass.qbl
new file mode 100644
index 0000000..01a5c7d
--- /dev/null
+++ b/_Main/BL/Relations/Relation_S_FunctionClass_MacroPlan_MacroPlan_S_FunctionClass.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation S_FunctionClass_MacroPlan_MacroPlan_S_FunctionClass
+{
+  #keys: '1[414724.0.288796777]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[414724.0.288796779][414724.0.288796778][414724.0.288796780]'
+    Cardinality: '0to1'
+    ObjectDefinition: S_FunctionClass
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide S_FunctionClass
+  {
+    #keys: '3[414724.0.288796782][414724.0.288796781][414724.0.288796783]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    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_BaseConversionFactor/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_BaseConversionFactor/StaticMethod_CreateOrUpdate.qbl
index cd44e09..2e4ee74 100644
--- a/_Main/BL/Type_BaseConversionFactor/StaticMethod_CreateOrUpdate.qbl
+++ b/_Main/BL/Type_BaseConversionFactor/StaticMethod_CreateOrUpdate.qbl
@@ -26,6 +26,20 @@
       if( productId <> "" ) {
         product := Product_MP::FindById( macroPlan, productId );
       }else{
+    //    info( productId );
+    //    cf := select( source,
+    //              AsSourceUnitOfMeasure,
+    //              cf,
+    //              ( cf.TargetUnitOfMeasure() = target
+    //                or cf.TargetUnitOfMeasure() = source )
+    //              and cf.Product_MP() = product
+    //              );
+    //    info( isnull( cf ) );
+    //    info( "sourceuomname: " + cf.astype( BaseConversionFactor ).SourceUnitOfMeasureName() );
+    //    info( "targetuomname: " + target.Name() );
+    //    info( "cf.targetuomname: " + cf.astype( BaseConversionFactor ).TargetUnitOfMeasureName() );
+    //    info( "productid: " + guard( product.ID(), "" ) );
+    //    info( "cf.product: " + cf.astype( BaseConversionFactor ).ProductID() );
         result := BaseConversionFactor::CreateUpdate( source, target, factor, product, isEnable )
       }
     
diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl
index 14045dd..1b8028f 100644
--- a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl
@@ -1,12 +1,12 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Export (
-  GlobalOTDTable globalOTDTable
+  GlobalOTDSOP globalOTDSOP
 ) as BinaryValue
 {
   TextBody:
   [*
-    binaryData := globalOTDTable.GlobalOTDTable_CAR_Export().ExecuteToXLS( true );
+    binaryData := globalOTDSOP.GlobalOTDTable_CAR_Export().ExecuteToXLS( true );
     
     return binaryData.AsBinaryValue();
   *]
diff --git a/_Main/BL/Type_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_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_CreatePanelAllocationBudget.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationBudget.qbl
new file mode 100644
index 0000000..da29213
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationBudget.qbl
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreatePanelAllocationBudget (
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterMonths months,
+  CapacityAndSaleBudgeFilterYear year,
+  const GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+      total := 0.0;
+      traverse ( months, Elements, m ) {
+        columnName  := "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-骞村害棰勭畻";
+        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
+        cellReal    := Global_MappingForecast::GetQuantityByMonth( casbcir.GetProductCodes(), globalOTDTable, DateTime::Now().Year(), m.MonthNo() );
+        cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
+        total       := total + cellReal;
+        cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+      }
+      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-骞村害棰勭畻" );
+      cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
+      columnYear.TotalIdentification( year.YearNo() );
+      cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationByScenario.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationByScenario.qbl
new file mode 100644
index 0000000..4cf1bf3
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationByScenario.qbl
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreatePanelAllocationByScenario (
+  MacroPlans macroPlans,
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterMonths months,
+  CapacityAndSaleBudgeFilterYear year
+)
+{
+  TextBody:
+  [*
+    traverse ( macroPlans, Elements, mp ) {
+      traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+        total := 0.0;
+        traverse ( months, Elements, m ) {
+          columnName  := "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-" + mp.ScenarioName();
+          columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
+          cellReal    := Product_MP::GetNewSupplyByMonth( casbcir.GetProductCodes(), mp, year.YearNo(), m.MonthNo() );
+          cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
+          total       := total + cellReal;
+          cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+        }
+        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-" + mp.ScenarioName() );
+        cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
+        columnYear.TotalIdentification( year.YearNo() );
+        cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_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_CreateSalesVolume.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolume.qbl
new file mode 100644
index 0000000..6741062
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolume.qbl
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateSalesVolume (
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterMonths months,
+  CapacityAndSaleBudgeFilterYear year,
+  const GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+      total := 0.0;
+      traverse ( months, Elements, m ) {
+        columnName  := "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-骞村害棰勭畻";
+        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
+        cellReal    := Global_MappingAnnualBudgetData::GetSaleByMonth( casbcir.GetProductCodes(), globalOTDTable, year.YearNo(), m.MonthNo() );
+        cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
+        total       := total + cellReal;
+        cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+      }
+      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-total-骞村害棰勭畻" );
+      cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
+      columnYear.TotalIdentification( year.YearNo() );
+      cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeByScenario.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeByScenario.qbl
new file mode 100644
index 0000000..4335178
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeByScenario.qbl
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateSalesVolumeByScenario (
+  MacroPlans macroPlans,
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterMonths months,
+  CapacityAndSaleBudgeFilterYear year
+)
+{
+  TextBody:
+  [*
+    traverse ( macroPlans, Elements, mp ) {
+      traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+        total := 0.0;
+        traverse ( months, Elements, m ) {
+          columnName  := "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-" + mp.ScenarioName();
+          columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
+          cellReal    := Forecast::GetFulfilledBalanceByMonth( casbcir.GetProductCodes(), mp, year.YearNo(), m.MonthNo() );
+          cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
+          total       := total + cellReal;
+          cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+        }
+        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-total-" + mp.ScenarioName() );
+        cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
+        columnYear.TotalIdentification( year.YearNo() );
+        cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_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_TotalIdentification.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_TotalIdentification.qbl
new file mode 100644
index 0000000..c116037
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_TotalIdentification.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TotalIdentification
+{
+  #keys: '3[414702.1.286051925][414702.1.286051924][414702.1.286051926]'
+  Description: '鏍囪瘑浣嶏紙鍒ゆ柇鏄惁鍔犲拰锛�'
+  ValueType: Number
+}
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_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl
index 230f93e..3b19661 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl
@@ -10,9 +10,11 @@
   [*
     // yypsybs Sep-18-2023 (created)
     value := select( parent, CapacityAndSaleBudgeCompareItemRow, row, row.BusinessType() = businessType and row.PlaceOfProductionOfArray() = placeOfProductionOfArray );
-    if( isnull( value ) ) {
+    
+    if ( isnull( value ) ) {
       value := parent.CapacityAndSaleBudgeCompareItemRow( relnew, BusinessType := businessType, PlaceOfProductionOfArray := placeOfProductionOfArray );  
-    } 
+    }
+    
     return value;
   *]
 }
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_InitializedData.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_InitializedData.qbl
new file mode 100644
index 0000000..7a77229
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_InitializedData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod InitializedData (
+  GlobalOTDSOP globalOTDSOP,
+  const GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    globalOTDSOP.CapacityAndSaleBudgeFilterBusinessType( relflush );
+    
+    businessTypes := selectuniquevalues( globalOTDTable, Global_MappingAnnualBudgetData, tempGMABD, true, tempGMABD.BusinessType() );
+    
+    traverse ( businessTypes, Elements, bt ) {
+      globalOTDSOP.CapacityAndSaleBudgeFilterBusinessType( relnew, BusinessType := bt );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_Initial.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_Initial.qbl
deleted file mode 100644
index 3601509..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_Initial.qbl
+++ /dev/null
@@ -1,14 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod Initial (
-  GlobalOTDSOP parent
-)
-{
-  Description: '鍒濆鍖栧姣旈」'
-  TextBody:
-  [*
-    // yypsybs Sep-15-2023 (created)
-    CapacityAndSaleBudgeFilterItem::CreateIfNotExist( parent, "闈㈡澘鍒嗛厤閲�" );
-    CapacityAndSaleBudgeFilterItem::CreateIfNotExist( parent, "閿�鍞" );
-  *]
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_InitializedData.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_InitializedData.qbl
new file mode 100644
index 0000000..c9a019d
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_InitializedData.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod InitializedData (
+  GlobalOTDSOP globalOTDSOP
+)
+{
+  Description: '鍒濆鍖栧姣旈」'
+  TextBody:
+  [*
+    globalOTDSOP.CapacityAndSaleBudgeFilterItem( relflush );
+    
+    globalOTDSOP.CapacityAndSaleBudgeFilterItem( relnew, ItemName := "闈㈡澘鍒嗛厤閲�" );
+    globalOTDSOP.CapacityAndSaleBudgeFilterItem( relnew, ItemName := "閿�鍞" );
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl
deleted file mode 100644
index 8159900..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod Initial (
-  GlobalOTDSOP parent
-)
-{
-  Description: '鍒濆鍖栧勾浠�'
-  TextBody:
-  [*
-    // yypsybs Sep-15-2023 (created)
-    existList := selectuniquevalues( parent, CapacityAndSaleBudgeFilterMonth, item, item.MonthNo() );
-    for( i := 1; i <= 12; i++ ) {
-      if( existList.Find( i ) = -1 ) {
-        parent.CapacityAndSaleBudgeFilterMonth( relnew, 
-                                                MonthNo := i );
-      }  
-    }
-  *]
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_InitializedData.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_InitializedData.qbl
new file mode 100644
index 0000000..b85464a
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_InitializedData.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod InitializedData (
+  GlobalOTDSOP globalOTDSOP
+)
+{
+  Description: '鍒濆鍖栧勾浠�'
+  TextBody:
+  [*
+    globalOTDSOP.CapacityAndSaleBudgeFilterMonth( relflush );
+    
+    for( i := 1; i <= 12; i++ ) {
+      globalOTDSOP.CapacityAndSaleBudgeFilterMonth( relnew, MonthNo := i );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_InitializedData.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_InitializedData.qbl
new file mode 100644
index 0000000..53f41ff
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_InitializedData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod InitializedData (
+  GlobalOTDSOP globalOTDSOP,
+  const GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    globalOTDSOP.CapacityAndSaleBudgeFilterPlaceOfProductionOfArray( relflush );
+    
+    organCodes := selectuniquevalues( globalOTDTable, Global_MappingAnnualBudgetData, tempGMABD, true, tempGMABD.OrganCode() );
+    
+    traverse ( organCodes, Elements, oc ) {
+      globalOTDSOP.CapacityAndSaleBudgeFilterPlaceOfProductionOfArray( relnew, PlaceOfProductionOfArray := oc );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl
deleted file mode 100644
index 72badb3..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod Initial (
-  GlobalOTDSOP parent
-)
-{
-  Description: '鍒濆鍖栧勾浠�'
-  TextBody:
-  [*
-    // yypsybs Sep-15-2023 (created)
-    existList := selectuniquevalues( parent, CapacityAndSaleBudgeFilterYear, item, item.YearNo() );
-    nowYear := Date::Today().Year();
-    for( i := nowYear - 10; i <= nowYear + 5; i++ ) {
-      if( existList.Find( i ) = -1 ) {
-        parent.CapacityAndSaleBudgeFilterYear( relnew, 
-                                               YearNo := i );
-      }  
-    }
-  *]
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_InitializedData.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_InitializedData.qbl
new file mode 100644
index 0000000..a76216a
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_InitializedData.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod InitializedData (
+  GlobalOTDSOP globalOTDSOP
+)
+{
+  Description: '鍒濆鍖栧勾浠�'
+  TextBody:
+  [*
+    // yypsybs Sep-15-2023 (created)
+    globalOTDSOP.CapacityAndSaleBudgeFilterYear( relflush );
+    
+    nowYear := Date::Today().Year();
+    
+    for( i := nowYear - 10; i <= nowYear + 5; i++ ) {
+      globalOTDSOP.CapacityAndSaleBudgeFilterYear( relnew, YearNo := i );  
+    }
+  *]
+}
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_CurrencyRate_MP/StaticMethod_CreateCurrencyRate.qbl b/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRate.qbl
index b3244e0..272b16c 100644
--- a/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRate.qbl
+++ b/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRate.qbl
@@ -1,6 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateCurrencyRate (
+  MacroPlan mp,
   String currencyid,
   Date start,
   Real rate
@@ -11,10 +12,10 @@
   [*
     // Administrator Jul-19-2023 (created)
     isfromdb := true;
-    currency := Currency_MP::FindCurrencyTypeIndex( currencyid );
+    currency := Currency_MP::FindById( mp, currencyid );
     
     //create new currency
-    result := CurrencyRate_MP::FindCurrencyRateTypeIndex( currencyid, start );
+    result := CurrencyRate_MP::FindByIdAndStart( currency, currencyid, start );
     
     if( isnull( result ) )
     {
diff --git a/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRateFromJson.qbl b/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRateFromJson.qbl
index 67cd2c8..97a01d2 100644
--- a/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRateFromJson.qbl
+++ b/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRateFromJson.qbl
@@ -1,6 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateCurrencyRateFromJson (
+  MacroPlan mp,
   JSON datarow
 ) as CurrencyRate_MP
 {
@@ -16,7 +17,7 @@
     day := [Number]startstring.SubString( 8, 2 );
     
     start := Date::Construct( years, month, day );
-    result := CurrencyRate_MP::CreateCurrencyRate( currencyid, start, rate );
+    result := CurrencyRate_MP::CreateCurrencyRate( mp, currencyid, start, rate );
     
     return result;
   *]
diff --git a/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateFromMapping.qbl b/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateFromMapping.qbl
new file mode 100644
index 0000000..82dc0fa
--- /dev/null
+++ b/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateFromMapping.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateFromMapping (
+  const GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    // Administrator Oct-31-2023 (created)
+    updates := construct( CurrencyRate_MPs );
+    traverse( globalOTDTable, Global_MappingCurrencyRate_MP, gcr, true )
+    {
+      a := CurrencyRate_MP::CreateCurrencyRate( macroPlan, gcr.CurrencyID(), gcr.Start(), gcr.Rate() );
+      updates.Add( a );
+      }
+    origindataset := selectset( macroPlan, Currency_MP.CurrencyRate_MP, cr, true );
+    obsoletes := origindataset.Difference( updates );
+    // delete obsoleted
+    difflength := obsoletes.Size();
+    for( j:=0; j<difflength; j++ )
+    {
+      obsolete := obsoletes.Element( j );
+      obsolete.Delete();
+      }
+  *]
+}
diff --git a/_Main/BL/Type_CurrencyRate_MP/StaticMethod_FindByIdAndStart.qbl b/_Main/BL/Type_CurrencyRate_MP/StaticMethod_FindByIdAndStart.qbl
new file mode 100644
index 0000000..2c39de8
--- /dev/null
+++ b/_Main/BL/Type_CurrencyRate_MP/StaticMethod_FindByIdAndStart.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindByIdAndStart (
+  Currency_MP owner,
+  String id,
+  Date start
+) as CurrencyRate_MP
+{
+  TextBody:
+  [*
+    // yypsybs Aug-14-2023 (created)
+    
+    result := select(  owner, CurrencyRate_MP, item, true, item.CurrencyID() = id and item.Start() = start );
+    
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Currency_MP/StaticMethod_CreateCurrency.qbl b/_Main/BL/Type_Currency_MP/StaticMethod_CreateCurrency.qbl
index ade128e..155abb3 100644
--- a/_Main/BL/Type_Currency_MP/StaticMethod_CreateCurrency.qbl
+++ b/_Main/BL/Type_Currency_MP/StaticMethod_CreateCurrency.qbl
@@ -16,7 +16,7 @@
     isfromdb := true;
     
     //create new currency
-    result := Currency_MP::FindCurrencyTypeIndex( id );
+    result := Currency_MP::FindById( mp, id );
     
     if( isnull( result ) )
     {
diff --git a/_Main/BL/Type_Currency_MP/StaticMethod_CreateFromMapping.qbl b/_Main/BL/Type_Currency_MP/StaticMethod_CreateFromMapping.qbl
new file mode 100644
index 0000000..dbda48a
--- /dev/null
+++ b/_Main/BL/Type_Currency_MP/StaticMethod_CreateFromMapping.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateFromMapping (
+  const GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    // Administrator Oct-31-2023 (created)
+    updates := construct( Currency_MPs );
+    traverse( globalOTDTable, Global_MappingCurrency_MP, gc, true )
+    {
+      a := Currency_MP::CreateCurrency( macroPlan, gc.ID(), gc.Name(), " ", gc.IsBase() );
+      updates.Add( a );
+      }
+    origindataset := selectset( macroPlan, Currency_MP, c, true );
+    obsoletes := origindataset.Difference( updates );
+    // delete obsoleted
+    difflength := obsoletes.Size();
+    for( j:=0; j<difflength; j++ )
+    {
+      obsolete := obsoletes.Element( j );
+      obsolete.Delete();
+      }
+  *]
+}
diff --git a/_Main/BL/Type_DataInterfaceLog/Attribute_CreateDate.qbl b/_Main/BL/Type_DataInterfaceLog/Attribute_CreateDate.qbl
new file mode 100644
index 0000000..927fccc
--- /dev/null
+++ b/_Main/BL/Type_DataInterfaceLog/Attribute_CreateDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CreateDate
+{
+  #keys: '3[414702.1.240820091][414702.1.240820090][414702.1.240820092]'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_DataInterfaceLog/Attribute_ErrorMessage.qbl b/_Main/BL/Type_DataInterfaceLog/Attribute_ErrorMessage.qbl
new file mode 100644
index 0000000..2017c51
--- /dev/null
+++ b/_Main/BL/Type_DataInterfaceLog/Attribute_ErrorMessage.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ErrorMessage
+{
+  #keys: '3[414702.1.240820101][414702.1.240820100][414702.1.240820102]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_DataInterfaceLog/Attribute_ErrorNo.qbl b/_Main/BL/Type_DataInterfaceLog/Attribute_ErrorNo.qbl
new file mode 100644
index 0000000..ffce55d
--- /dev/null
+++ b/_Main/BL/Type_DataInterfaceLog/Attribute_ErrorNo.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ErrorNo
+{
+  #keys: '3[414702.1.240820111][414702.1.240820110][414702.1.240820112]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_DataInterfaceLog/Attribute_ExecuteStatus.qbl b/_Main/BL/Type_DataInterfaceLog/Attribute_ExecuteStatus.qbl
new file mode 100644
index 0000000..99829e0
--- /dev/null
+++ b/_Main/BL/Type_DataInterfaceLog/Attribute_ExecuteStatus.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ExecuteStatus
+{
+  #keys: '3[414702.1.240820121][414702.1.240820120][414702.1.240820122]'
+  Description:
+  [*
+    鎵ц鐘舵��
+    Running
+    Success
+    Error
+  *]
+  ValueType: String
+}
diff --git a/_Main/BL/Type_DataInterfaceLog/Attribute_ExecuteUser.qbl b/_Main/BL/Type_DataInterfaceLog/Attribute_ExecuteUser.qbl
new file mode 100644
index 0000000..365dfbf
--- /dev/null
+++ b/_Main/BL/Type_DataInterfaceLog/Attribute_ExecuteUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ExecuteUser
+{
+  #keys: '3[414702.1.240820131][414702.1.240820130][414702.1.240820132]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_DataInterfaceLog/Attribute_ID.qbl b/_Main/BL/Type_DataInterfaceLog/Attribute_ID.qbl
new file mode 100644
index 0000000..6566ce8
--- /dev/null
+++ b/_Main/BL/Type_DataInterfaceLog/Attribute_ID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[414702.1.240784646][414702.1.240784645][414702.1.240784647]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_DataInterfaceLog/Attribute_Message.qbl b/_Main/BL/Type_DataInterfaceLog/Attribute_Message.qbl
new file mode 100644
index 0000000..ec7d65b
--- /dev/null
+++ b/_Main/BL/Type_DataInterfaceLog/Attribute_Message.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Message
+{
+  #keys: '3[414702.1.240784656][414702.1.240784655][414702.1.240784657]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_DataInterfaceLog/StaticMethod_Create.qbl b/_Main/BL/Type_DataInterfaceLog/StaticMethod_Create.qbl
new file mode 100644
index 0000000..1c6dcae
--- /dev/null
+++ b/_Main/BL/Type_DataInterfaceLog/StaticMethod_Create.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Create (
+  GlobalOTDLog globalOTDLog,
+  String executeUser,
+  String message
+) as String
+{
+  TextBody:
+  [*
+    dataInterfaceLog := globalOTDLog.DataInterfaceLog( relnew,
+                                                       ID            := OS::GenerateGUIDAsString(),
+                                                       ExecuteStatus := "Running",
+                                                       ExecuteUser   := executeUser,
+                                                       Message       := message,
+                                                       CreateDate    := DateTime::ActualTime()
+                                                      );
+    
+    return dataInterfaceLog.ID();
+  *]
+}
diff --git a/_Main/BL/Type_DataInterfaceLog/StaticMethod_OnError.qbl b/_Main/BL/Type_DataInterfaceLog/StaticMethod_OnError.qbl
new file mode 100644
index 0000000..60ebeac
--- /dev/null
+++ b/_Main/BL/Type_DataInterfaceLog/StaticMethod_OnError.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnError (
+  GlobalOTDLog globalOTDLog,
+  Number errorNo,
+  String errorMessage,
+  String ID
+)
+{
+  TextBody:
+  [*
+    targetDataInterfaceLog := select( globalOTDLog, DataInterfaceLog, tempDI, tempDI.ID() = ID );
+    
+    targetDataInterfaceLog.ExecuteStatus( "Error" );
+    targetDataInterfaceLog.ErrorNo( errorNo );
+    targetDataInterfaceLog.ErrorMessage( errorMessage );
+  *]
+}
diff --git a/_Main/BL/Type_DataInterfaceLog/StaticMethod_OnException.qbl b/_Main/BL/Type_DataInterfaceLog/StaticMethod_OnException.qbl
new file mode 100644
index 0000000..51eb429
--- /dev/null
+++ b/_Main/BL/Type_DataInterfaceLog/StaticMethod_OnException.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnException (
+  Exception e,
+  String dataInterfaceLogID
+)
+{
+  TextBody:
+  [*
+    options := DatasetFindOptions::Construct( "GlobalOTDLog" ).IncludeOffline( true );
+    
+    mdskey := DatasetController::FindUnique( options );
+    
+    MDSGlobalOTDLog::Root( mdskey ) -> DataInterfaceLog::OnError( e.ErrorNumber(), e.Message(), dataInterfaceLogID );
+  *]
+}
diff --git a/_Main/BL/Type_DataInterfaceLog/StaticMethod_OnSuccess.qbl b/_Main/BL/Type_DataInterfaceLog/StaticMethod_OnSuccess.qbl
new file mode 100644
index 0000000..76535c0
--- /dev/null
+++ b/_Main/BL/Type_DataInterfaceLog/StaticMethod_OnSuccess.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnSuccess (
+  GlobalOTDLog globalOTDLog,
+  String ID
+)
+{
+  TextBody:
+  [*
+    targetDataInterfaceLog := select( globalOTDLog, DataInterfaceLog, tempDI, tempDI.ID() = ID );
+    
+    targetDataInterfaceLog.ExecuteStatus( "Success" );
+  *]
+}
diff --git a/_Main/BL/Type_DataInterfaceLog/StaticMethod_Success.qbl b/_Main/BL/Type_DataInterfaceLog/StaticMethod_Success.qbl
new file mode 100644
index 0000000..0d1e585
--- /dev/null
+++ b/_Main/BL/Type_DataInterfaceLog/StaticMethod_Success.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Success (
+  GlobalOTDTable globalOTDTable,
+  String dataInterfaceLogID
+)
+{
+  TextBody:
+  [*
+    options := DatasetFindOptions::Construct( "GlobalOTDLog" ).IncludeOffline( true );
+    
+    mdskey := DatasetController::FindUnique( options );
+    
+    MDSGlobalOTDLog::Root( mdskey ) -> DataInterfaceLog::OnSuccess( dataInterfaceLogID );
+  *]
+}
diff --git a/_Main/BL/Type_DataInterfaceLog/_ROOT_Type_DataInterfaceLog.qbl b/_Main/BL/Type_DataInterfaceLog/_ROOT_Type_DataInterfaceLog.qbl
new file mode 100644
index 0000000..c29ffcf
--- /dev/null
+++ b/_Main/BL/Type_DataInterfaceLog/_ROOT_Type_DataInterfaceLog.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type DataInterfaceLog
+{
+  #keys: '5[414702.1.240820045][414702.1.240820043][0.0.0][414702.1.240820044][414702.1.240820046]'
+  BaseType: Object
+  StructuredName: 'DataInterfaceLogs'
+}
diff --git a/_Main/BL/Type_Flag/_ROOT_Type_Flag.qbl b/_Main/BL/Type_Flag/_ROOT_Type_Flag.qbl
new file mode 100644
index 0000000..9b19c84
--- /dev/null
+++ b/_Main/BL/Type_Flag/_ROOT_Type_Flag.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type Flag
+{
+  #keys: '5[414996.0.33484648][414996.0.33484646][0.0.0][414996.0.33484647][414996.0.33484649]'
+  BaseType: Object
+  Description: '鏍囧織浣�'
+  StructuredName: 'Flags'
+}
diff --git a/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl
index 2d3b108..ac48151 100644
--- a/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl
+++ b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl
@@ -12,11 +12,11 @@
     // yypsybs Sep-18-2023 (created)
     result := sum( macroPlan, 
                    Product_MP.SalesDemand,
-                   item, 
-                   item.istype( Forecast ) and productNo.Find( item.ProductID() ) > -1 
-                   and item.StartDate().Year() = yearNo
-                   and item.StartDate().Month() = monthNo,
-                   item.FulfilledQuantity() * item.Price() );
+                   tempSD, 
+                   productNo.Find( tempSD.ProductID() ) > -1 
+                   and tempSD.StartDate().Year() = yearNo
+                   and tempSD.StartDate().Month() = monthNo,
+                   tempSD.FulfilledQuantity() * tempSD.Price() );
     return result;
   *]
 }
diff --git "a/_Main/BL/Type_GlobalDTOTable/Method_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 c84f323..0000000
--- a/_Main/BL/Type_GlobalDTOTable/Method_InitTestDataByYear.qbl
+++ /dev/null
@@ -1,68 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method InitTestDataByYear (
-  MacroPlan macroPlan,
-  CapacityAndSaleBudgeFilterYears years
-)
-{
-  TextBody:
-  [*
-    // yypsybs Oct-7-2023 (created)
-    productCodeList := selectuniquevalues( macroPlan, Product_MP, item, item.ID() );
-    debuginfo( "productCodeList : " + [String]productCodeList.Size() );
-    
-    this.Global_MappingAnnualBudgetData( relflush );
-    debuginfo( "create Global_MappingAnnualBudgetData test data" );
-    id := 1;
-    traverse( years, Elements, year ) {
-      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.YearNo(),
-                                                                    BusinessType := "浜嬩笟閮�" + [String](productCode.Length() mod 3),
-                                                                    OrganCode := "I13",
-                                                                    ProductID := productCode);
-        id := id + 1;
-        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 ) );
-      }
-    }
-    result2 := selectset( this, Global_MappingAnnualBudgetData, item, true );
-    debuginfo( "test MappingAnnualBudget size : " + [String]result2.Size() );
-  *]
-}
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 12a5633..d4f4029 100644
--- "a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
+++ "b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
@@ -44,17 +44,17 @@
       }
     
     if( organcodelist.Size() = 0 ){
-      organcodelist := selectvalues( this, Global_MappingOperationBOM, bom,true, bom.OrganCode() );
+      organcodelist := selectuniquevalues( this, Global_MappingOperationBOM, bom,true, bom.OrganCode() );
       }
     
     macroPlan.InitialUnitAndStockingPoint();
     
     if ( isUnitOfMeasure_MP ) {
-      Global_MappingUnitOfMeasure_MP::SynchronizeMacroPlanData( this, macroPlan );
+      Global_MappingUnitOfMeasure_MP::SynchronizeMacroPlanData( this, macroPlan, executionUser );
     }
     
     if ( isCustomOrder ) {
-      Global_MappingCustomOrder::SynchronizeMacroPlanData( this, macroPlan, executionUser );
+      Global_MappingCustomOrder::SynchronizeMacroPlanData( this, macroPlan, businessTypes, organcodelist, executionUser );
     }
     
     if ( isForeacst ) {
@@ -82,7 +82,7 @@
     }
     
     if ( isProductInLane ) {
-      Global_MappingProductInLane::SynchronizeMacroPlanData( this, macroPlan, executionUser );
+      Global_MappingProductInLane::SynchronizeMacroPlanData( this, macroPlan, businessTypes, executionUser );
     }
     
     if ( isAIPISPIP ) {
@@ -94,20 +94,12 @@
     }
     
     if ( isStockingPointCost ) {
-      Global_MappingStockingPointCost::SynchronizeMacroPlanData( this, macroPlan, executionUser );
+      Global_MappingStockingPointCost::SynchronizeMacroPlanData( this, macroPlan, businessTypes, executionUser );
     }
     
     if ( isOperationCost ) {
       Global_MappingOperationCost::SynchronizeMacroPlanData( this, macroPlan, executionUser, businessTypes, organcodelist );
     }
-    
-    //if ( isDOI_DSI ) {
-    //  Global_MappingDOI_DSI::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_DOI_DSI" );
-    //}
-    //
-    //if ( isCustomerGrade ) {
-    //  Global_MappingCustomerGrade::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_CustomerGrade" );
-    //}
     
     if ( isStockingPoint_MP ) {
       Global_MappingStockingPoint_MP::SynchronizeMacroPlanData( this, macroPlan, executionUser );
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllCategoryData.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllCategoryData.qbl
new file mode 100644
index 0000000..37b6ab8
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllCategoryData.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DeleteAllCategoryData (
+  GlobalOTDTable globalOTDTable,
+  String dataInterfaceLogID
+)
+{
+  TextBody:
+  [*
+    globalOTDTable -> GlobalOTDTable::DeleteAllCategoryDataStream()
+                   -> DataInterfaceLog::Success( dataInterfaceLogID )
+                   -> Exception()
+                   -> DataInterfaceLog::OnException( dataInterfaceLogID );
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllCategoryDataStream.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllCategoryDataStream.qbl
new file mode 100644
index 0000000..9095912
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllCategoryDataStream.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DeleteAllCategoryDataStream (
+  GlobalOTDTable globalOTDTable
+) as stream[GlobalOTDTable]
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_ProductCategory( relflush );
+    globalOTDTable.Global_ProductInLineCategory( relflush );
+    globalOTDTable.Global_InventorySupplyCategory( relflush );
+    globalOTDTable.Global_StockingPointCostCategory( relflush );
+    globalOTDTable.Global_MAPISPIPCategory( relflush );
+    
+    return emit( globalOTDTable );
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingData.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingData.qbl
new file mode 100644
index 0000000..3f6a675
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingData.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DeleteAllMappingData (
+  GlobalOTDTable globalOTDTable,
+  String dataInterfaceLogID
+)
+{
+  TextBody:
+  [*
+    globalOTDTable -> GlobalOTDTable::DeleteAllMappingDataStream()
+                   -> DataInterfaceLog::Success( dataInterfaceLogID )
+                   -> Exception()
+                   -> DataInterfaceLog::OnException( dataInterfaceLogID );
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingDataStream.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingDataStream.qbl
new file mode 100644
index 0000000..532eaa6
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingDataStream.qbl
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DeleteAllMappingDataStream (
+  GlobalOTDTable globalOTDTable
+) as stream[GlobalOTDTable]
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingCustomOrder( relflush );
+    globalOTDTable.Global_MappingForecast( relflush );
+    globalOTDTable.Global_MappingUnitOfMeasure_MP( relflush );
+    globalOTDTable.Global_MappingSalesSegment_MP( relflush );
+    globalOTDTable.Global_MappingProduct_MP( relflush );
+    globalOTDTable.Global_MappingConversionFactor( relflush );
+    globalOTDTable.Global_MappingOperation( relflush );
+    globalOTDTable.Global_MappingOperationBOM( relflush );
+    globalOTDTable.Global_MappingProductInLane( relflush );
+    globalOTDTable.Global_MappingActualProductInStockingPointInPeriod( relflush );
+    globalOTDTable.Global_MappingInventorySupply( relflush );
+    globalOTDTable.Global_MappingStockingPointCost( relflush );
+    globalOTDTable.Global_MappingOperationCost( relflush );
+    globalOTDTable.Global_MappingDOI_DSI( relflush );
+    globalOTDTable.Global_MappingCustomerGrade( relflush );
+    globalOTDTable.Global_MappingStockingPoint_MP( relflush );
+    globalOTDTable.Global_MappingCurrency_MP( relflush );
+    globalOTDTable.Global_MappingCurrencyRate_MP( relflush );
+    globalOTDTable.Global_MappingLane( relflush );
+    globalOTDTable.Global_MappingLaneLeg( relflush );
+    
+    return emit( globalOTDTable );
+  *]
+}
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 f860d1f..7e62097 100644
--- a/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl
+++ b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl
@@ -4,299 +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:
   [*
-    // yypsybs Sep-19-2023 (created)
-    // true, false
-    //info( saleOrCapacity );
-    // 鏈�;瀛e害;鍗婂勾;骞�
-    //info( groupBy );
-    // 闈㈡澘鍩哄湴;浜嬩笟閮�
-    //info( byBusinessTypeOrByOrgCode );
-    //traverse( businessTypes, Elements, businessType ) {
-    //  info( "businessType : " + businessType.BusinessType() );
-    //}
-    //traverse( placeOfProductionOfArrays, Elements, placeOfProductionOfArray ) {
-    //  info( "placeOfProductionOfArray : " + placeOfProductionOfArray.PlaceOfProductionOfArray() );
-    //}
-    //traverse( macroPlans, Elements, macroPlan ) {
-    //  info( "macroPlan : " + macroPlan.ScenarioName() );  
-    //}
-    // 骞翠唤涓嶉�夋椂鍏ㄩ��
-    if( years.Size() = 0 ) {
-      years := selectsortedset( this, CapacityAndSaleBudgeFilterYear, item, true, item.YearNo() );
-    }
-    //traverse( years, Elements, year ) {
-    //  debuginfo( "yearNo : " + [String]year.YearNo() );
-    //}
-    // 鏈堜唤涓嶉�夋椂鍏ㄩ��
-    if( months.Size() = 0 ) {
-      months := selectsortedset( this, CapacityAndSaleBudgeFilterMonth, item, true, item.MonthNo() );
-    }
-    //traverse( months, Elements, month ) {
-    //  debuginfo( "monthNo : " + [String]month.MonthNo() );
-    //}
-    
-    // ====娓呯悊鏃ф暟鎹�====
     this.CapacityAndSaleBudgeChartRow( relflush );
     this.CapacityAndSaleBudgeChartElement( relflush );
     
-    // ====鎸夐潰鏉垮熀鍦板拰浜嬩笟閮ㄥ浜у搧杩涜绛涢�夊垎缁�====
-    historyData := selectset( otdTable, Global_MappingAnnualBudgetData, item, true );
-    if( businessTypes.Size() > 0 ) {
-      businessTypeStrings := selectuniquevalues( businessTypes, Elements, item, true, item.BusinessType() );
-      historyData := selectset( historyData, Elements, item, businessTypeStrings.Find( item.BusinessType() ) > -1 );
-    }
-    if( placeOfProductionOfArrays.Size() > 0 ) {
-      placeOfProductionOfArrayStrings := selectuniquevalues( placeOfProductionOfArrays, Elements, item, true, item.PlaceOfProductionOfArray() );
-      historyData := selectset( historyData, Elements, item, placeOfProductionOfArrayStrings.Find( item.OrgCodeFromBom() ) > -1 );
-    }
-    //info( "historyData : " + [String]historyData.Size() );
-    traverse( historyData, Elements, item ) {
-      row := CapacityAndSaleBudgeChartRow::CreateIfNotExist( this, item.BusinessType(), item.OrgCodeFromBom() );
-      // 璁板綍姣忚鍖呭惈鍝簺product
-      CapacityAndSaleBudgeChartRowProduct::CreateIfNotExist( row, item.ProductID() );
-    }
-    rows := selectset( this, CapacityAndSaleBudgeChartRow, item, true );
-    //info( "rows : " + [String]rows.Size() );
-    placeOfProductionOfArrayList := selectuniquevalues( historyData, Elements, item, item.OrgCodeFromBom() );
-    //traverse( placeOfProductionOfArrayList, Elements, item ) {
-    //  info( "placeOfProduction : " + item );  
-    //}
-    businessTypeList := selectuniquevalues( historyData, Elements, item, item.BusinessType() );
-    //traverse( businessTypeList, Elements, item ) {
-    //  info( "businessType : " + item );  
-    //}
-    // 鐢熸垚鍥捐〃鍏冪礌
-    traverse( years, Elements, year ) {
-    //  debuginfo( "process year start : " + [String]year.YearNo() );
-      if( byBusinessTypeOrByOrgCode = "闈㈡澘鍩哄湴" and groupBy = "骞�" ) {
-        // 鐩爣
-        traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
-          productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
-          this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                 TimeStringAndScenarioName := [String]year.YearNo() + "骞�-鐩爣",
-                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                 Quantity := ifexpr( 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() );
-        }
-      }
-    //  debuginfo( "process year end : " + [String]year.YearNo() )
-    }
-    //info( "CapacityAndSaleBudgeChartElement : " + [String]selectset( this, CapacityAndSaleBudgeChartElement, item, true ).Size() );
-    //traverse( this, CapacityAndSaleBudgeChartRow, row ) {
-    //  info( "==鈫�==" );
-    //  info( row.BusinessType() );
-    //  info( row.PlaceOfProductionOfArray() );
-    //  elements := selectset( row, CapacityAndSaleBudgeChartRowProduct, cell, true );
-    //  info( elements.Size() );
-    //  info( row.GetProductCodes().Concatenate( " | " ) );
-    //  info( "==鈫�==" );
-    //}
+    casbcirs := CapacityAndSaleBudgeChartElement::SelectGenerateChartRows( this, &items, &placeOfProductionOfArrays, &businessTypes, &years, &months );
+    
+    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 64a208a..8a96743 100644
--- a/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
+++ b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
@@ -3,209 +3,52 @@
 Method CapacityAndSaleBudgeCompare (
   MacroPlans macroPlans,
   CapacityAndSaleBudgeFilterItems items,
+  CapacityAndSaleBudgeFilterPlaceOfProductionOfArrays casbfpopoas,
+  CapacityAndSaleBudgeFilterBusinessTypes casbfbts,
   CapacityAndSaleBudgeFilterYears years,
   CapacityAndSaleBudgeFilterMonths months,
-  const GlobalOTDTable otdTable
-)
+  const GlobalOTDTable globalOTDTable
+) as stream[GlobalOTDSOP]
 {
   Description: 'todo : mappingParent鏀逛负mpSync, random鍒犱簡'
   TextBody:
   [*
-    // yypsybs Sep-18-2023 (created)
-    // ====涓嶉�夋椂榛樿鍏ㄩ��====
-    if( years.Size() = 0 ) {
-      years := selectsortedset( this, CapacityAndSaleBudgeFilterYear, item, item.YearNo() );
-    }
-    if( months.Size() = 0 ) {
-      months := selectsortedset( this, CapacityAndSaleBudgeFilterMonth, item, item.MonthNo() );
-    }
-    traverse( macroPlans, Elements, item ) {
-      debuginfo( "scenario : " + item.ScenarioName() );
-    }
-    traverse( items, Elements, item ) {
-      debuginfo( "item : " + item.ItemName() );
-    }
-    traverse( years, Elements, item ) {
-      debuginfo( "year : " + [String]item.YearNo() );
-    }
-    traverse( months, Elements, item ) {
-      debuginfo( "month : " + [String]item.MonthNo() );
-    }
-    // ====娓呯悊鏃ф暟鎹�====
     this.CapacityAndSaleBudgeCompareItemRow( relflush );
     this.CapacityAndSaleBudgeCompareItemColumn( relflush );
-    // ====姹囨�绘墍鏈夊嚭鐜扮殑浜у搧====
-    historyData := selectset( otdTable, Global_MappingAnnualBudgetData, item, true );
-    debuginfo( "historyData : " + [String]historyData.Size() );
     
-    traverse( historyData, Elements, one ) {
-      productCode := one.ProductID();
-    //  Global_MappingOperationBOM::CreateTestData( otdTable, "浜嬩笟閮�" + [String](productCode.Length() mod 3), "闈㈡澘鍩哄湴" + [String](productCode.Length() mod 4), productCode );
-    //  boms := selectset( otdTable, Global_MappingOperationBOM, bom, bom.ProductCode() = productCode );
-    //  if( boms.Size() > 0 ) {
-    //    bom := boms.First();
-    //    businessType := bom.BusinessType();
-    //    placeOfProductionOfArray := bom.OrganCode();
-        // 鐩稿悓闈㈡澘鍩哄湴鍜屼簨涓氶儴鐨勬斁涓�琛�
-        row := CapacityAndSaleBudgeCompareItemRow::CreateIfNotExist( this, one.BusinessType(), one.OrgCodeFromBom() );
-        // 璁板綍姣忚鍖呭惈鍝簺product
-        CapacityAndSaleBudgeCompareItemRowProduct::CreateIfNotExist( row, productCode );
-    //  } else {
-    //    debuginfo( "no boms for product : " + productCode );
-    //  }
-    }
-    debuginfo( "CapacityAndSaleBudgeCompareItemRow : " + [String]selectset( this, CapacityAndSaleBudgeCompareItemRow, item, true ).Size() );
-    // ====浠庡乏鍚戝彸鐢熸垚鍒楀ご涓庡唴瀹�====
-    // 浜嬩笟閮紝闈㈡澘鍩哄湴
-    debuginfo( "dealing businessType and placeOfProductionOfArray" )
-    columnBusinessType := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜嬩笟閮�" );
-    columnPlaceOfProductionOfArray := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍩哄湴" );
-    traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-      cell := columnBusinessType.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.BusinessType() );
-      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-      cell := columnPlaceOfProductionOfArray.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.PlaceOfProductionOfArray() );
-      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    }
-    // 闈㈡澘鍒嗛厤閲� - 骞村害棰勭畻 (sheets)
-    // 鏍煎紡锛� 闈㈡澘鍒嗛厤閲� - 骞� - 鏈堬紙1-12 & total锛� - 骞村害棰勭畻/scenarioName
-    debuginfo( "dealing 闈㈡澘鍒嗛厤閲�" )
-    if( CapacityAndSaleBudgeFilterItem::Contains( items, "闈㈡澘鍒嗛厤閲�" ) ) {
-      traverse( years, Elements, year ) {
-        debuginfo( "闈㈡澘鍒嗛厤閲�" + [String]year.YearNo() + "骞�" );
-        // 鍘嗗彶鏁版嵁
-        debuginfo( "闈㈡澘鍒嗛厤閲�" + [String]year.YearNo() + "骞村巻鍙叉暟鎹�" );
-        traverse( months, Elements, month ) {
-          columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
-          traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-            cellReal := Global_MappingForecast::GetQuantityByMonth( row.GetProductCodes(), otdTable, DateTime::Now().Year(), month.MonthNo() );
-            cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-            cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-          }
-        }
-        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-骞村害棰勭畻" );
-        traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-          cellReal := Global_MappingForecast::GetQuantityByYear( row.GetProductCodes(), otdTable, year.YearNo() );
-          cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-        }
-        debuginfo( "闈㈡澘鍒嗛厤閲�" + [String]year.YearNo() + "骞碨&OP鏁版嵁" );
-        // S&OP鏁版嵁
-        traverse( macroPlans, Elements, macroPlan ) {
-          traverse( months, Elements, month ) {
-            columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, 
-                                                                                    "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-" + macroPlan.ScenarioName() );
-            traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-              cellReal := Product_MP::GetNewSupplyByMonth( row.GetProductCodes(), macroPlan, year.YearNo(), month.MonthNo() );
-              cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-              cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-            }
-          }
-          columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, 
-                                                                                 "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-" + macroPlan.ScenarioName() );
-          traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-            cellReal := Product_MP::GetNewSupplyByYear( row.GetProductCodes(), macroPlan, year.YearNo() );
-            cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-            cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-          }
-        }
-      }
-    }
-    // 骞村害閿�鍞
-    debuginfo( "dealing 閿�鍞" )
-    if( CapacityAndSaleBudgeFilterItem::Contains( items, "閿�鍞" ) ) {
-      traverse( years, Elements, year ) {
-        debuginfo( "閿�鍞" + [String]year.YearNo() + "骞�" );
-        // 鍘嗗彶鏁版嵁
-        debuginfo( "閿�鍞" + [String]year.YearNo() + "骞村巻鍙叉暟鎹�" );
-        traverse( months, Elements, month ) {
-          columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
-          traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-            cellReal := Global_MappingAnnualBudgetData::GetSaleByMonth( row.GetProductCodes(), otdTable, year.YearNo(), month.MonthNo() );
-            cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-            cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-          }
-        }
-        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-骞村害棰勭畻" );
-        traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-          cellReal := Global_MappingAnnualBudgetData::GetSaleByYear( row.GetProductCodes(), otdTable, year.YearNo() );
-          cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-        }
-        debuginfo( "閿�鍞" + [String]year.YearNo() + "骞村巻鍙叉暟鎹甋&OP鏁版嵁" );
-        // S&OP鏁版嵁
-        traverse( macroPlans, Elements, macroPlan ) {
-          traverse( months, Elements, month ) {
-            columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-" + macroPlan.ScenarioName() );
-            traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-              cellReal := Forecast::GetFulfilledBalanceByMonth( row.GetProductCodes(), macroPlan, year.YearNo(), month.MonthNo() );
-              cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-              cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-            }
-          }
-          columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-total-" + macroPlan.ScenarioName() );
-          traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-            // QID 23
-            cellReal := Forecast::GetFulfilledBalanceByYear( row.GetProductCodes(), macroPlan, year.YearNo() );
-            cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-            cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-          }
-        }
-      }
-    }
-    // 澶у紶鐩堝埄棰�
-    debuginfo( "dealing 澶у紶鐩堝埄棰�" )
-    traverse( years, Elements, year ) {
-      // 鍘嗗彶鏁版嵁
-      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "澶у紶鐩堝埄棰�-" + [String]year.YearNo() + "骞�-骞村害棰勭畻" );
-      traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-        // todo 
-        // QID 23
-        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 );
-        }
-      }
-    }
-    // 浜у搧鐩堝埄棰�
-    debuginfo( "dealing 浜у搧鐩堝埄棰�" )
-    traverse( years, Elements, year ) {
-      // 鍘嗗彶鏁版嵁
-      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-" + [String]year.YearNo() + "骞�-骞村害棰勭畻" );
-      traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-        // todo
-        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 );
-        }
-      }
+    //CapacityAndSaleBudgeCompareItemCell::SetFilterCriteria( this, &items, &casbfpopoas, &casbfbts, &years, &months );
+    //---------------------------------------------------------------------------
+    if ( items.Size() = 0 ) {
+      items := selectset( this, CapacityAndSaleBudgeFilterItem, tempCASBFI, tempCASBFI.ItemName() = "閿�鍞" );
     }
     
-    // 璁剧疆rowNo鍜宑olumnNo
-    debuginfo( "set rowNo and columnNo" );
-    rowNo := 1;
-    rowSorted := selectsortedset( this, CapacityAndSaleBudgeCompareItemRow, item, item.PlaceOfProductionOfArray() + "_" + item.BusinessType() );
-    traverse( rowSorted, Elements, item ) {
-      item.RowNo( rowNo );
-      rowNo := rowNo + 1;
+    if ( casbfpopoas.Size() = 0 ) {
+      casbfpopoas := selectset( this, CapacityAndSaleBudgeFilterPlaceOfProductionOfArray, tempCASBFPOPOA, true );
     }
-    columnNo := 1;
-    traverse( this, CapacityAndSaleBudgeCompareItemColumn, item ) {
-      item.ColumnNo( columnNo );
-      columnNo := columnNo + 1;
+    
+    if ( casbfbts.Size() = 0 ) {
+      casbfbts := selectset( this, CapacityAndSaleBudgeFilterBusinessType, tempCASBFBT, true );
     }
-    debuginfo( "done" );
+    
+    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() );
+    }
+    //---------------------------------------------------------------------------
+    
+    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_GlobalParameters/Attribute_Address.qbl b/_Main/BL/Type_GlobalParameters/Attribute_Address.qbl
new file mode 100644
index 0000000..f2e1fe6
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/Attribute_Address.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Address
+{
+  #keys: '3[412960.0.369930086][412960.0.369930085][412960.0.369930087]'
+  Description: 'Api浣跨敤鐨勫湴鍧�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_GlobalParameters/Attribute_AttributeName.qbl b/_Main/BL/Type_GlobalParameters/Attribute_AttributeName.qbl
new file mode 100644
index 0000000..85f6698
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/Attribute_AttributeName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute AttributeName
+{
+  #keys: '3[412960.0.369930046][412960.0.369930045][412960.0.369930047]'
+  Description: '鍙橀噺鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_GlobalParameters/Attribute_AttributeValue.qbl b/_Main/BL/Type_GlobalParameters/Attribute_AttributeValue.qbl
new file mode 100644
index 0000000..378b5e3
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/Attribute_AttributeValue.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute AttributeValue
+{
+  #keys: '3[412960.0.369930056][412960.0.369930055][412960.0.369930057]'
+  Description: '鍙橀噺鍊�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_GlobalParameters/Attribute_Port.qbl b/_Main/BL/Type_GlobalParameters/Attribute_Port.qbl
new file mode 100644
index 0000000..29658ab
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/Attribute_Port.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Port
+{
+  #keys: '3[412960.0.369930066][412960.0.369930065][412960.0.369930067]'
+  Description: 'Api浣跨敤鐨勭鍙�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_GlobalParameters/Attribute_PostRequestBody.qbl b/_Main/BL/Type_GlobalParameters/Attribute_PostRequestBody.qbl
new file mode 100644
index 0000000..c1fe72b
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/Attribute_PostRequestBody.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PostRequestBody
+{
+  #keys: '3[412960.0.369930076][412960.0.369930075][412960.0.369930077]'
+  Description: 'Api浣跨敤鐨刾ost body'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_GlobalParameters/StaticMethod_TestForApiRequest.qbl b/_Main/BL/Type_GlobalParameters/StaticMethod_TestForApiRequest.qbl
new file mode 100644
index 0000000..c10cd30
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/StaticMethod_TestForApiRequest.qbl
@@ -0,0 +1,172 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod TestForApiRequest (
+  GlobalOTDTable owner
+)
+{
+  TextBody:
+  [*
+    // Administrator Oct-26-2023 (created)
+    //info( "Sales Segment Finished, Start Get StockingPoint From Api" )
+    //bodynumber := "2";
+    //postrequestbody := JSON::Object()
+    //                    .Add( "serviceInterfaceCode", "ESBOTDH000" + bodynumber )
+    //                    .Add( "fromSystemCode", "OTDH000" + bodynumber )
+    //                    .Add( "toInterfaceCode", "QIDH000" + bodynumber )
+    //                    .Add( "ouZone", "OU_TMSH" )
+    //                    .Add( "uuid", "1617355496bb588e353e80147eea5f45" )
+    //                    .Add( "requestTime", DateTime::Now().Format( "Y-M2-D2 H:m:s" ) )
+    //                    .Add( "dataType", "JSON" )
+    //                    .Add( "data", JSON::Object()
+    //                                  .Add( "pageIndex", "1" ) ).Build();
+    //
+    //info( DateTime::Now().Format( "Y-M2-D2 H:m:s" ) );
+    //postrequestbodystring := postrequestbody.AsString();
+    //info( postrequestbodystring );
+    //
+    //parameter := select( owner, GlobalParameters, param, param.AttributeName() = "test" );
+    //body := parameter.PostRequestBody();
+    //address := parameter.Address();
+    //url := parameter.AttributeValue();
+    //port := [Number]parameter.Port();
+    //
+    //// for HTTPS requests:
+    //i := HTTPInterface::Create( address, port);
+    ////i := HTTPInterface::Create( address ,443);
+    //info( address, url, port, body );
+    //
+    //i.URL(url);
+    //i.SSL(false);
+    ////i.SSL(true);
+    ////i.SSLKeystore('MyKeystore'); // created in the Config Utility
+    //
+    //i.PostMethod(true); //it's a POST method
+    //
+    //i.Call(body); // Call's argument is for POST method's content.
+    //htmlresult := i.Result();
+    //info( htmlresult );
+    //
+    //htmlresponse := JSON::Parse( htmlresult );
+    //info( htmlresponse );
+    
+    info( "Init StockingPoint For Api" )
+    existparameter := select( owner, GlobalParameters, param, param.AttributeName() = "StockingPoint" );
+    if( not isnull( existparameter ) ){
+      existparameter.Delete();
+      }
+    spparameter := owner.GlobalParameters( relnew );
+    spparameter.AttributeName( "StockingPoint" );
+    spparameter.AttributeValue( "/otdService/https/GetStockingPointsInfo" );
+    spparameter.Address( "api-uat-sgc.tianma.cn" );
+    spparameter.Port( "443" );
+    bodynumber := "2";
+    postrequestbody := JSON::Object()
+                        .Add( "serviceInterfaceCode", "ESBOTDH000" + bodynumber )
+                        .Add( "fromSystemCode", "OTDH000" + bodynumber )
+                        .Add( "toInterfaceCode", "QIDH000" + bodynumber )
+                        .Add( "ouZone", "OU_TMSH" )
+                        .Add( "uuid", "1617355496bb588e353e80147eea5f45" )
+                        .Add( "requestTime", DateTime::Now().Format( "Y-M2-D2 H:m:s" ) )
+                        .Add( "dataType", "JSON" )
+                        .Add( "data", JSON::Object()
+                                      .Add( "pageIndex", "1" ) ).Build();
+    postrequestbodystring := postrequestbody.AsString();
+    spparameter.PostRequestBody( postrequestbodystring );
+    
+    info( "Init CurrencyInfo For Api" )
+    existparameter := select( owner, GlobalParameters, param, param.AttributeName() = "CurrencyInfo" );
+    if( not isnull( existparameter ) ){
+      existparameter.Delete();
+      }
+    ciparameter := owner.GlobalParameters( relnew );
+    ciparameter.AttributeName( "CurrencyInfo" );
+    ciparameter.AttributeValue( "/otdService/https/GetCurrenciesInfo" );
+    ciparameter.Address( "api-uat-sgc.tianma.cn" );
+    ciparameter.Port( "443" );
+    bodynumber := "1";
+    postrequestbody := JSON::Object()
+                        .Add( "serviceInterfaceCode", "ESBOTDH000" + bodynumber )
+                        .Add( "fromSystemCode", "OTDH000" + bodynumber )
+                        .Add( "toInterfaceCode", "QIDH000" + bodynumber )
+                        .Add( "ouZone", "OU_TMSH" )
+                        .Add( "uuid", "1617355496bb588e353e80147eea5f45" )
+                        .Add( "requestTime", DateTime::Now().Format( "Y-M2-D2 H:m:s" ) )
+                        .Add( "dataType", "JSON" )
+                        .Add( "data", JSON::Object()
+                                      .Add( "pageIndex", "1" ) ).Build();
+    postrequestbodystring := postrequestbody.AsString();
+    ciparameter.PostRequestBody( postrequestbodystring );
+    
+    info( "Init CurrencyRates For Api" )
+    existparameter := select( owner, GlobalParameters, param, param.AttributeName() = "CurrencyRates" );
+    if( not isnull( existparameter ) ){
+      existparameter.Delete();
+      }
+    crparameter := owner.GlobalParameters( relnew );
+    crparameter.AttributeName( "CurrencyRates" );
+    crparameter.AttributeValue( "/otdService/https/GetCurrencyRatesInfo" );
+    crparameter.Address( "api-uat-sgc.tianma.cn" );
+    crparameter.Port( "443" );
+    bodynumber := "5";
+    postrequestbody := JSON::Object()
+                        .Add( "serviceInterfaceCode", "ESBOTDH000" + bodynumber )
+                        .Add( "fromSystemCode", "OTDH000" + bodynumber )
+                        .Add( "toInterfaceCode", "QIDH000" + bodynumber )
+                        .Add( "ouZone", "OU_TMSH" )
+                        .Add( "uuid", "1617355496bb588e353e80147eea5f45" )
+                        .Add( "requestTime", DateTime::Now().Format( "Y-M2-D2 H:m:s" ) )
+                        .Add( "dataType", "JSON" )
+                        .Add( "data", JSON::Object()
+                                      .Add( "pageIndex", "1" ) ).Build();
+    postrequestbodystring := postrequestbody.AsString();
+    crparameter.PostRequestBody( postrequestbodystring );
+    
+    info( "Init Lanes For Api" )
+    existparameter := select( owner, GlobalParameters, param, param.AttributeName() = "Lanes" );
+    if( not isnull( existparameter ) ){
+      existparameter.Delete();
+      }
+    lparameter := owner.GlobalParameters( relnew );
+    lparameter.AttributeName( "Lanes" );
+    lparameter.AttributeValue( "/otdService/https/GetLanesInfo" );
+    lparameter.Address( "api-uat-sgc.tianma.cn" );
+    lparameter.Port( "443" );
+    bodynumber := "3";
+    postrequestbody := JSON::Object()
+                        .Add( "serviceInterfaceCode", "ESBOTDH000" + bodynumber )
+                        .Add( "fromSystemCode", "OTDH000" + bodynumber )
+                        .Add( "toInterfaceCode", "QIDH000" + bodynumber )
+                        .Add( "ouZone", "OU_TMSH" )
+                        .Add( "uuid", "1617355496bb588e353e80147eea5f45" )
+                        .Add( "requestTime", DateTime::Now().Format( "Y-M2-D2 H:m:s" ) )
+                        .Add( "dataType", "JSON" )
+                        .Add( "data", JSON::Object()
+                                      .Add( "pageIndex", "1" ) ).Build();
+    postrequestbodystring := postrequestbody.AsString();
+    lparameter.PostRequestBody( postrequestbodystring );
+    
+    info( "Init LaneLegs For Api" )
+    existparameter := select( owner, GlobalParameters, param, param.AttributeName() = "LaneLegs" );
+    if( not isnull( existparameter ) ){
+      existparameter.Delete();
+      }
+    llparameter := owner.GlobalParameters( relnew );
+    llparameter.AttributeName( "LaneLegs" );
+    llparameter.AttributeValue( "/otdService/https/GetLaneLegsInfo" );
+    llparameter.Address( "api-uat-sgc.tianma.cn" );
+    llparameter.Port( "443" );
+    bodynumber := "4";
+    postrequestbody := JSON::Object()
+                        .Add( "serviceInterfaceCode", "ESBOTDH000" + bodynumber )
+                        .Add( "fromSystemCode", "OTDH000" + bodynumber )
+                        .Add( "toInterfaceCode", "QIDH000" + bodynumber )
+                        .Add( "ouZone", "OU_TMSH" )
+                        .Add( "uuid", "1617355496bb588e353e80147eea5f45" )
+                        .Add( "requestTime", DateTime::Now().Format( "Y-M2-D2 H:m:s" ) )
+                        .Add( "dataType", "JSON" )
+                        .Add( "data", JSON::Object()
+                                      .Add( "pageIndex", "1" ) ).Build();
+    postrequestbodystring := postrequestbody.AsString();
+    llparameter.PostRequestBody( postrequestbodystring );
+  *]
+}
diff --git a/_Main/BL/Type_GlobalParameters/_ROOT_Type_GlobalParameters.qbl b/_Main/BL/Type_GlobalParameters/_ROOT_Type_GlobalParameters.qbl
new file mode 100644
index 0000000..7496bd1
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/_ROOT_Type_GlobalParameters.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type GlobalParameters
+{
+  #keys: '5[412960.0.369930026][412960.0.369930024][0.0.0][412960.0.369930025][412960.0.369930027]'
+  BaseType: Object
+  Description: '鍏ㄥ眬鍙傛暟'
+  StructuredName: 'GlobalParameterss'
+}
diff --git a/_Main/BL/Type_Global_InventorySupplyCategory/Attribute_IsCommon.qbl b/_Main/BL/Type_Global_InventorySupplyCategory/Attribute_IsCommon.qbl
new file mode 100644
index 0000000..0ee01a8
--- /dev/null
+++ b/_Main/BL/Type_Global_InventorySupplyCategory/Attribute_IsCommon.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsCommon
+{
+  #keys: '3[414702.1.228025354][414702.1.228025353][414702.1.228025355]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_Global_InventorySupplyCategory/Attribute_ProductID.qbl b/_Main/BL/Type_Global_InventorySupplyCategory/Attribute_ProductID.qbl
new file mode 100644
index 0000000..8ed3bfe
--- /dev/null
+++ b/_Main/BL/Type_Global_InventorySupplyCategory/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.1.220612402][414702.1.220612401][414702.1.220612403]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_InventorySupplyCategory/Function_CalcIsCommon.qbl b/_Main/BL/Type_Global_InventorySupplyCategory/Function_CalcIsCommon.qbl
new file mode 100644
index 0000000..3f5b37c
--- /dev/null
+++ b/_Main/BL/Type_Global_InventorySupplyCategory/Function_CalcIsCommon.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcIsCommon
+{
+  TextBody:
+  [*
+    // hongjli Oct-24-2023 (created)
+    
+    value := guard( select( this, Global_MappingProduct_MP, tempGMPMP, true ).IsCommon(), false );
+    
+    this.IsCommon( value );
+  *]
+}
diff --git a/_Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_Create.qbl b/_Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_Create.qbl
new file mode 100644
index 0000000..9cf3238
--- /dev/null
+++ b/_Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_Create.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Create (
+  GlobalOTDTable globalOTDTable,
+  String dataInterfaceLogID
+)
+{
+  TextBody:
+  [*
+    globalOTDTable -> Global_InventorySupplyCategory::CreateStream()
+                   -> DataInterfaceLog::Success( dataInterfaceLogID )
+                   -> Exception()
+                   -> DataInterfaceLog::OnException( dataInterfaceLogID );
+  *]
+}
diff --git a/_Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_CreateStream.qbl b/_Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_CreateStream.qbl
new file mode 100644
index 0000000..a39e004
--- /dev/null
+++ b/_Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_CreateStream.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateStream (
+  GlobalOTDTable globalOTDTable
+) as stream[GlobalOTDTable]
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_InventorySupplyCategory( relflush );
+    
+    productIDs := selectuniquevalues( globalOTDTable, Global_MappingInventorySupply, 
+                                      tempGMIS, true, tempGMIS.ProductID() );
+    
+    traverse ( productIDs, Elements, id ) {
+      globalOTDTable.Global_InventorySupplyCategory( relnew, ProductID := id );
+    }
+    
+    return emit( globalOTDTable );
+  *]
+}
diff --git a/_Main/BL/Type_Global_InventorySupplyCategory/_ROOT_Type_Global_InventorySupplyCategory.qbl b/_Main/BL/Type_Global_InventorySupplyCategory/_ROOT_Type_Global_InventorySupplyCategory.qbl
new file mode 100644
index 0000000..9acdd56
--- /dev/null
+++ b/_Main/BL/Type_Global_InventorySupplyCategory/_ROOT_Type_Global_InventorySupplyCategory.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type Global_InventorySupplyCategory
+{
+  #keys: '5[414702.1.220612398][414702.1.220612396][0.0.0][414702.1.220612397][414702.1.220612399]'
+  BaseType: Object
+  StructuredName: 'Global_InventorySupplyCategorys'
+}
diff --git a/_Main/BL/Type_Global_MAPISPIPCategory/Attribute_Critical.qbl b/_Main/BL/Type_Global_MAPISPIPCategory/Attribute_Critical.qbl
new file mode 100644
index 0000000..d8e681a
--- /dev/null
+++ b/_Main/BL/Type_Global_MAPISPIPCategory/Attribute_Critical.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Critical
+{
+  #keys: '3[414882.0.72610025][414882.0.72610024][414882.0.72610026]'
+  Description: '鍏抽敭鐗╂枡'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_Global_MAPISPIPCategory/Attribute_IsCommon.qbl b/_Main/BL/Type_Global_MAPISPIPCategory/Attribute_IsCommon.qbl
new file mode 100644
index 0000000..037726d
--- /dev/null
+++ b/_Main/BL/Type_Global_MAPISPIPCategory/Attribute_IsCommon.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsCommon
+{
+  #keys: '3[414702.1.226768068][414702.1.226768067][414702.1.226768069]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_Global_MAPISPIPCategory/Attribute_KeyProduct.qbl b/_Main/BL/Type_Global_MAPISPIPCategory/Attribute_KeyProduct.qbl
new file mode 100644
index 0000000..6d30cca
--- /dev/null
+++ b/_Main/BL/Type_Global_MAPISPIPCategory/Attribute_KeyProduct.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute KeyProduct
+{
+  #keys: '3[414702.1.226768051][414702.1.226768050][414702.1.226768052]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_Global_MAPISPIPCategory/Attribute_ProductID.qbl b/_Main/BL/Type_Global_MAPISPIPCategory/Attribute_ProductID.qbl
new file mode 100644
index 0000000..694b52b
--- /dev/null
+++ b/_Main/BL/Type_Global_MAPISPIPCategory/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.1.226767995][414702.1.226767994][414702.1.226767996]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MAPISPIPCategory/Function_CalcCritical.qbl b/_Main/BL/Type_Global_MAPISPIPCategory/Function_CalcCritical.qbl
new file mode 100644
index 0000000..a6a025e
--- /dev/null
+++ b/_Main/BL/Type_Global_MAPISPIPCategory/Function_CalcCritical.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcCritical
+{
+  TextBody:
+  [*
+    // hongjli Oct-24-2023 (created)
+    
+    value := guard( select( this, Global_MappingProduct_MP, tempGMPMP, true ).Critical(), false );
+    
+    this.Critical(value);
+  *]
+}
diff --git a/_Main/BL/Type_Global_MAPISPIPCategory/Function_CalcIsCommon.qbl b/_Main/BL/Type_Global_MAPISPIPCategory/Function_CalcIsCommon.qbl
new file mode 100644
index 0000000..3f5b37c
--- /dev/null
+++ b/_Main/BL/Type_Global_MAPISPIPCategory/Function_CalcIsCommon.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcIsCommon
+{
+  TextBody:
+  [*
+    // hongjli Oct-24-2023 (created)
+    
+    value := guard( select( this, Global_MappingProduct_MP, tempGMPMP, true ).IsCommon(), false );
+    
+    this.IsCommon( value );
+  *]
+}
diff --git a/_Main/BL/Type_Global_MAPISPIPCategory/Function_CalcKeyProduct.qbl b/_Main/BL/Type_Global_MAPISPIPCategory/Function_CalcKeyProduct.qbl
new file mode 100644
index 0000000..1e84bcc
--- /dev/null
+++ b/_Main/BL/Type_Global_MAPISPIPCategory/Function_CalcKeyProduct.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcKeyProduct
+{
+  TextBody:
+  [*
+    // hongjli Oct-24-2023 (created)
+    
+    value := guard( select( this, Global_MappingProduct_MP, tempGMPMP, true ).KeyProduct(), false );
+    
+    this.KeyProduct( value );
+  *]
+}
diff --git a/_Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_Create.qbl b/_Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_Create.qbl
new file mode 100644
index 0000000..fcc0484
--- /dev/null
+++ b/_Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_Create.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Create (
+  GlobalOTDTable globalOTDTable,
+  String dataInterfaceLogID
+)
+{
+  TextBody:
+  [*
+    globalOTDTable -> Global_MAPISPIPCategory::CreateStream()
+                   -> DataInterfaceLog::Success( dataInterfaceLogID )
+                   -> Exception()
+                   -> DataInterfaceLog::OnException( dataInterfaceLogID );
+  *]
+}
diff --git a/_Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_CreateStream.qbl b/_Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_CreateStream.qbl
new file mode 100644
index 0000000..125e79a
--- /dev/null
+++ b/_Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_CreateStream.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateStream (
+  GlobalOTDTable globalOTDTable
+) as stream[GlobalOTDTable]
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MAPISPIPCategory( relflush );
+    
+    productIDs := selectuniquevalues( globalOTDTable, Global_MappingActualProductInStockingPointInPeriod, 
+                                      tempGMAPISPIP, true, tempGMAPISPIP.ProductID() );
+    
+    traverse ( productIDs, Elements, id ) {
+      globalOTDTable.Global_MAPISPIPCategory( relnew, ProductID := id );
+    }
+    
+    return emit( globalOTDTable );
+  *]
+}
diff --git a/_Main/BL/Type_Global_MAPISPIPCategory/_ROOT_Type_Global_MAPISPIPCategory.qbl b/_Main/BL/Type_Global_MAPISPIPCategory/_ROOT_Type_Global_MAPISPIPCategory.qbl
new file mode 100644
index 0000000..a8193a5
--- /dev/null
+++ b/_Main/BL/Type_Global_MAPISPIPCategory/_ROOT_Type_Global_MAPISPIPCategory.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type Global_MAPISPIPCategory
+{
+  #keys: '5[414702.1.226767991][414702.1.226767989][0.0.0][414702.1.226767990][414702.1.226767992]'
+  BaseType: Object
+  StructuredName: 'Global_MAPISPIPCategorys'
+}
diff --git a/_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/DeclarativeReferenceRelation_CalcGlobal_MAPISPIPCategory.qbl b/_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/DeclarativeReferenceRelation_CalcGlobal_MAPISPIPCategory.qbl
new file mode 100644
index 0000000..c5cc65f
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/DeclarativeReferenceRelation_CalcGlobal_MAPISPIPCategory.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+DeclarativeReferenceRelation CalcGlobal_MAPISPIPCategory
+{
+  #keys: '1[414702.1.226768045]'
+  Expression:
+  [*
+    targetGlobal_MAPISPIPCategory := select( this.GlobalOTDTable(), Global_MAPISPIPCategory, tempGMAPISPIPC,
+                                             tempGMAPISPIPC.ProductID() = this.ProductID() );
+    
+    return targetGlobal_MAPISPIPCategory;
+  *]
+  Relation: Global_MAPISPIPCategory
+}
diff --git a/_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeMacroPlanData.qbl
index 984a0eb..ad249d7 100644
--- a/_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -12,14 +12,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾瀹為檯搴撳瓨鏁版嵁",
+                                                                       BrokerName := "鍚屾瀹為檯搴撳瓨鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingActualPISPIPData( businessTypes, globalOTDTable, isKeyProduct, organcodelist );
+      macroPlan.DoASyncMappingActualPISPIPData( businessTypes, globalOTDTable, isKeyProduct, organcodelist );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_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_MappingConversionFactor/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeMacroPlanData.qbl
index 9467117..51aa067 100644
--- a/_Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,14 +9,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾鍗曚綅杞崲鏁版嵁",
+                                                                       BrokerName := "鍚屾鍗曚綅杞崲鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingBaseConversionFactorData(globalOTDTable);
+      macroPlan.DoASyncMappingBaseConversionFactorData(globalOTDTable);
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl
index e3b0e63..c8828b9 100644
--- a/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl
@@ -8,11 +8,11 @@
   [*
     globalOTDTable.Global_MappingCurrencyRate_MP( relflush );
     
-    bodynumber := "5";
-    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetCurrencyRatesInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "CurrencyRates" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     i := HTTPInterface::Create( address, port);
     i.URL( url );
     i.SSL( true );
diff --git a/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_SynchronizeMacroPlanData.qbl
index 5913ebe..e30d9ef 100644
--- a/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,29 +9,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾璐у竵姹囩巼鏁版嵁",
+                                                                       BrokerName := "鍚屾璐у竵姹囩巼鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      updates := construct( CurrencyRate_MPs );
-      traverse( globalOTDTable, Global_MappingCurrencyRate_MP, gcr, true )
-      {
-        a := CurrencyRate_MP::CreateCurrencyRate( gcr.CurrencyID(), gcr.Start(), gcr.Rate() );
-        updates.Add( a );
-        }
-      origindataset := selectset( macroPlan, Currency_MP.CurrencyRate_MP, cr, true );
-      obsoletes := origindataset.Difference( updates );
-      // delete obsoleted
-      difflength := obsoletes.Size();
-      for( j:=0; j<difflength; j++ )
-      {
-        obsolete := obsoletes.Element( j );
-        obsolete.Delete();
-        }
-      
+      CurrencyRate_MP::CreateFromMapping( globalOTDTable, macroPlan );
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
     } onerror {
diff --git a/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
index 2480088..4370c77 100644
--- a/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
@@ -8,11 +8,11 @@
   [*
     globalOTDTable.Global_MappingCurrency_MP( relflush );
     
-    bodynumber := "1";
-    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetCurrenciesInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "CurrencyInfo" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     i := HTTPInterface::Create( address, port);
     i.URL( url );
     i.SSL( true );
@@ -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_Global_MappingCurrency_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_SynchronizeMacroPlanData.qbl
index 38ac6bb..31f2109 100644
--- a/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,29 +9,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾璐у竵鏁版嵁",
+                                                                       BrokerName := "鍚屾璐у竵鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      updates := construct( Currency_MPs );
-      traverse( globalOTDTable, Global_MappingCurrency_MP, gc, true )
-      {
-        a := Currency_MP::CreateCurrency( macroPlan, gc.ID(), gc.Name(), " ", gc.IsBase() );
-        updates.Add( a );
-        }
-      origindataset := selectset( macroPlan, Currency_MP, c, true );
-      obsoletes := origindataset.Difference( updates );
-      // delete obsoleted
-      difflength := obsoletes.Size();
-      for( j:=0; j<difflength; j++ )
-      {
-        obsolete := obsoletes.Element( j );
-        obsolete.Delete();
-        }
-      
+      Currency_MP::CreateFromMapping( globalOTDTable, macroPlan );
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
     } onerror {
diff --git a/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_CreateCustomOrder.qbl b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_CreateCustomOrder.qbl
index f07437b..39682d8 100644
--- a/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_CreateCustomOrder.qbl
+++ b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_CreateCustomOrder.qbl
@@ -34,12 +34,17 @@
                                                     false
                                                    );
       targetCustomerOrder.BusinessType( gmco.BusinessType() );
-      targetCustomerOrder.OrderType( gmco.OrderType() );
+      // CustomerPolicy
       targetCustomerOrder.IsAvailable( gmco.IsAvailable() );
+      // IsLocked
+      // LastModify
+      // LastModifyTime
+      // OrderTag
+      targetCustomerOrder.OrderTime( gmco.OrderTime() );
+      targetCustomerOrder.OrderType( gmco.OrderType() );
       targetCustomerOrder.ProductGrade( gmco.ProductGrade() );
       targetCustomerOrder.SegmentPriority( gmco.SegmentPriority() );
       targetCustomerOrder.SheetProfitability( gmco.SheetProfitability() );
-      targetCustomerOrder.OrderTime( gmco.OrderTime() );
     }
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl
index 9a69cf5..7e2f51f 100644
--- a/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -3,20 +3,23 @@
 StaticMethod SynchronizeMacroPlanData (
   GlobalOTDTable globalOTDTable,
   MacroPlan macroPlan,
+  Strings businessTypes,
+  Strings organcodelist,
   String executionUser
 )
 {
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾璁㈠崟鏁版嵁",
+                                                                       BrokerName := "鍚屾璁㈠崟鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      Global_MappingCustomOrder::CreateCustomOrder( globalOTDTable, macroPlan );
+      macroPlan.DoASyncMappingCustomerOrderData( businessTypes, globalOTDTable, organcodelist );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingForecast/Attribute_ProductGrade.qbl b/_Main/BL/Type_Global_MappingForecast/Attribute_ProductGrade.qbl
new file mode 100644
index 0000000..8badfce
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingForecast/Attribute_ProductGrade.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductGrade
+{
+  #keys: '3[414996.0.21578321][414996.0.21578320][414996.0.21578322]'
+  Description: '浜у搧绛夌骇'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingForecast/Attribute_SegmentPriority.qbl b/_Main/BL/Type_Global_MappingForecast/Attribute_SegmentPriority.qbl
new file mode 100644
index 0000000..0a38886
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingForecast/Attribute_SegmentPriority.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SegmentPriority
+{
+  #keys: '3[414996.0.21578344][414996.0.21578343][414996.0.21578345]'
+  Description: '缁嗗垎甯傚満浼樺厛绾�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingForecast/Attribute_SheetProfitability.qbl b/_Main/BL/Type_Global_MappingForecast/Attribute_SheetProfitability.qbl
new file mode 100644
index 0000000..244baca
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingForecast/Attribute_SheetProfitability.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SheetProfitability
+{
+  #keys: '3[414996.0.21578334][414996.0.21578333][414996.0.21578335]'
+  Description: '澶у紶鐩堝埄'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeMacroPlanData.qbl
index ef72e85..cb14755 100644
--- a/_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -11,14 +11,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾棰勬祴鏁版嵁",
+                                                                       BrokerName := "鍚屾棰勬祴鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingForecastData( businessTypes, globalOTDTable, organcodelist );
+      macroPlan.DoASyncMappingForecastData( businessTypes, globalOTDTable, organcodelist );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingInventorySupply/DeclarativeReferenceRelation_CalcGlobal_InventorySupplyCategory.qbl b/_Main/BL/Type_Global_MappingInventorySupply/DeclarativeReferenceRelation_CalcGlobal_InventorySupplyCategory.qbl
new file mode 100644
index 0000000..3756789
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingInventorySupply/DeclarativeReferenceRelation_CalcGlobal_InventorySupplyCategory.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+DeclarativeReferenceRelation CalcGlobal_InventorySupplyCategory
+{
+  #keys: '1[414702.1.220612460]'
+  Expression:
+  [*
+    targetGlobal_InventorySupplyCategory := select( this.GlobalOTDTable(), Global_InventorySupplyCategory, tempGISC,
+                                                    tempGISC.ProductID() = this.ProductID() );
+    
+    return targetGlobal_InventorySupplyCategory;
+  *]
+  Relation: Global_InventorySupplyCategory
+}
diff --git a/_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeMacroPlanData.qbl
index 06d00c5..7de7b35 100644
--- a/_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -12,14 +12,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾鍦ㄩ�斿簱瀛樻暟鎹�",
+                                                                       BrokerName := "鍚屾鍦ㄩ�斿簱瀛樻暟鎹�",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingExternalSupplyData( businessTypes, isKeyProduct ,globalOTDTable, organcodelist );
+      macroPlan.DoASyncMappingExternalSupplyData( businessTypes, isKeyProduct, globalOTDTable, organcodelist );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl
index e46efd6..d1f365c 100644
--- a/_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl
@@ -8,11 +8,11 @@
   [*
     globalOTDTable.Global_MappingLane( relflush );
     
-    bodynumber := "3";
-    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetLanesInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "Lanes" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     i := HTTPInterface::Create( address, port);
     i.URL( url );
     i.SSL( true );
diff --git a/_Main/BL/Type_Global_MappingLane/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingLane/StaticMethod_SynchronizeMacroPlanData.qbl
index 60224b2..6cfc45e 100644
--- a/_Main/BL/Type_Global_MappingLane/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingLane/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,61 +9,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾杞﹂亾鏁版嵁",
+                                                                       BrokerName := "鍚屾杞﹂亾鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      updates := construct( Lanes );
-      traverse( globalOTDTable, Global_MappingLane, gl, true )
-      {
-        id := gl.ID();
-        unitid := gl.UnitID();
-        name := gl.Name();
-        userleadtime := gl.UserLeadTime();
-        processingtime := Duration::Zero();
-        
-        unitofmeasurename := "PCS";
-        currencyid := "CNY";
-        startdate := Date::Date( 1900, 1, 1 );
-        enddate := Date::Date( 9999, 12, 31 );
-        capacitytype := "Transport quantity";
-        if( userleadtime.Length() = 0 )
-        {
-          processingtime := Duration::Zero(); 
-          }
-        else
-        {
-          processingtime := Duration::Hours( [Number]userleadtime );
-          };
-        
-        unit := Unit::FindUnitTypeIndex( unitid );
-        if( isnull( unit)){
-          unit :=macroPlan.Unit( relnew, 
-                                 ID := unitid, 
-                                 Name := unitid, 
-                                 UnitOfMeasureName := unitofmeasurename, 
-                                 CurrencyID := currencyid, 
-                                 StartDate := startdate, 
-                                 EndDate := enddate, 
-                                 CapacityType := capacitytype );
-        }
-        
-        a := Lane::CreateLane( unit, id, name, processingtime);
-        updates.Add( a );
-        }
-      origindataset := selectset( macroPlan, Unit.Lane, l, true );
-      obsoletes := origindataset.Difference( updates );
-      // delete obsoleted
-      difflength := obsoletes.Size();
-      for( j:=0; j<difflength; j++ )
-      {
-        obsolete := obsoletes.Element( j );
-        obsolete.Delete();
-        }
-      
+      Lane::CreasteFromMapping( globalOTDTable, macroPlan );
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
     } onerror {
diff --git a/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl
index 7899f6e..ad5182b 100644
--- a/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl
@@ -8,11 +8,11 @@
   [*
     globalOTDTable.Global_MappingLaneLeg( relflush );
     
-    bodynumber := "4";
-    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetLaneLegsInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "LaneLegs" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     i := HTTPInterface::Create( address, port);
     i.URL( url );
     i.SSL( true );
diff --git a/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_SynchronizeMacroPlanData.qbl
index d1743ec..dacd193 100644
--- a/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,44 +9,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾杞﹂亾璺嚎鏁版嵁",
+                                                                       BrokerName := "鍚屾杞﹂亾璺嚎鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      updates := construct( LaneLegs );
-      traverse( globalOTDTable, Global_MappingLaneLeg, gll, true )
-      {
-        processingtime := Duration::Zero();
-        hasprocessingtime := true;
-        userleadtime := gll.UserLeadTime();
-        if( userleadtime.Length() = 0 )
-        {
-          hasprocessingtime := false;
-          processingtime := Duration::Zero(); 
-          }
-        else
-        {
-          hasprocessingtime := true;
-          processingtime := Duration::Hours( [Number]userleadtime );
-          };
-        
-        lane := Lane::FindLaneTypeIndex( gll.LaneID() );
-        a := LaneLeg::CreateLaneleg(lane, gll.LaneID(), gll.OriginStockingPointID(), gll.DestinationStockingPointID(), gll.Name(), hasprocessingtime, processingtime);
-        updates.Add( a );
-        }
-      origindataset := selectset( macroPlan, Unit.Lane.LaneLeg, ll, true );
-      obsoletes := origindataset.Difference( updates );
-      // delete obsoleted
-      difflength := obsoletes.Size();
-      for( j:=0; j<difflength; j++ )
-      {
-        obsolete := obsoletes.Element( j );
-        obsolete.Delete();
-        }
-      
+      LaneLeg::CreateFromMapping( globalOTDTable, macroPlan );
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
     } onerror {
diff --git a/_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeMacroPlanData.qbl
index 6a663dd..59d2808 100644
--- a/_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -11,14 +11,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾宸ヨ壓璺嚎鏁版嵁",
+                                                                       BrokerName := "鍚屾宸ヨ壓璺嚎鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingOperationData( businessTypes ,globalOTDTable, organcodelist );  
+      macroPlan.DoASyncMappingOperationData( businessTypes, globalOTDTable, organcodelist ); 
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeMacroPlanData.qbl
index 3198fd5..86e1e89 100644
--- a/_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -13,14 +13,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾BOM鏁版嵁",
+                                                                       BrokerName := "鍚屾BOM鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingOperationBOMData( businessTypes, isKeyProduct, createPurchaseSupplyMaterial, globalOTDTable, organcodelist );
+      macroPlan.DoASyncMappingOperationBOMData( businessTypes, isKeyProduct, createPurchaseSupplyMaterial, globalOTDTable, organcodelist );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingProductInLane/DeclarativeReferenceRelation_CalcGlobal_ProductInLineCategory.qbl b/_Main/BL/Type_Global_MappingProductInLane/DeclarativeReferenceRelation_CalcGlobal_ProductInLineCategory.qbl
new file mode 100644
index 0000000..e3c341b
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProductInLane/DeclarativeReferenceRelation_CalcGlobal_ProductInLineCategory.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+DeclarativeReferenceRelation CalcGlobal_ProductInLineCategory
+{
+  #keys: '1[414702.1.224718199]'
+  Expression:
+  [*
+    targeGlobal_ProductInLineCategory := select( this.GlobalOTDTable(), Global_ProductInLineCategory, tempGPILC,
+                                                 tempGPILC.ProductID() = this.ProductID() );
+    
+    return targeGlobal_ProductInLineCategory;
+  *]
+  Relation: Global_ProductInLineCategory
+}
diff --git a/_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeMacroPlanData.qbl
index 9e722b5..00eddb8 100644
--- a/_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -3,20 +3,22 @@
 StaticMethod SynchronizeMacroPlanData (
   GlobalOTDTable globalOTDTable,
   MacroPlan macroPlan,
+  Strings businessTypes,
   String executionUser
 )
 {
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾杩愯緭璺嚎浜у搧鏁版嵁",
+                                                                       BrokerName := "鍚屾杩愯緭璺嚎浜у搧鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingProductInLaneData(globalOTDTable);
+      macroPlan.DoASyncMappingProductInLaneData( globalOTDTable, businessTypes );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/Attribute_Critical.qbl b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_Critical.qbl
new file mode 100644
index 0000000..bdc96fd
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_Critical.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Critical
+{
+  #keys: '3[414882.0.72574612][414882.0.72574611][414882.0.72574613]'
+  Description: '鍏抽敭鐗╂枡'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/Attribute_KeyProduct.qbl b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_KeyProduct.qbl
index 431f730..3824133 100644
--- a/_Main/BL/Type_Global_MappingProduct_MP/Attribute_KeyProduct.qbl
+++ b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_KeyProduct.qbl
@@ -3,5 +3,10 @@
 Attribute KeyProduct
 {
   #keys: '3[414702.0.247711010][414702.0.247711009][414702.0.247711011]'
+  Description:
+  [*
+    宸插純鐢�
+    鍏抽敭鐗╂枡娌℃湁鏁版嵁鏉ユ簮锛屼互鍚庝粠鍏朵粬灞炴�ц绠楀緱鍒帮紝鏀逛负Critical
+  *]
   ValueType: Boolean
 }
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_InventorySupplyCategory.qbl b/_Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_InventorySupplyCategory.qbl
new file mode 100644
index 0000000..3abbab2
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_InventorySupplyCategory.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+DeclarativeReferenceRelation CalcGlobal_InventorySupplyCategory
+{
+  #keys: '1[414702.1.220612452]'
+  Expression:
+  [*
+    targetGlobal_InventorySupplyCategory := select( this.GlobalOTDTable(), Global_InventorySupplyCategory, tempGISC,
+                                                   tempGISC.ProductID() = this.ID() );
+    
+    return targetGlobal_InventorySupplyCategory;
+  *]
+  Relation: Global_InventorySupplyCategory
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_MAPISPIPCategory.qbl b/_Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_MAPISPIPCategory.qbl
new file mode 100644
index 0000000..163005b
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_MAPISPIPCategory.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+DeclarativeReferenceRelation CalcGlobal_MAPISPIPCategory
+{
+  #keys: '1[414702.1.220556366]'
+  Expression:
+  [*
+    targetGlobal_MAPISPIPCategory := select( this.GlobalOTDTable(), Global_MAPISPIPCategory, tempGMAPISPIPC,
+                                             tempGMAPISPIPC.ProductID() = this.ID() );
+    
+    return targetGlobal_MAPISPIPCategory;
+  *]
+  Relation: Global_MAPISPIPCategory
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_ProductCategory.qbl b/_Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_ProductCategory.qbl
new file mode 100644
index 0000000..435f27d
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_ProductCategory.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+DeclarativeReferenceRelation CalcGlobal_ProductCategory
+{
+  #keys: '1[414702.1.223351035]'
+  Expression:
+  [*
+    targetGlobal_ProductCategory := select( this.GlobalOTDTable(), Global_ProductCategory, tempGPC,
+                                            tempGPC.BusinessTypeName() = this.BusinessType() );
+    
+    return targetGlobal_ProductCategory;
+  *]
+  Relation: Global_ProductCategory
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_ProductInLineCategory.qbl b/_Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_ProductInLineCategory.qbl
new file mode 100644
index 0000000..1b1d556
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_ProductInLineCategory.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+DeclarativeReferenceRelation CalcGlobal_ProductInLineCategory
+{
+  #keys: '1[414702.1.220556292]'
+  Expression:
+  [*
+    targetGlobal_ProductInLineCategory := select( this.GlobalOTDTable(), Global_ProductInLineCategory, tempGPILC,
+                                                  tempGPILC.ProductID() = this.ID() );
+    
+    return targetGlobal_ProductInLineCategory;
+  *]
+  Relation: Global_ProductInLineCategory
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_StockingPointCostCategory.qbl b/_Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_StockingPointCostCategory.qbl
new file mode 100644
index 0000000..de4cbd5
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/DeclarativeReferenceRelation_CalcGlobal_StockingPointCostCategory.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+DeclarativeReferenceRelation CalcGlobal_StockingPointCostCategory
+{
+  #keys: '1[414702.1.224718256]'
+  Expression:
+  [*
+    targetGlobal_StockingPointCostCategory := select( this.GlobalOTDTable(), Global_StockingPointCostCategory, tempGSPCC,
+                                                      tempGSPCC.ProductID() = this.ID() );
+    
+    return targetGlobal_StockingPointCostCategory;
+  *]
+  Relation: Global_StockingPointCostCategory
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/Function_CalcCritical.qbl b/_Main/BL/Type_Global_MappingProduct_MP/Function_CalcCritical.qbl
new file mode 100644
index 0000000..be05486
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/Function_CalcCritical.qbl
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcCritical
+{
+  TextBody:
+  [*
+    // renhao Oct-30-2023 (created)
+    value := this.ProductMajorType()="鎴愬搧" or this.ProductMajorType()="鍗婃垚鍝�";
+    
+    this.Critical(value);
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeMacroPlanData.qbl
index 8c10d2f..47d8f21 100644
--- a/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -11,14 +11,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾浜у搧鏁版嵁",
+                                                                       BrokerName := "鍚屾浜у搧鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingProductData( businessTypes, globalOTDTable,isKeyProduct );
+      macroPlan.DoASyncMappingProductData( businessTypes, globalOTDTable, isKeyProduct );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeMacroPlanData.qbl
index fc881d2..636f6a8 100644
--- a/_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -10,14 +10,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾閿�鍞儴闂ㄦ暟鎹�",
+                                                                       BrokerName := "鍚屾閿�鍞儴闂ㄦ暟鎹�",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingSalesSegmentData( businessTypes, globalOTDTable );
+      macroPlan.DoASyncMappingSalesSegmentData( businessTypes, globalOTDTable );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingStockingPointCost/DeclarativeReferenceRelation_CalcGlobal_StockingPointCostCategory.qbl b/_Main/BL/Type_Global_MappingStockingPointCost/DeclarativeReferenceRelation_CalcGlobal_StockingPointCostCategory.qbl
new file mode 100644
index 0000000..09e4ac2
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingStockingPointCost/DeclarativeReferenceRelation_CalcGlobal_StockingPointCostCategory.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+DeclarativeReferenceRelation CalcGlobal_StockingPointCostCategory
+{
+  #keys: '1[414702.1.224718261]'
+  Expression:
+  [*
+    targetGlobal_StockingPointCostCategory := select( this.GlobalOTDTable(), Global_StockingPointCostCategory, tempGSPCC,
+                                                      tempGSPCC.ProductID() = this.ProductID() );
+    
+    return targetGlobal_StockingPointCostCategory;
+  *]
+  Relation: Global_StockingPointCostCategory
+}
diff --git a/_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeMacroPlanData.qbl
index df0cc31..adfe937 100644
--- a/_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -3,20 +3,22 @@
 StaticMethod SynchronizeMacroPlanData (
   GlobalOTDTable globalOTDTable,
   MacroPlan macroPlan,
+  Strings businessTypes,
   String executionUser
 )
 {
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾搴撳瓨鎴愭湰鏁版嵁",
+                                                                       BrokerName := "鍚屾搴撳瓨鎴愭湰鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingInventoryValueAndCostData(globalOTDTable);
+      macroPlan.DoASyncMappingInventoryValueAndCostData( globalOTDTable, businessTypes );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl
index 4901d0a..749075f 100644
--- a/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl
@@ -8,11 +8,11 @@
   [*
     globalOTDTable.Global_MappingStockingPoint_MP( relflush );
     
-    bodynumber := "2";
-    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetStockingPointsInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "StockingPoint" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     i := HTTPInterface::Create( address, port);
     i.URL( url );
     i.SSL( true );
diff --git a/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_SynchronizeMacroPlanData.qbl
index 7db4814..a388711 100644
--- a/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,29 +9,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾搴撳瓨鐐规暟鎹�",
+                                                                       BrokerName := "鍚屾搴撳瓨鐐规暟鎹�",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      updates := construct( StockingPoint_MPs );
-      traverse( globalOTDTable, Global_MappingStockingPoint_MP, sp, true )
-      {
-        a := StockingPoint_MP::CreateStockingpoint( macroPlan, sp.ID(), sp.UnitID(), sp.Name() );
-        updates.Add( a );
-        }
-      origindataset := selectset( macroPlan, StockingPoint_MP, sp, true );
-      obsoletes := origindataset.Difference( updates );
-      // delete obsoleted
-      difflength := obsoletes.Size();
-      for( j:=0; j<difflength; j++ )
-      {
-        obsolete := obsoletes.Element( j );
-        obsolete.Delete();
-        }
-      
+      StockingPoint_MP::CreateFromMapping( globalOTDTable, macroPlan );
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
     } onerror {
diff --git a/_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeMacroPlanData.qbl
index 8f08b84..2b7b644 100644
--- a/_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -11,14 +11,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾鍒堕�犳垚鏈暟鎹�",
+                                                                       BrokerName := "鍚屾鍒堕�犳垚鏈暟鎹�",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingOperationCostData( globalOTDTable, businessTypes, organcodelist );
+      macroPlan.DoASyncMappingOperationCostData( globalOTDTable, businessTypes, organcodelist );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl
index d31811e..30bfa48 100644
--- a/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -2,30 +2,30 @@
 #parent: #root
 StaticMethod SynchronizeMacroPlanData (
   GlobalOTDTable globalOTDTable,
-  MacroPlan macroPlan
+  MacroPlan macroPlan,
+  String executionUser
 )
 {
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name := "鍚屾鍗曚綅鏁版嵁",
-                                                                       IsSuccess := true
+                                                                       BrokerName := "鍚屾鍗曚綅鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
+                                                                       IsSuccess   := true,
+                                                                       ExecuteUser := executionUser
                                                                       );
                                             
     try {
-      traverse ( globalOTDTable, Global_MappingUnitOfMeasure_MP, gmuommp ) {
-        unitOfMeasure_MP := select( macroPlan, UnitOfMeasure_MP, tempUOMMP, tempUOMMP.Name() = gmuommp.Name() );
-        if ( isnull( unitOfMeasure_MP ) ) {  
-          unitOfMeasure_MP := UnitOfMeasure_MP::Create( macroPlan, gmuommp.Name(), false, false );
-        }
-        if ( gmuommp.IsDefault() ) {
-          unitOfMeasure_MP.SetAsDefault();
-        }
-      }
+      macroPlan.DoASyncMappingUnitOfMeasureData(globalOTDTable);
+      
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
     } onerror {
       global_BrokerExecuteLog.IsSuccess( false );
       global_BrokerExecuteLog.ErrorNo( e.ErrorNr() );
       global_BrokerExecuteLog.ErrorMessage( e.GeneralInformation() );
+      global_BrokerExecuteLog.ErrorDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
     }
   *]
 }
diff --git a/_Main/BL/Type_Global_ProductCategory/Attribute_BusinessTypeName.qbl b/_Main/BL/Type_Global_ProductCategory/Attribute_BusinessTypeName.qbl
new file mode 100644
index 0000000..e7db0cb
--- /dev/null
+++ b/_Main/BL/Type_Global_ProductCategory/Attribute_BusinessTypeName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessTypeName
+{
+  #keys: '3[414702.1.223351026][414702.1.223351025][414702.1.223351027]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_ProductCategory/StaticMethod_Create.qbl b/_Main/BL/Type_Global_ProductCategory/StaticMethod_Create.qbl
new file mode 100644
index 0000000..e60b885
--- /dev/null
+++ b/_Main/BL/Type_Global_ProductCategory/StaticMethod_Create.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Create (
+  GlobalOTDTable globalOTDTable,
+  String dataInterfaceLogID
+)
+{
+  TextBody:
+  [*
+    globalOTDTable -> Global_ProductCategory::CreateStream()
+                   -> DataInterfaceLog::Success( dataInterfaceLogID )
+                   -> Exception()
+                   -> DataInterfaceLog::OnException( dataInterfaceLogID );
+  *]
+}
diff --git a/_Main/BL/Type_Global_ProductCategory/StaticMethod_CreateStream.qbl b/_Main/BL/Type_Global_ProductCategory/StaticMethod_CreateStream.qbl
new file mode 100644
index 0000000..6613fb9
--- /dev/null
+++ b/_Main/BL/Type_Global_ProductCategory/StaticMethod_CreateStream.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateStream (
+  GlobalOTDTable globalOTDTable
+) as stream[GlobalOTDTable]
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_ProductCategory( relflush );
+    
+    businessTypes := selectuniquevalues( globalOTDTable, Global_MappingProduct_MP, tempGMPMP, true, tempGMPMP.BusinessType() );
+    
+    traverse ( businessTypes, Elements, bt ) {
+      globalOTDTable.Global_ProductCategory( relnew, BusinessTypeName := bt );
+    }
+    
+    return emit( globalOTDTable );
+  *]
+}
diff --git a/_Main/BL/Type_Global_ProductCategory/_ROOT_Type_Global_ProductCategory.qbl b/_Main/BL/Type_Global_ProductCategory/_ROOT_Type_Global_ProductCategory.qbl
new file mode 100644
index 0000000..1e27352
--- /dev/null
+++ b/_Main/BL/Type_Global_ProductCategory/_ROOT_Type_Global_ProductCategory.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type Global_ProductCategory
+{
+  #keys: '5[414702.1.222746430][414702.1.222746428][0.0.0][414702.1.222746429][414702.1.222746431]'
+  BaseType: Object
+  StructuredName: 'Global_ProductCategorys'
+}
diff --git a/_Main/BL/Type_Global_ProductInLineCategory/Attribute_ProductID.qbl b/_Main/BL/Type_Global_ProductInLineCategory/Attribute_ProductID.qbl
new file mode 100644
index 0000000..4611fa8
--- /dev/null
+++ b/_Main/BL/Type_Global_ProductInLineCategory/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.1.220556241][414702.1.220556240][414702.1.220556242]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_ProductInLineCategory/StaticMethod_Create.qbl b/_Main/BL/Type_Global_ProductInLineCategory/StaticMethod_Create.qbl
new file mode 100644
index 0000000..a3021a4
--- /dev/null
+++ b/_Main/BL/Type_Global_ProductInLineCategory/StaticMethod_Create.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Create (
+  GlobalOTDTable globalOTDTable,
+  String dataInterfaceLogID
+)
+{
+  TextBody:
+  [*
+    globalOTDTable -> Global_ProductInLineCategory::CreateStream()
+                   -> DataInterfaceLog::Success( dataInterfaceLogID )
+                   -> Exception()
+                   -> DataInterfaceLog::OnException( dataInterfaceLogID );
+  *]
+}
diff --git a/_Main/BL/Type_Global_ProductInLineCategory/StaticMethod_CreateStream.qbl b/_Main/BL/Type_Global_ProductInLineCategory/StaticMethod_CreateStream.qbl
new file mode 100644
index 0000000..2d15e8f
--- /dev/null
+++ b/_Main/BL/Type_Global_ProductInLineCategory/StaticMethod_CreateStream.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateStream (
+  GlobalOTDTable globalOTDTable
+) as stream[GlobalOTDTable]
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_ProductInLineCategory( relflush );
+    
+    productIDs := selectuniquevalues( globalOTDTable, Global_MappingProductInLane, tempGMPIL, true, tempGMPIL.ProductID() );
+    
+    traverse ( productIDs, Elements, id ) {
+      globalOTDTable.Global_ProductInLineCategory( relnew, ProductID := id );
+    }
+    
+    return emit( globalOTDTable );
+  *]
+}
diff --git a/_Main/BL/Type_Global_ProductInLineCategory/_ROOT_Type_Global_ProductInLineCategory.qbl b/_Main/BL/Type_Global_ProductInLineCategory/_ROOT_Type_Global_ProductInLineCategory.qbl
new file mode 100644
index 0000000..0f700ee
--- /dev/null
+++ b/_Main/BL/Type_Global_ProductInLineCategory/_ROOT_Type_Global_ProductInLineCategory.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type Global_ProductInLineCategory
+{
+  #keys: '5[414702.1.220556230][414702.1.220556228][0.0.0][414702.1.220556229][414702.1.220556231]'
+  BaseType: Object
+  StructuredName: 'Global_ProductInLineCategorys'
+}
diff --git a/_Main/BL/Type_Global_StockingPointCostCategory/Attribute_ProductID.qbl b/_Main/BL/Type_Global_StockingPointCostCategory/Attribute_ProductID.qbl
new file mode 100644
index 0000000..27e2084
--- /dev/null
+++ b/_Main/BL/Type_Global_StockingPointCostCategory/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.1.224718205][414702.1.224718204][414702.1.224718206]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_Create.qbl b/_Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_Create.qbl
new file mode 100644
index 0000000..ceb2861
--- /dev/null
+++ b/_Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_Create.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Create (
+  GlobalOTDTable globalOTDTable,
+  String dataInterfaceLogID
+)
+{
+  TextBody:
+  [*
+    globalOTDTable -> Global_StockingPointCostCategory::CreateStream()
+                   -> DataInterfaceLog::Success( dataInterfaceLogID )
+                   -> Exception()
+                   -> DataInterfaceLog::OnException( dataInterfaceLogID );
+  *]
+}
diff --git a/_Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_CreateStream.qbl b/_Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_CreateStream.qbl
new file mode 100644
index 0000000..3946f6f
--- /dev/null
+++ b/_Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_CreateStream.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateStream (
+  GlobalOTDTable globalOTDTable
+) as stream[GlobalOTDTable]
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_StockingPointCostCategory( relflush );
+    
+    productIDs := selectuniquevalues( globalOTDTable, Global_MappingStockingPointCost, tempGMSPC, true, tempGMSPC.ProductID() );
+    
+    traverse ( productIDs, Elements, id ) {
+      globalOTDTable.Global_StockingPointCostCategory( relnew, ProductID := id );
+    }
+    
+    return emit( globalOTDTable );
+  *]
+}
diff --git a/_Main/BL/Type_Global_StockingPointCostCategory/_ROOT_Type_Global_StockingPointCostCategory.qbl b/_Main/BL/Type_Global_StockingPointCostCategory/_ROOT_Type_Global_StockingPointCostCategory.qbl
new file mode 100644
index 0000000..eec0dca
--- /dev/null
+++ b/_Main/BL/Type_Global_StockingPointCostCategory/_ROOT_Type_Global_StockingPointCostCategory.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type Global_StockingPointCostCategory
+{
+  #keys: '5[414702.1.220556235][414702.1.220556233][0.0.0][414702.1.220556234][414702.1.220556236]'
+  BaseType: Object
+  StructuredName: 'Global_StockingPointCostCategorys'
+}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_BusinessType.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_BusinessType.qbl
deleted file mode 100644
index c91ccf2..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_BusinessType.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute BusinessType
-{
-  #keys: '3[414382.0.385610070][414382.0.385610069][414382.0.385610071]'
-  Description: '浜嬩笟閮�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_CurrencyID.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_CurrencyID.qbl
deleted file mode 100644
index 6e3ea82..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_CurrencyID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CurrencyID
-{
-  #keys: '3[414382.0.385610058][414382.0.385610057][414382.0.385610059]'
-  Description: '璐у竵'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_Customer.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_Customer.qbl
deleted file mode 100644
index de33204..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_Customer.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Customer
-{
-  #keys: '3[414382.0.385610043][414382.0.385610042][414382.0.385610044]'
-  Description: '瀹㈡埛鍚嶇О'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_CustomerID.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_CustomerID.qbl
deleted file mode 100644
index 5236115..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_CustomerID.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CustomerID
-{
-  #keys: '3[414382.0.385610052][414382.0.385610051][414382.0.385610053]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_ID.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_ID.qbl
deleted file mode 100644
index ab18ec7..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_ID.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ID
-{
-  #keys: '3[414382.0.385610061][414382.0.385610060][414382.0.385610062]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_IsAvailable.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_IsAvailable.qbl
deleted file mode 100644
index 7b79b6c..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_IsAvailable.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute IsAvailable
-{
-  #keys: '3[414382.0.385610046][414382.0.385610045][414382.0.385610047]'
-  Description: '璁㈠崟鏄惁鍙備笌璁″垝'
-  ValueType: Boolean
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_OrderDate.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_OrderDate.qbl
deleted file mode 100644
index c8eca1a..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_OrderDate.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrderDate
-{
-  #keys: '3[414382.0.385610082][414382.0.385610081][414382.0.385610083]'
-  ValueType: Date
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_OrderID.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_OrderID.qbl
deleted file mode 100644
index 993c964..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_OrderID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrderID
-{
-  #keys: '3[414382.0.385610049][414382.0.385610048][414382.0.385610050]'
-  Description: '璁㈠崟鍙�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_OrderLineID.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_OrderLineID.qbl
deleted file mode 100644
index 33b2a30..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_OrderLineID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrderLineID
-{
-  #keys: '3[414382.0.385610040][414382.0.385610039][414382.0.385610041]'
-  Description: '璁㈠崟琛屽彿'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_OrderType.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_OrderType.qbl
deleted file mode 100644
index f539ba0..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_OrderType.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrderType
-{
-  #keys: '3[414382.0.385610034][414382.0.385610033][414382.0.385610035]'
-  Description: '璁㈠崟绫诲瀷'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_Price.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_Price.qbl
deleted file mode 100644
index 50d7084..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_Price.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Price
-{
-  #keys: '3[414382.0.385610055][414382.0.385610054][414382.0.385610056]'
-  Description: '鍗曚环'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_PriorityName.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_PriorityName.qbl
deleted file mode 100644
index 38db16d..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_PriorityName.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute PriorityName
-{
-  #keys: '3[414382.0.385610079][414382.0.385610078][414382.0.385610080]'
-  Description: '浼樺厛绾�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_ProductID.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_ProductID.qbl
deleted file mode 100644
index 018fc15..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_ProductID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductID
-{
-  #keys: '3[414382.0.385610067][414382.0.385610066][414382.0.385610068]'
-  Description: '浜у搧缂栫爜'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_Quantity.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_Quantity.qbl
deleted file mode 100644
index 06b7d7d..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_Quantity.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Quantity
-{
-  #keys: '3[414382.0.385610076][414382.0.385610075][414382.0.385610077]'
-  Description: '鏁伴噺'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_SalesAmount.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_SalesAmount.qbl
deleted file mode 100644
index b5fe9ed..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_SalesAmount.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SalesAmount
-{
-  #keys: '3[414382.0.394810026][414382.0.394810025][414382.0.394810027]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_SalesSegmentName.qbl
deleted file mode 100644
index 5c59143..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_SalesSegmentName.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SalesSegmentName
-{
-  #keys: '3[414382.0.385610064][414382.0.385610063][414382.0.385610065]'
-  Description: '閿�鍞儴闂ㄥ悕绉�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_StockPointID.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_StockPointID.qbl
deleted file mode 100644
index ae7cbb1..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_StockPointID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute StockPointID
-{
-  #keys: '3[414382.0.385610073][414382.0.385610072][414382.0.385610074]'
-  Description: '搴撳瓨鐐瑰敮涓�鏍囪瘑'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_UnitOfMeasureName.qbl
deleted file mode 100644
index d6b4ecf..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_UnitOfMeasureName.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute UnitOfMeasureName
-{
-  #keys: '3[414382.0.385610037][414382.0.385610036][414382.0.385610038]'
-  Description: '鍗曚綅'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Attribute_VerNo.qbl b/_Main/BL/Type_HistoricalSalesOrder/Attribute_VerNo.qbl
deleted file mode 100644
index fdb397d..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Attribute_VerNo.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute VerNo
-{
-  #keys: '3[414382.0.385610106][414382.0.385610105][414382.0.385610107]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_CurrencyID.qbl b/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_CurrencyID.qbl
deleted file mode 100644
index cae9679..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_CurrencyID.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: CurrencyID
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_Customer.qbl b/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_Customer.qbl
deleted file mode 100644
index e02a336..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_Customer.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: Customer
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_CustomerID.qbl b/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_CustomerID.qbl
deleted file mode 100644
index 66ae438..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_CustomerID.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: CustomerID
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_IsAvailable.qbl b/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_IsAvailable.qbl
deleted file mode 100644
index efaa00d..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_IsAvailable.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  ISOValue: 'true'
-  TargetAttribute: IsAvailable
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_OrderID.qbl b/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_OrderID.qbl
deleted file mode 100644
index 05c5cf1..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_OrderID.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: OrderID
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_OrderLineID.qbl b/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_OrderLineID.qbl
deleted file mode 100644
index 01ff2bf..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_OrderLineID.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: OrderLineID
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_PriorityName.qbl b/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_PriorityName.qbl
deleted file mode 100644
index 59ad087..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_PriorityName.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: PriorityName
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_ProductID.qbl b/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_ProductID.qbl
deleted file mode 100644
index 98649b2..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_ProductID.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: ProductID
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_SalesSegmentName.qbl b/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_SalesSegmentName.qbl
deleted file mode 100644
index 521966d..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_SalesSegmentName.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: SalesSegmentName
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_StockPointID.qbl b/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_StockPointID.qbl
deleted file mode 100644
index 7c0c612..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_StockPointID.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: StockPointID
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/Method_GetProductIdString.qbl b/_Main/BL/Type_HistoricalSalesOrder/Method_GetProductIdString.qbl
deleted file mode 100644
index 25fd342..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/Method_GetProductIdString.qbl
+++ /dev/null
@@ -1,26 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method GetProductIdString (
-  MacroPlan owner,
-  String businessType
-) as String
-{
-  TextBody:
-  [*
-    // NBoTk Sep-13-2023 (created)
-    
-    productIDs := selectuniquevalues( owner,MappingProduct,product,
-                                      product.BusinessType() = businessType,
-                                      product.ID()
-                                      );
-    
-    value := "TC067FYMM05-00;B26700040";
-    
-    if( not isnull( productIDs) )
-    { 
-         value := productIDs.Concatenate( ";");
-    }
-    
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetCustomerID.qbl b/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetCustomerID.qbl
deleted file mode 100644
index d7d5927..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetCustomerID.qbl
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetCustomerID (
-  MacroPlan owner,
-  String customer
-) as String
-{
-  TextBody:
-  [*
-    // NBoTk Sep-13-2023 (created)
-    
-    
-    cunstomer :=  select( owner,MappingCustomerOrder,order,
-                         order.Customer() = customer
-                         );
-    
-    return cunstomer.CustomerID();
-  *]
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetCustomerString.qbl b/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetCustomerString.qbl
deleted file mode 100644
index c039119..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetCustomerString.qbl
+++ /dev/null
@@ -1,28 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetCustomerString (
-  MacroPlan owner,
-  String businessType
-) as String
-{
-  TextBody:
-  [*
-    // NBoTk Sep-13-2023 (created)
-    
-    customers := selectuniquevalues( owner,MappingCustomerOrder,order,
-                                      order.BusinessType() = businessType,
-                                      order.Customer()
-                                      );
-    
-    
-    
-    value := customers.Concatenate( ";");
-    
-    if( value = "" )
-    {
-      value := "灏忕背閫氳鎶�鏈湁闄愬叕鍙�";
-    }
-    
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetHistoricalSalesOrders.qbl b/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetHistoricalSalesOrders.qbl
deleted file mode 100644
index 2a8fe90..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetHistoricalSalesOrders.qbl
+++ /dev/null
@@ -1,64 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetHistoricalSalesOrders (
-  String businessType,
-  String customer,
-  String sheetProfitability,
-  String productID,
-  Date end,
-  MacroPlan owner,
-  Date start
-) as owning HistoricalSalesOrders
-{
-  Description: 'Get historical sales orders of deleiveryCells'
-  TextBody:
-  [*
-    // NBoTk Sep-11-2023 (created)
-    
-    // filter businessType start end 
-    // start default 3 years, end is today
-    value := selectset( owner,HistoricalSalesOrder,order,
-                        true,
-                        order.BusinessType() = businessType
-                        and order.OrderDate() >= start
-                        and order.OrderDate() <= end
-                        );
-    
-    // filter customer
-    if(customer <> '' )
-    {
-        value := selectset( value,Elements,orer,
-                            true,
-                            orer.Customer() = customer
-                            );
-    }
-    
-    // filter sheetProfitability
-    //if(sheetProfitability <> '' )
-    //{
-    //    value := selectset( value,Elements,orer,
-    //                        true,
-    //                        orer.S() = sheetProfitability
-    //                        );
-    //}
-    
-    // filter productID
-    if(productID <> '' )
-    {
-        value := selectset( value,Elements,orer,
-                            true,
-                            orer.ProductID() = productID
-                            );
-    }
-    
-    // order by 鐩堝埄姘村钩 闇�姹傛椂闂�
-    
-    value := selectsortedset( value,Elements,order,
-                              true,
-                              //order.SheetProfitability(),
-                              order.OrderDate()
-                              );
-    
-    return &value;
-  *]
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetProductIdString.qbl b/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetProductIdString.qbl
deleted file mode 100644
index faa36c9..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetProductIdString.qbl
+++ /dev/null
@@ -1,27 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetProductIdString (
-  MacroPlan owner,
-  String businessType
-) as String
-{
-  TextBody:
-  [*
-    // NBoTk Sep-13-2023 (created)
-    
-    productIDs := selectuniquevalues( owner,MappingProduct,product,
-                                      product.BusinessType() = businessType,
-                                      product.ID()
-                                      );
-    
-    value := productIDs.Concatenate( ";");
-    
-    
-    if( value = "" )
-    {
-      value := "TC067FYMM05-00;B26700040";
-    }
-    
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetSalesSegmentString.qbl b/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetSalesSegmentString.qbl
deleted file mode 100644
index e76aaec..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetSalesSegmentString.qbl
+++ /dev/null
@@ -1,28 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSalesSegmentString (
-  MacroPlan owner,
-  String businessType
-) as String
-{
-  TextBody:
-  [*
-    // NBoTk Sep-13-2023 (created)
-    
-    salesSegments := selectuniquevalues( owner,MappingSalesSegment,salesSegment,
-                                        salesSegment.BusinessType() = businessType,
-                                        salesSegment.ParentName()
-                                        );
-    
-    
-    
-    value := salesSegments.Concatenate( ";");
-    
-    
-    if( value = "" )
-    {
-      value := "娑堣垂鍝佽惀閿�涓績;閿�鍞竴绉�";
-    }
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetStockingPointString.qbl b/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetStockingPointString.qbl
deleted file mode 100644
index d7ce897..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetStockingPointString.qbl
+++ /dev/null
@@ -1,25 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetStockingPointString (
-  MacroPlan owner,
-  String businessType
-) as String
-{
-  TextBody:
-  [*
-    // NBoTk Sep-13-2023 (created)
-    
-    stockingPointIDs := selectuniquevalues( owner,StockingPoint_MP,stock,
-                                      stock.ID()
-                                      );
-    
-     value := stockingPointIDs.Concatenate( ";");
-    
-    if( value = "" )
-    {
-         value := "I13_P;I13_SA";
-    }
-    
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetUnitOfMeasuresString.qbl b/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetUnitOfMeasuresString.qbl
deleted file mode 100644
index 58570ab..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/StaticMethod_GetUnitOfMeasuresString.qbl
+++ /dev/null
@@ -1,26 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetUnitOfMeasuresString (
-  MacroPlan owner,
-  String businessType
-) as String
-{
-  TextBody:
-  [*
-    // NBoTk Sep-13-2023 (created)
-    
-    units := selectuniquevalues( owner,MappingUnitOfMeasure,unit,
-                                      unit.Name()
-                                      );
-    
-    
-    value := units.Concatenate( ";");
-    
-    if( value = "" )
-    {
-       value := "PCS;MPC";
-    }
-    
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/_ROOT_Type_HistoricalSalesOrder.qbl b/_Main/BL/Type_HistoricalSalesOrder/_ROOT_Type_HistoricalSalesOrder.qbl
deleted file mode 100644
index 3e9f0af..0000000
--- a/_Main/BL/Type_HistoricalSalesOrder/_ROOT_Type_HistoricalSalesOrder.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type HistoricalSalesOrder
-{
-  #keys: '5[414382.0.385610030][414382.0.385610028][0.0.0][414382.0.385610029][414382.0.385610031]'
-  BaseType: Object
-  StructuredName: 'HistoricalSalesOrders'
-}
diff --git a/_Main/BL/Type_InventoryValueAndCost/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_CreateOrUpdate.qbl
index 4116cce..9dec2cd 100644
--- a/_Main/BL/Type_InventoryValueAndCost/StaticMethod_CreateOrUpdate.qbl
+++ b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_CreateOrUpdate.qbl
@@ -32,16 +32,16 @@
     //if( isnull( account ) ) {
     //    error( "account not found" );  
     //}
-    result := InventoryValueAndCost::FindById( macroPlan, stockingPointId,productId,start,id );
+    result := InventoryValueAndCost::FindById( macroPlan, stockingPointId, productId, start, id );
     if( not isnull( product) and not isnull( stockingPoint) and not isnull( account)){
       if( isnull( result ) ) {
         result := InventoryValueAndCost::Create( id, product, stockingPoint, account, costDriver, start, cost, true ).astype( InventoryValueAndCost );
       } else if( result.ProductID() <> productId ) {
         info( "cannot change product of inventory value and cost" )
       } 
-    //  else {
-    //    result.Update( account, costDriver, start, account.DefaultTimeUnit(), account.DefaultLengthOfTime(), cost, true );
-    //  }
+      else {
+        result.Update( account, costDriver, start, account.DefaultTimeUnit(), account.DefaultLengthOfTime(), cost, true );
+      }
     }
     
     return result;
diff --git a/_Main/BL/Type_InventoryValueAndCost/StaticMethod_DoASync.qbl b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_DoASync.qbl
index 076964d..0b2323a 100644
--- a/_Main/BL/Type_InventoryValueAndCost/StaticMethod_DoASync.qbl
+++ b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_DoASync.qbl
@@ -2,7 +2,8 @@
 #parent: #root
 StaticMethod DoASync (
   MacroPlan macroPlan,
-  const GlobalOTDTable globalOTDTable
+  const GlobalOTDTable globalOTDTable,
+  Strings businessTypeNames
 )
 {
   TextBody:
@@ -11,6 +12,6 @@
     //info( "ActualPISPIP Finished, Start InventoryCost Data Broker" );
     //macroPlan.Broker_OTD_InventoryCost().Execute();
     info( "InventoryCost Data Broker Finished, Start InventoryCost Mapping" );
-    macroPlan.DoASyncMappingInventoryValueAndCostData(globalOTDTable);
+    macroPlan.DoASyncMappingInventoryValueAndCostData(globalOTDTable,businessTypeNames);
   *]
 }
diff --git a/_Main/BL/Type_InventoryValueAndCost/StaticMethod_FindById.qbl b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_FindById.qbl
index 133145d..e49e111 100644
--- a/_Main/BL/Type_InventoryValueAndCost/StaticMethod_FindById.qbl
+++ b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_FindById.qbl
@@ -12,6 +12,9 @@
   [*
     // yypsybs Aug-16-2023 (created)
     value := select( macroPlan, Product_MP.InventoryValueAndCost, item, true, item.ProductID()=productId and item.StockingPointID() = stockPointId and item.Start() = start );
+    if( isnull( value ) ){
+      value := select( macroPlan, Product_MP.InventoryValueAndCost, item, true, item.ID() = id );
+      }
     return value;
   *]
 }
diff --git a/_Main/BL/Type_Lane/StaticMethod_CreasteFromMapping.qbl b/_Main/BL/Type_Lane/StaticMethod_CreasteFromMapping.qbl
new file mode 100644
index 0000000..ab95433
--- /dev/null
+++ b/_Main/BL/Type_Lane/StaticMethod_CreasteFromMapping.qbl
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreasteFromMapping (
+  const GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    // Administrator Oct-31-2023 (created)
+    updates := construct( Lanes );
+    traverse( globalOTDTable, Global_MappingLane, gl, true )
+    {
+      id := gl.ID();
+      unitid := gl.UnitID();
+      name := gl.Name();
+      userleadtime := gl.UserLeadTime();
+      processingtime := Duration::Zero();
+      
+      unitofmeasurename := "PCS";
+      currencyid := "CNY";
+      startdate := Date::Date( 1900, 1, 1 );
+      enddate := Date::Date( 9999, 12, 31 );
+      capacitytype := "Transport quantity";
+      if( userleadtime.Length() = 0 )
+      {
+        processingtime := Duration::Zero(); 
+        }
+      else
+      {
+        processingtime := Duration::Hours( [Number]userleadtime );
+        };
+      
+      unit := Unit::FindById( macroPlan, unitid );
+      if( isnull( unit)){
+        unit :=macroPlan.Unit( relnew, 
+                               ID := unitid, 
+                               Name := unitid, 
+                               UnitOfMeasureName := unitofmeasurename, 
+                               CurrencyID := currencyid, 
+                               StartDate := startdate, 
+                               EndDate := enddate, 
+                               CapacityType := capacitytype );
+      }
+      
+      a := Lane::CreateLane( macroPlan, unit, id, name, processingtime);
+      updates.Add( a );
+      }
+    origindataset := selectset( macroPlan, Unit.Lane, l, true );
+    obsoletes := origindataset.Difference( updates );
+    // delete obsoleted
+    difflength := obsoletes.Size();
+    for( j:=0; j<difflength; j++ )
+    {
+      obsolete := obsoletes.Element( j );
+      obsolete.Delete();
+      }
+  *]
+}
diff --git a/_Main/BL/Type_Lane/StaticMethod_CreateLane.qbl b/_Main/BL/Type_Lane/StaticMethod_CreateLane.qbl
index 64c72eb..286b75f 100644
--- a/_Main/BL/Type_Lane/StaticMethod_CreateLane.qbl
+++ b/_Main/BL/Type_Lane/StaticMethod_CreateLane.qbl
@@ -1,6 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateLane (
+  MacroPlan mp,
   Unit unit,
   String id,
   String name,
@@ -19,7 +20,7 @@
     isfromdb := true;
     
     //create new stockingpoint
-    result := Lane::FindLaneTypeIndex( id );
+    result := Lane::FindById( mp, id );
     
     if( isnull( result ) )
     {
diff --git a/_Main/BL/Type_Lane/StaticMethod_CreateLaneFromJson.qbl b/_Main/BL/Type_Lane/StaticMethod_CreateLaneFromJson.qbl
index 0c19698..d4e9b77 100644
--- a/_Main/BL/Type_Lane/StaticMethod_CreateLaneFromJson.qbl
+++ b/_Main/BL/Type_Lane/StaticMethod_CreateLaneFromJson.qbl
@@ -16,7 +16,6 @@
     processingtime := Duration::Zero();
     
     unitofmeasurename := "PCS";
-    currencyid := "CNY";
     startdate := Date::Date( 1900, 1, 1 );
     enddate := Date::Date( 9999, 12, 31 );
     capacitytype := "Transport quantity";
@@ -31,17 +30,17 @@
     
     unit := Unit::FindUnitTypeIndex( unitid );
     if( isnull( unit)){
-      unit :=macroplan.Unit( relnew, 
-                 ID := unitid, 
-                 Name := unitid, 
-                 UnitOfMeasureName := unitofmeasurename, 
-                 CurrencyID := currencyid, 
-                 StartDate := startdate, 
-                 EndDate := enddate, 
-                 CapacityType := capacitytype );
+      unit := macroplan.Unit( relnew, ID := unitid, 
+                   Name := unitid, 
+                   ParentUnitID := "杩愯緭", 
+                   CapacityType := capacitytype, 
+                   UnitOfMeasureName := unitofmeasurename,
+                   CurrencyID := macroplan.BaseCurrency().ID(), 
+                   StartDate := startdate, 
+                   EndDate := enddate );
     }
     
-    result := Lane::CreateLane( unit, id, name, processingtime);
+    result := Lane::CreateLane( macroplan, unit, id, name, processingtime);
     
     return result;
   *]
diff --git a/_Main/BL/Type_Lane/StaticMethod_FindById.qbl b/_Main/BL/Type_Lane/StaticMethod_FindById.qbl
new file mode 100644
index 0000000..05cf40a
--- /dev/null
+++ b/_Main/BL/Type_Lane/StaticMethod_FindById.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindById (
+  MacroPlan mp,
+  String id
+) as Lane
+{
+  TextBody:
+  [*
+    // yypsybs Aug-14-2023 (created)
+    result := select( mp, Unit.Lane, lane, true, lane.ID() = id );
+    
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Lane/StaticMethod_FindByIdAndUnit.qbl b/_Main/BL/Type_Lane/StaticMethod_FindByIdAndUnit.qbl
new file mode 100644
index 0000000..b60c9e4
--- /dev/null
+++ b/_Main/BL/Type_Lane/StaticMethod_FindByIdAndUnit.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindByIdAndUnit (
+  Unit unit,
+  String id
+) as Lane
+{
+  TextBody:
+  [*
+    // yypsybs Aug-14-2023 (created)
+    
+    result := select(  unit, Lane, item, true, item.ID() = id );
+    
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_LaneLeg/StaticMethod_CreateFromMapping.qbl b/_Main/BL/Type_LaneLeg/StaticMethod_CreateFromMapping.qbl
new file mode 100644
index 0000000..f15c486
--- /dev/null
+++ b/_Main/BL/Type_LaneLeg/StaticMethod_CreateFromMapping.qbl
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateFromMapping (
+  const GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    // Administrator Oct-31-2023 (created)
+    updates := construct( LaneLegs );
+    traverse( globalOTDTable, Global_MappingLaneLeg, gll, true )
+    {
+      processingtime := Duration::Zero();
+      hasprocessingtime := true;
+      userleadtime := gll.UserLeadTime();
+      if( userleadtime.Length() = 0 )
+      {
+        hasprocessingtime := false;
+        processingtime := Duration::Zero(); 
+        }
+      else
+      {
+        hasprocessingtime := true;
+        processingtime := Duration::Hours( [Number]userleadtime );
+        };
+      
+      lane := Lane::FindById( macroPlan, gll.LaneID() );
+      a := LaneLeg::CreateLaneleg( macroPlan, lane, gll.LaneID(), gll.OriginStockingPointID(), gll.DestinationStockingPointID(), gll.Name(), hasprocessingtime, processingtime);
+      updates.Add( a );
+      }
+    origindataset := selectset( macroPlan, Unit.Lane.LaneLeg, ll, true );
+    obsoletes := origindataset.Difference( updates );
+    // delete obsoleted
+    difflength := obsoletes.Size();
+    for( j:=0; j<difflength; j++ )
+    {
+      obsolete := obsoletes.Element( j );
+      obsolete.Delete();
+      }
+  *]
+}
diff --git a/_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneLegFromJson.qbl b/_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneLegFromJson.qbl
index ed77c9e..021a0f6 100644
--- a/_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneLegFromJson.qbl
+++ b/_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneLegFromJson.qbl
@@ -1,6 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateLaneLegFromJson (
+  MacroPlan mp,
   JSON datarow
 ) as LaneLeg
 {
@@ -29,7 +30,7 @@
     
     lane := Lane::FindLaneTypeIndex( laneid );
     
-    result := LaneLeg::CreateLaneleg(lane, laneid, originstockingpointid, destinationstockingpointid, name, hasprocessingtime, processingtime);
+    result := LaneLeg::CreateLaneleg( mp, lane, laneid, originstockingpointid, destinationstockingpointid, name, hasprocessingtime, processingtime);
     
     return result;
   *]
diff --git a/_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneleg.qbl b/_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneleg.qbl
index c72fe3d..6ca8d7e 100644
--- a/_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneleg.qbl
+++ b/_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneleg.qbl
@@ -1,6 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateLaneleg (
+  MacroPlan mp,
   Lane lane,
   String laneid,
   String originstockingpointid,
@@ -25,16 +26,16 @@
     isfromdb := true;
     
     //create new stockingpoint
-    originstockingpoint := StockingPoint_MP::FindStockingPointTypeIndex( originstockingpointid );
+    originstockingpoint := StockingPoint_MP::FindById( mp, originstockingpointid );
     lane.AddStockingPoint( originstockingpoint, true, isfromdb );
     Transaction::Transaction().Propagate();
     
-    destinationstockingpoint := StockingPoint_MP::FindStockingPointTypeIndex( destinationstockingpointid );
+    destinationstockingpoint := StockingPoint_MP::FindById( mp, destinationstockingpointid );
     lane.AddStockingPoint( destinationstockingpoint, false, isfromdb );
     
     Transaction::Transaction().Propagate();
     
-    result := LaneLeg::FindLaneLegTypeIndex( laneid, originstockingpointid, destinationstockingpointid );
+    result := LaneLeg::FindByIdAndLane( lane, originstockingpointid, destinationstockingpointid );
     
     if( isnull( result ) )
     {
diff --git a/_Main/BL/Type_LaneLeg/StaticMethod_FindByIdAndLane.qbl b/_Main/BL/Type_LaneLeg/StaticMethod_FindByIdAndLane.qbl
new file mode 100644
index 0000000..a6a90ec
--- /dev/null
+++ b/_Main/BL/Type_LaneLeg/StaticMethod_FindByIdAndLane.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindByIdAndLane (
+  Lane lane,
+  String originstockingpointid,
+  String destinationstockingpointid
+) as LaneLeg
+{
+  TextBody:
+  [*
+    // yypsybs Aug-14-2023 (created)
+    
+    result := select(  lane, LaneLeg, item, true, item.OriginStockingPointID() = originstockingpointid and item.DestinationStockingPointID() = destinationstockingpointid );
+    
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/DefaultValue_BusinessType.qbl b/_Main/BL/Type_MacroPlan/DefaultValue_BusinessType.qbl
deleted file mode 100644
index 1672b03..0000000
--- a/_Main/BL/Type_MacroPlan/DefaultValue_BusinessType.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: BusinessType
-}
diff --git a/_Main/BL/Type_MacroPlan/Method_ApiCurencyRatesData.qbl b/_Main/BL/Type_MacroPlan/Method_ApiCurencyRatesData.qbl
index 9f5c492..e4ee8c5 100644
--- a/_Main/BL/Type_MacroPlan/Method_ApiCurencyRatesData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_ApiCurencyRatesData.qbl
@@ -1,6 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 Method ApiCurencyRatesData (
+  MacroPlan mp,
   JSON data
 )
 {
@@ -14,7 +15,7 @@
     for( i:=0; i<data_length; i++ )
     {
       datarow := data.Get( i );
-      a := CurrencyRate_MP::CreateCurrencyRateFromJson( datarow );
+      a := CurrencyRate_MP::CreateCurrencyRateFromJson( mp, datarow );
       updates.Add( a );
       }
     origindataset := selectset( this, Currency_MP.CurrencyRate_MP, cr, true );
diff --git a/_Main/BL/Type_MacroPlan/Method_ApiLaneLegsData.qbl b/_Main/BL/Type_MacroPlan/Method_ApiLaneLegsData.qbl
index 450d6ae..c3e7b0c 100644
--- a/_Main/BL/Type_MacroPlan/Method_ApiLaneLegsData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_ApiLaneLegsData.qbl
@@ -1,6 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 Method ApiLaneLegsData (
+  MacroPlan mp,
   JSON data
 )
 {
@@ -14,7 +15,7 @@
     for( i:=0; i<data_length; i++ )
     {
       datarow := data.Get( i );
-      a := LaneLeg::CreateLaneLegFromJson( datarow );
+      a := LaneLeg::CreateLaneLegFromJson( mp, datarow );
       updates.Add( a );
       }
     origindataset := selectset( this, Unit.Lane.LaneLeg, ll, true );
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingActualPISPIPData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingActualPISPIPData.qbl
index f9c40e7..7140c64 100644
--- a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingActualPISPIPData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingActualPISPIPData.qbl
@@ -10,11 +10,22 @@
   TextBody:
   [*
     // renhao Aug-14-2023 (created)
-    listtodeal := selectset( globalOTDTable,
-                             Global_MappingActualProductInStockingPointInPeriod,
-                             actual,
-                             ( actual.ActualInventoryLevelEnd() > 0 ) and 
-                             ( organcodelist.Find( actual.StockingPointID().SubString( 0, 3 ) ) >= 0 ) );
+    listtodeal := construct( Global_MappingActualProductInStockingPointInPeriods, constcontent );
+    if ( businessTypes.Size() > 0 ) {
+      targetGlobal_ProductCategory := selectset( globalOTDTable, Global_ProductCategory, tempGPC, 
+                                                 exists( businessTypes, Elements, tempBTN, tempBTN = tempGPC.BusinessTypeName() ) );
+      listtodeal := selectset( targetGlobal_ProductCategory, 
+                               Elements.Global_MappingProduct_MP.Global_MAPISPIPCategory.Global_MappingActualProductInStockingPointInPeriod, 
+                               tempGMPIL, 
+                               ( tempGMPIL.ActualInventoryLevelEnd() > 0 ) and 
+                               ( organcodelist.Find( tempGMPIL.StockingPointID().SubString( 0, 3 ) ) >= 0 ) );
+    } else {  
+      listtodeal := selectset( globalOTDTable,
+                               Global_MappingActualProductInStockingPointInPeriod,
+                               actual,
+                               ( actual.ActualInventoryLevelEnd() > 0 ) and 
+                               ( organcodelist.Find( actual.StockingPointID().SubString( 0, 3 ) ) >= 0 ) );
+    }
     totalcount := listtodeal.Size();
     info( "ActualPISPIP has " + totalcount.AsQUILL() + " rows in total" );
     
@@ -24,13 +35,14 @@
       if( count - [Number](count/1000) * 1000 = 0 or count = totalcount ){
         info( "Now is dealing with the " + count.AsQUILL() + "ActualPISPIP " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
         }
-      product := select( globalOTDTable,Global_MappingProduct_MP,product,product.ID() = actual.ProductID() and product.KeyProduct() = nuclear,true);
-      if( not isnull( product)){
+      //product := select( globalOTDTable,Global_MappingProduct_MP,product,product.ID() = actual.ProductID() and product.KeyProduct() = nuclear,true);
+      //if( guard( actual.Global_MAPISPIPCategory().KeyProduct() = nuclear, false ) ){
+      if( not nuclear or (nuclear and actual.Global_MAPISPIPCategory().Critical() = nuclear) ){
       if( not isnull(businessTypes)){
       
-        for( i :=0 ;i < businessTypes.Size();i++ ){
-          businessType := businessTypes.Element( i );
-          if( product.BusinessType() = businessType and not product.IsCommon()){
+        
+          //businessType := businessTypes.Element( i );
+          if( /*product.BusinessType() = businessType and not product.IsCommon()*/ not actual.Global_MAPISPIPCategory().IsCommon() ){
             ActualProductInStockingPointInPeriod::CreateOrUpdate( this,
                                                                   actual.ProductID(),
                                                                   actual.StockingPointID(),
@@ -38,7 +50,7 @@
                                                                   actual.ActualInventoryLevelEnd(),
                                                                   actual.ManufacturedDate());
           }
-        }
+        
         
       }else{
         ActualProductInStockingPointInPeriod::CreateOrUpdate( this,
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingCustomerOrderData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingCustomerOrderData.qbl
index e56a4f7..16ec956 100644
--- a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingCustomerOrderData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingCustomerOrderData.qbl
@@ -22,7 +22,7 @@
                                  ( organcodelist.Find( item.StockingPointID().SubString( 0, 3 ) ) >= 0 ) );
     }
     queryStartDate := guard( min( this, Period_MP, item, true, item.StartDate() ) - Duration::Days( 30 ), DateTime::MinDateTime() ).Date();
-    queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
+    //queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
     listToDeal := selectset( listToDeal, Elements, item, item.OrderDate() >= queryStartDate /*and item.OrderDate() <= queryEndDate*/, not isnull( Product_MP::FindById( this, item.ProductID() ) ) and not isnull( StockingPoint_MP::FindById( this, item.StockingPointID() ) ) and not isnull( SalesSegment_MP::FindByName( this, item.SalesSegmentName() ) ) );
     
     totalcount := listToDeal.Size();
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl
index e8950bc..6b2f316 100644
--- a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl
@@ -11,13 +11,27 @@
   [*
     // renhao Aug-14-2023 (created)
     queryStartDate := guard( min( this, Period_MP, item, true, item.StartDate() ) - Duration::Days( 30 ), DateTime::MinDateTime() ).Date();
-    queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
-    listtodeal := selectset( globalOTDTable,
-                             Global_MappingInventorySupply,
-                             externalSupply, 
-                             ( externalSupply.UserQuantity()>0 ) and 
-                             ( externalSupply.Date() >= queryStartDate ) and 
-                             ( organcodelist.Find( externalSupply.StockingPointID().SubString( 0, 3 ) ) >= 0 )/*and externalSupply.Date() <= queryEndDate*/);
+    //queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
+    
+    listtodeal := construct( Global_MappingInventorySupplys, constcontent );
+    if ( businessTypes.Size() > 0 ) {
+      targetGlobal_ProductCategory := selectset( globalOTDTable, Global_ProductCategory, tempGPC, 
+                                                 exists( businessTypes, Elements, tempBTN, tempBTN = tempGPC.BusinessTypeName() ) );
+      listtodeal := selectset( targetGlobal_ProductCategory, 
+                               Elements.Global_MappingProduct_MP.Global_InventorySupplyCategory.Global_MappingInventorySupply, 
+                               tempGMIS, 
+                               ( tempGMIS.UserQuantity()>0 ) and 
+                               ( tempGMIS.Date() >= queryStartDate ) and 
+                               ( organcodelist.Find( tempGMIS.StockingPointID().SubString( 0, 3 ) ) >= 0 ) );
+    } else {
+      listtodeal := selectset( globalOTDTable,
+                               Global_MappingInventorySupply,
+                               externalSupply, 
+                               ( externalSupply.UserQuantity()>0 ) and 
+                               ( externalSupply.Date() >= queryStartDate ) and 
+                               ( organcodelist.Find( externalSupply.StockingPointID().SubString( 0, 3 ) ) >= 0 )/*and externalSupply.Date() <= queryEndDate*/);
+    }
+    
     totalcount := listtodeal.Size();
     description := "鍦ㄩ�斿湪鍒�";
     info( "ExternalSupply has " + totalcount.AsQUILL() + " rows in total" );
@@ -28,18 +42,18 @@
       if( count - [Number](count/1000) * 1000 = 0 or count = totalcount ){
         info( "Now is dealing with the " + count.AsQUILL() + "ExternalSupply " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
        }
-      product := select( globalOTDTable,Global_MappingProduct_MP,product,product.ID() = externalSupply.ProductID(),true);
+      //product := select( globalOTDTable,Global_MappingProduct_MP,product,product.ID() = externalSupply.ProductID(),true);
       
       
-      if( not isnull( product)){
+      if( /*not isnull( product)*/ not isnull( externalSupply.Global_InventorySupplyCategory() ) ){
         productMP :=  Product_MP :: FindProductTypeIndex( externalSupply.ProductID());
         stockingpoint := select( this,StockingPoint_MP,st,st.ID() = externalSupply.StockingPointID(),true);
         if( not isnull( stockingpoint) and not isnull( productMP)){
         if( not isnull(businessTypes)){
         
           for( i :=0 ;i < businessTypes.Size();i++ ){
-            businessType := businessTypes.Element( i );
-            if( product.BusinessType() = businessType and not product.IsCommon()){
+            //businessType := businessTypes.Element( i );
+            if( /*product.BusinessType() = businessType and not product.IsCommon()*/ not externalSupply.Global_InventorySupplyCategory().IsCommon() ){
               InventorySupply::CreateOrUpdate( externalSupply.ID(),
                                                productMP,
                                                stockingpoint,
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingInventoryValueAndCostData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingInventoryValueAndCostData.qbl
index b0e0349..b000fe9 100644
--- a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingInventoryValueAndCostData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingInventoryValueAndCostData.qbl
@@ -1,13 +1,24 @@
 Quintiq file version 2.0
 #parent: #root
 Method DoASyncMappingInventoryValueAndCostData (
-  const GlobalOTDTable globalOTDTable
+  const GlobalOTDTable globalOTDTable,
+  Strings businessTypeNames
 )
 {
   TextBody:
   [*
     // yypsybs Aug-15-2023 (created)
-    listtodeal := selectset( globalOTDTable,Global_MappingStockingPointCost,item,true );
+    listtodeal := construct( Global_MappingStockingPointCosts, constcontent );
+    if ( businessTypeNames.Size() = 0 ) {
+      listtodeal := selectset( globalOTDTable,Global_MappingStockingPointCost,item,true );
+    } else {
+      targetGlobal_ProductCategory := selectset( globalOTDTable, Global_ProductCategory, tempGPC, 
+                                                 exists( businessTypeNames, Elements, tempBTN, tempBTN = tempGPC.BusinessTypeName() ) );
+      listtodeal := selectset( targetGlobal_ProductCategory, 
+                               Elements.Global_MappingProduct_MP.Global_StockingPointCostCategory.Global_MappingStockingPointCost, 
+                               tempGMPIL, 
+                               true );
+    }
     totalcount := listtodeal.Size();
     
     info( "InventoryCost has " + totalcount.AsQUILL() + " rows in total" );
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMData.qbl
index 8c1a8e4..37eb082 100644
--- a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMData.qbl
@@ -13,7 +13,7 @@
     // yypsybs Aug-21-2023 (created)
     keyProductList := construct( Strings );
     if( isKeyProduct ) {
-        keyProductList := selectuniquevalues( globalOTDTable, Global_MappingProduct_MP, item, item.ProductMajorType()="鎴愬搧" or item.ProductMajorType()="鍗婃垚鍝�", item.ID() );
+       keyProductList := selectuniquevalues( globalOTDTable, Global_MappingProduct_MP, item, item.ProductMajorType()="鎴愬搧" or item.ProductMajorType()="鍗婃垚鍝�", item.ID() );
     }
     bomList := selectsortedset(  globalOTDTable, Global_MappingOperationBOM, item,
                                  ifexpr( isnull( businessTypes ) or businessTypes.Size() = 0, 
@@ -75,12 +75,33 @@
         }
     }
     if( createPurchaseSupplyMaterial ) {
-        toCreateBomList := selectuniquevalues( bomList, Elements, item, 
+      toCreateBomList := construct( Strings );
+      alterCodes := construct( Strings );
+      
+      if( isKeyProduct){
+          toCreateBomList := selectuniquevalues( bomList, Elements, item, 
                                                item.ComponentType() = "P" and keyProductList.Find( item.ComponentCode())>=0, item.OrganCode() + item.ComponentCode());
+                                           
+          alterCodes := selectuniquevalues( bomList, Elements, item, 
+                                               not item.AlternativeMaterialCode() = "" and item.AlternativeMaterialType() = "P" and keyProductList.Find( item.ComponentCode())>=0, item.OrganCode() + item.AlternativeMaterialCode());
+        }else{
+          toCreateBomList := selectuniquevalues( bomList, Elements, item, 
+                                               item.ComponentType() = "P" , item.OrganCode() + item.ComponentCode());
+        
+          alterCodes := selectuniquevalues( bomList, Elements, item, 
+                                               not item.AlternativeMaterialCode() = "" and item.AlternativeMaterialType() = "P", item.OrganCode() + item.AlternativeMaterialCode());
+        }
+        toCreateBomList := toCreateBomList.Union( alterCodes);
         traverse( toCreateBomList, Elements, key ) {
             boms := selectset( bomList, Elements, item, item.ComponentType() = "P" and item.OrganCode() + item.ComponentCode() = key );
-            bom := boms.First();
-            this.MappingOperationBOMDataSupplyPurchase( bom.OrganCode(), bom.ComponentCode(), bom.ComponentType());
+            if( boms.Size()=0){
+              boms := selectset( bomList, Elements, item, item.ComponentType() = "P" and item.OrganCode() + item.AlternativeMaterialCode() = key );
+            }
+            if( boms.Size()>0){
+              bom := boms.First();
+              this.MappingOperationBOMDataSupplyPurchase( bom.OrganCode(), bom.ComponentCode(), bom.ComponentType());
+            }
+            
         }
     }
     
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMDataRouting.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMDataRouting.qbl
index 43f35a0..b575592 100644
--- a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMDataRouting.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMDataRouting.qbl
@@ -65,8 +65,11 @@
                                                         true, trash );
                     mainBOM.Quantity( firstAlterRow.UnitUsageOfComponents() / firstAlterRow.ComponentOutputRate() );
                     mainBOM.MaxQuantityInGroup( firstAlterRow.UnitUsageOfComponents() / firstAlterRow.ComponentOutputRate() );
+                    mainBOM.MinQuantityInGroup(0);
                     mainQty := mainBOM.Quantity();
                     Transaction::Transaction().Propagate();
+                    
+                    altersize := alterRows.Size();
                     // 娣诲姞杈呮枡
                     traverse( alterRows, Elements, alterRow ) {
                         alterProd := Product_MP::FindById( this, alterRow.AlternativeMaterialCode() );
@@ -84,14 +87,23 @@
                           trash := construct( OperationBOMs );
                           if( not isnull( mainInput ) ) {
                               alterBom := mainInput.Operation().LinkPISP( pispAlter, true, mainInput.OperationLinkGroupID(), trash );
-                              alterBom.Quantity( mainBOM.MaxQuantityInGroup() * alterRow.AlternativeRate() );
+                              //alterBom.Quantity( mainBOM.MaxQuantityInGroup() * alterRow.AlternativeRate() );
+                              //alterBom.MaxQuantityInGroup( mainBOM.MaxQuantityInGroup() );
+                              alterBom.Quantity( mainBOM.MaxQuantityInGroup() / altersize );
                               alterBom.MaxQuantityInGroup( mainBOM.MaxQuantityInGroup() );
+                              alterBom.MinQuantityInGroup(0);
     //                          info( "Quantity" + [String]alterBom.Quantity() )
     //                          info( "MaxQuantityInGroup" + [String]alterBom.MaxQuantityInGroup() )
                               mainQty := mainQty - alterBom.Quantity();
                           }
                       }
-                      mainBOM.Quantity( mainQty );
+                      
+                      Transaction::Transaction().Propagate( relation( OperationBOM, OperationInputGroup));
+                      if( not isnull( mainBOM.OperationInputGroup())){
+                        mainBOM.OperationInputGroup().InputGroupQuantity(mainBOM.MaxQuantityInGroup());
+                        mainBOM.Quantity( mainBOM.MaxQuantityInGroup() / altersize );
+                      }
+                      
                    }
                 }
               }
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductData.qbl
index 55562f4..8b44c13 100644
--- a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductData.qbl
@@ -16,14 +16,14 @@
     
     if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
         if( iskeyproduct = true ){
-          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, item.KeyProduct() = true );
+          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, item.ProductMajorType()="鎴愬搧" or item.ProductMajorType()="鍗婃垚鍝�" );
           }
         else{
           listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, true );
           }
     } else {
         if( iskeyproduct = true ){
-          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, item.KeyProduct() = true and businesstypes.Find( item.BusinessType() ) >= 0 );
+          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, (item.ProductMajorType()="鎴愬搧" or item.ProductMajorType()="鍗婃垚鍝�") and businesstypes.Find( item.BusinessType() ) >= 0 );
          }
         else{
           listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, businesstypes.Find( item.BusinessType() ) >= 0 );
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductInLaneData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductInLaneData.qbl
index a0521a8..b1434d1 100644
--- a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductInLaneData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductInLaneData.qbl
@@ -1,7 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
 Method DoASyncMappingProductInLaneData (
-  const GlobalOTDTable globalOTDTable
+  const GlobalOTDTable globalOTDTable,
+  Strings businessTypeNames
 )
 {
   Description: 'Get Product In Line data'
@@ -9,7 +10,17 @@
   [*
     // Administrator Aug-17-2023 (created)
     // list to deal
-    listtodeal := selectset( globalOTDTable, Global_MappingProductInLane, item ,true );
+    listtodeal := construct( Global_MappingProductInLanes, constcontent );
+    if ( businessTypeNames.Size() = 0 ) {
+      listtodeal := selectset( globalOTDTable, Global_MappingProductInLane, item ,true );
+    } else {
+      targetGlobal_ProductCategory := selectset( globalOTDTable, Global_ProductCategory, tempGPC, 
+                                                 exists( businessTypeNames, Elements, tempBTN, tempBTN = tempGPC.BusinessTypeName() ) );
+      listtodeal := selectset( targetGlobal_ProductCategory, 
+                               Elements.Global_MappingProduct_MP.Global_ProductInLineCategory.Global_MappingProductInLane, 
+                               tempGMPIL, 
+                               true );
+    }
     totalcount := listtodeal.Size();
     info( "ProductInLane has " + totalcount.AsQUILL() + " rows in total" );
     
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingUnitData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingUnitData.qbl
index 171448e..1407447 100644
--- a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingUnitData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingUnitData.qbl
@@ -53,8 +53,8 @@
     supplyunit.IsSupplier(true);
     
     Unit::CreateOrUpdate( this, 
-                          "鏁磋溅杩愯緭", 
-                          "鏁磋溅杩愯緭", 
+                          "杩愯緭", 
+                          "杩愯緭", 
                           "澶╅┈闆嗗洟", 
                           capacitytype, 
                           unitofmeasurename );
@@ -88,7 +88,7 @@
                             thirdlevelid, 
                             thirdlevelid, 
                             secondlevelid, 
-                            "Time", 
+                            infinite, 
                             item.UnitOfMeasureName() );
                    
       //Get the last level unit
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl
index 1e0929e..fdacd72 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl
@@ -16,14 +16,14 @@
     
     if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
         if( iskeyproduct = true ){
-          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, item.KeyProduct() = true );
+          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, item.ProductMajorType()="鎴愬搧" or item.ProductMajorType()="鍗婃垚鍝�" );
           }
         else{
           listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, true );
           }
     } else {
         if( iskeyproduct = true ){
-          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, item.KeyProduct() = true and businesstypes.Find( item.BusinessType() ) >= 0 );
+          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, (item.ProductMajorType()="鎴愬搧" or item.ProductMajorType()="鍗婃垚鍝�") and businesstypes.Find( item.BusinessType() ) >= 0 );
          }
         else{
           listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, businesstypes.Find( item.BusinessType() ) >= 0 );
diff --git "a/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl" "b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl"
index 8e5e156..f3ad992 100644
--- "a/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl"
+++ "b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl"
@@ -2,11 +2,11 @@
 #parent: #root
 StaticMethod DoASync (
   MacroPlan macroPlan,
-  Strings businessTypes,
+  const BusinessType businessType,
   Boolean isKeyProduct,
   Boolean createPurchaseSupplyMaterial,
   const GlobalOTDTable globalOTDTable
-)
+) as stream[MacroPlan]
 {
   Description: '鍗曟鍚屾'
   TextBody:
@@ -16,25 +16,16 @@
     //Currency_MP::CreateCurrencyFromJson( macroPlan, jsonDataRow );
     info( "Prepare to do sync" )
     info( "Get organ code list" )
-    organcodelist := selectvalues( globalOTDTable, Global_MappingOperationBOM, bom,true, bom.OrganCode() );
-    if( not isnull( businessTypes ) and businessTypes.Size() > 0 ) {
-        traverse( businessTypes, Elements, item ) {
-            info( "Business type : " + item )  
-        }
-        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
-    }
-    else{
-      if( businessTypes.Size() = 0 ){
-        if( not isnull( selectset( globalOTDTable, BusinessType, b, b.BusinessTypeName() = "" ) ) ){
-          organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, organ.BusinessType().BusinessTypeName() = "", organ.OrganCodeName() );
-          }
-        }
-      }
+    businessTypeName := businessType.BusinessTypeName().Tokenize( "," );
+    macroPlan.BusinessType( businessType.BusinessTypeName() );
+    
+    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 )
     
@@ -46,113 +37,90 @@
     UnitOfMeasure_MP::DoASync( globalOTDTable, macroPlan );
     
     // 閿�鍞儴闂�-2
-    SalesSegment_MP::DoASync( macroPlan, businessTypes,globalOTDTable );
+    SalesSegment_MP::DoASync( macroPlan, businessTypeName,globalOTDTable );
     
     // Unit-9 
     // 涓嶰peration涓�鍚屽鐞�
     //info( "BaseConversionFactor Finished, Start Operation Data Broker" );
     //macroPlan.Broker_OTD_Operation().Execute();
     info( "Operation Data Broker Finished, Start Unit Mapping" );
-    macroPlan.DoASyncMappingUnitData( businessTypes ,globalOTDTable, organcodelist);
+    macroPlan.DoASyncMappingUnitData( businessTypeName ,globalOTDTable, organcodelist);
     
     // 搴撳瓨鐐�-3
-    info( "Sales Segment Finished, Start Get StockingPoint From Api" )
-    bodynumber := "2";
-    postrequestbody := macroPlan.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetStockingPointsInfo";
-    port := 443;
-    data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
-    macroPlan.ApiStockingPointData( data );
+    info( "Sales Segment Finished, Start Get StockingPoint From Mapping" )
+    StockingPoint_MP::CreateFromMapping( globalOTDTable, macroPlan );
+    //parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "StockingPoint" );
+    //postrequestbody := parameter.PostRequestBody();
+    //address := parameter.Address();
+    //url := parameter.AttributeValue();
+    //port := [Number]parameter.Port();
+    //data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
+    //macroPlan.ApiStockingPointData( data );
     
     // 璐у竵淇℃伅-4
-    info( "Get StockingPoint From Api Finished, Start Get CurrencyInfo From Api" )
-    bodynumber := "1";
-    postrequestbody := macroPlan.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetCurrenciesInfo";
-    port := 443;
-    data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
-    macroPlan.ApiCurenciesData( data );
+    info( "Get StockingPoint From Api Finished, Start Get CurrencyInfo From Mapping" )
+    Currency_MP::CreateFromMapping( globalOTDTable, macroPlan );
     
     //璐у竵姹囩巼淇℃伅-5
-    info( "Get CurrencyInfo From Api Finished, Start Get CurrencyRates From Api" )
-    bodynumber := "5";
-    postrequestbody := macroPlan.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetCurrencyRatesInfo";
-    port := 443;
-    data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
-    macroPlan.ApiCurencyRatesData( data );
+    info( "Get CurrencyInfo From Api Finished, Start Get CurrencyRates From Mapping" )
+    CurrencyRate_MP::CreateFromMapping( globalOTDTable, macroPlan );
     
     // 浜у搧鐗╂枡-6
     //info( "Get CurrencyRates From Api Finished, Start Product Data Broker" )
     //macroPlan.Broker_OTD_Product().Execute();
     info( "Product Data Broker Finished, Start Product Mapping" );
     //testproduct := construct( Strings );
-    macroPlan.DoASyncMappingProductData( businessTypes, globalOTDTable,isKeyProduct );
+    macroPlan.DoASyncMappingProductData( businessTypeName, globalOTDTable,isKeyProduct );
     
     //鍗曚綅杞崲-7
     BaseConversionFactor::DoASync( macroPlan ,globalOTDTable);
     
     // 宸ヨ壓璺嚎 + BOM-9
     info( "Unit Finished, Start Operation Mapping" );
-    macroPlan.DoASyncMappingOperationData( businessTypes ,globalOTDTable, organcodelist );  
+    macroPlan.DoASyncMappingOperationData( businessTypeName ,globalOTDTable, organcodelist );  
     //info( "Operation Finished, Start BOM Data Broker" );
     //macroPlan.Broker_OTD_BOM().Execute();
     info( "BOM Data Broker Finished, Start BOM Mapping" );
-    macroPlan.DoASyncMappingOperationBOMData( businessTypes, isKeyProduct, createPurchaseSupplyMaterial,globalOTDTable, organcodelist );
+    macroPlan.DoASyncMappingOperationBOMData( businessTypeName, isKeyProduct, createPurchaseSupplyMaterial,globalOTDTable, organcodelist );
     
     //杞﹂亾淇℃伅-10
-    info( "BOM Finished, Start Get Lanes From Api" );
-    bodynumber := "3";
-    postrequestbody := macroPlan.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetLanesInfo";
-    port := 443;
-    data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
-    macroPlan.ApiLanesData( data );
+    info( "BOM Finished, Start Get Lanes From Mapping" );
+    Lane::CreasteFromMapping( globalOTDTable, macroPlan );
     
     //杞﹂亾杩愯緭娈�-11
-    info( "Get Lanes From Api Finished, Start Get LaneLegs From Api" );
-    bodynumber := "4";
-    postrequestbody := macroPlan.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetLaneLegsInfo";
-    port := 443;
-    data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
-    macroPlan.ApiLaneLegsData( data );
+    info( "Get Lanes From Api Finished, Start Get LaneLegs From Mapping" );
+    LaneLeg::CreateFromMapping( globalOTDTable, macroPlan );
     
     // 渚涘簲缃戠粶锛堣溅閬擄級-12
     //info( "Get Lanelegs From Api Finished, Start ProductInLane Data Broker" );
     //macroPlan.Broker_OTD_ProductInLane().Execute();
     info( "ProductInLane Data Broker Finished, Start ProductInLane Mapping" );
-    macroPlan.DoASyncMappingProductInLaneData(globalOTDTable);
+    macroPlan.DoASyncMappingProductInLaneData( globalOTDTable,businessTypeName );
     
     // 鍦ㄥ簱搴撳瓨鏁版嵁-13
     //info( "ProductInLane Finished, Start ActualPISPIP Data Broker" );
     //macroPlan.Broker_OTD_ActualPISPIP().Execute();
     info( "ActualPISPIP Data Broker Finished, Start ActualPISPIP Mapping" );
-    macroPlan.DoASyncMappingActualPISPIPData( businessTypes, globalOTDTable,isKeyProduct, organcodelist );
+    macroPlan.DoASyncMappingActualPISPIPData( businessTypeName, globalOTDTable,isKeyProduct, organcodelist );
     
     // 鍦ㄩ�斿簱瀛�-14
     //info( "ActualPISPIP Finished, Start ExternalSupply Data Broker" );
     //macroPlan.Broker_OTD_ExternalSupply().Execute();
     info( "ExternalSupply Data Broker Finished, Start ExternalSupply Mapping" );
-    macroPlan.DoASyncMappingExternalSupplyData( businessTypes, isKeyProduct ,globalOTDTable, organcodelist );
+    macroPlan.DoASyncMappingExternalSupplyData( businessTypeName, isKeyProduct ,globalOTDTable, organcodelist );
     
     // 搴撳瓨鎴愭湰-15
-    InventoryValueAndCost::DoASync( macroPlan,globalOTDTable );
+    InventoryValueAndCost::DoASync( macroPlan,globalOTDTable,businessTypeName );
     
     // todo 鍒堕�犳垚鏈�-16
     info( "InventoryCost Finished, Start OperationCost Mapping" );
-    macroPlan.DoASyncMappingOperationCostData( globalOTDTable, businessTypes, organcodelist );
+    macroPlan.DoASyncMappingOperationCostData( globalOTDTable, businessTypeName, organcodelist );
     
     // 璁㈠崟棰勬祴-17
-    Forecast::DoASync( macroPlan, businessTypes, globalOTDTable, organcodelist );
+    Forecast::DoASync( macroPlan, businessTypeName, globalOTDTable, organcodelist );
     
     // 璁㈠崟闇�姹�-18
-    CustomerOrder::DoASync( macroPlan, businessTypes, globalOTDTable, organcodelist );
+    CustomerOrder::DoASync( macroPlan, businessTypeName, globalOTDTable, organcodelist );
     
     //鍒犻櫎澶氫綑鎶ラ敊鏁版嵁-19
     macroPlan.DeleteSnaityCheck();
@@ -162,5 +130,7 @@
     
     //// todo 渚涘簲鍟嗗洖澶�
     //info( "ProviderReply::DoSync" )
+    
+    return emit( macroPlan );
   *]
 }
diff --git "a/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043896.qbl" "b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043896.qbl"
deleted file mode 100644
index fc549a7..0000000
--- "a/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043896.qbl"
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod DoASync (
-  MacroPlan macroPlan,
-  String businessTypeStr,
-  Boolean isKeyProduct,
-  Boolean createPurchaseSupplyMaterial,
-  const GlobalOTDTable globalOTDTable
-) as stream[MacroPlan]
-{
-  Description: '鍗曟鍚屾'
-  TextBody:
-  [*
-    // yypsybs Aug-17-2023 (created)
-    businessTypes := construct( Strings );
-    if( businessTypeStr.Length() > 0 ) {
-        businessTypes := businessTypeStr.Tokenize( ',' );
-    }
-    MacroPlan::DoASync( macroPlan, businessTypes, isKeyProduct, createPurchaseSupplyMaterial ,globalOTDTable);
-    
-    return emit( macroPlan );
-  *]
-}
diff --git a/_Main/BL/Type_MacroPlan/StaticMethod_DoASync.qbl b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync.qbl
index 4fb0a6b..d92126d 100644
--- a/_Main/BL/Type_MacroPlan/StaticMethod_DoASync.qbl
+++ b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 StaticMethod DoASync (
   Scenario scenario,
-  String businessTypeStr,
+  const BusinessType businessType,
   Boolean isKeyProduct,
   Boolean createPurchaseSupplyMaterial,
   const GlobalOTDTable globalOTDTable
@@ -10,10 +10,10 @@
 {
   TextBody:
   [*
-    info( scenario.DatasetMDSID(), "    浜嬩笟閮細", businessTypeStr, "    isKeyProduct锛�", isKeyProduct, "    createPurchaseSupplyMaterial锛�", createPurchaseSupplyMaterial );
+    info( scenario.DatasetMDSID(), "    浜嬩笟閮細", businessType.BusinessTypeName(), "    isKeyProduct锛�", isKeyProduct, "    createPurchaseSupplyMaterial锛�", createPurchaseSupplyMaterial );
     
     MDSMacroPlan::Root( scenario.DatasetMDSID() )
-    -> MacroPlan::DoASync( businessTypeStr,
+    -> MacroPlan::DoASync( businessType,
                            isKeyProduct,
                            createPurchaseSupplyMaterial,
                            globalOTDTable
diff --git a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
index 8cb5656..25df795 100644
--- a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
+++ b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
@@ -71,7 +71,7 @@
     url := "/otdService/https/GetCurrencyRatesInfo";
     port := 443;
     data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
-    macroPlan.ApiCurencyRatesData( data );
+    macroPlan.ApiCurencyRatesData( macroPlan, data );
     
     // 浜у搧鐗╂枡-6
     //info( "Get CurrencyRates From Api Finished, Start Product Data Broker" )
@@ -109,7 +109,7 @@
     url := "/otdService/https/GetLaneLegsInfo";
     port := 443;
     data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
-    macroPlan.ApiLaneLegsData( data );
+    macroPlan.ApiLaneLegsData( macroPlan, data );
     
     // 渚涘簲缃戠粶锛堣溅閬擄級-12
     //info( "Get Lanelegs From Api Finished, Start ProductInLane Data Broker" );
diff --git a/_Main/BL/Type_MappingActualPISPIP/Attribute_ActualInventoryLevelEnd.qbl b/_Main/BL/Type_MappingActualPISPIP/Attribute_ActualInventoryLevelEnd.qbl
deleted file mode 100644
index da407e8..0000000
--- a/_Main/BL/Type_MappingActualPISPIP/Attribute_ActualInventoryLevelEnd.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ActualInventoryLevelEnd
-{
-  #keys: '3[414480.0.61560027][414480.0.61560026][414480.0.61560028]'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingActualPISPIP/Attribute_Date.qbl b/_Main/BL/Type_MappingActualPISPIP/Attribute_Date.qbl
deleted file mode 100644
index 993e8a6..0000000
--- a/_Main/BL/Type_MappingActualPISPIP/Attribute_Date.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Date
-{
-  #keys: '3[414480.0.61560037][414480.0.61560036][414480.0.61560038]'
-  IsReadOnly: true
-  ValueType: Date
-}
diff --git a/_Main/BL/Type_MappingActualPISPIP/Attribute_Description.qbl b/_Main/BL/Type_MappingActualPISPIP/Attribute_Description.qbl
deleted file mode 100644
index 7956d7b..0000000
--- a/_Main/BL/Type_MappingActualPISPIP/Attribute_Description.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Description
-{
-  #keys: '3[414480.0.61560047][414480.0.61560046][414480.0.61560048]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingActualPISPIP/Attribute_IsAvailable.qbl b/_Main/BL/Type_MappingActualPISPIP/Attribute_IsAvailable.qbl
deleted file mode 100644
index d8ca643..0000000
--- a/_Main/BL/Type_MappingActualPISPIP/Attribute_IsAvailable.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute IsAvailable
-{
-  #keys: '3[414480.0.61560097][414480.0.61560096][414480.0.61560098]'
-  ValueType: Boolean
-}
diff --git a/_Main/BL/Type_MappingActualPISPIP/Attribute_ManufacturedDate.qbl b/_Main/BL/Type_MappingActualPISPIP/Attribute_ManufacturedDate.qbl
deleted file mode 100644
index 41e09a4..0000000
--- a/_Main/BL/Type_MappingActualPISPIP/Attribute_ManufacturedDate.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ManufacturedDate
-{
-  #keys: '3[414480.0.61560077][414480.0.61560076][414480.0.61560078]'
-  ValueType: Date
-}
diff --git a/_Main/BL/Type_MappingActualPISPIP/Attribute_ProductID.qbl b/_Main/BL/Type_MappingActualPISPIP/Attribute_ProductID.qbl
deleted file mode 100644
index f3ed793..0000000
--- a/_Main/BL/Type_MappingActualPISPIP/Attribute_ProductID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductID
-{
-  #keys: '3[414480.0.61560057][414480.0.61560056][414480.0.61560058]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingActualPISPIP/Attribute_StockType.qbl b/_Main/BL/Type_MappingActualPISPIP/Attribute_StockType.qbl
deleted file mode 100644
index 4cc104f..0000000
--- a/_Main/BL/Type_MappingActualPISPIP/Attribute_StockType.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute StockType
-{
-  #keys: '3[414480.0.61560087][414480.0.61560086][414480.0.61560088]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingActualPISPIP/Attribute_StockingPointID.qbl b/_Main/BL/Type_MappingActualPISPIP/Attribute_StockingPointID.qbl
deleted file mode 100644
index d90bd1c..0000000
--- a/_Main/BL/Type_MappingActualPISPIP/Attribute_StockingPointID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute StockingPointID
-{
-  #keys: '3[414480.0.61560067][414480.0.61560066][414480.0.61560068]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingActualPISPIP/TypeIndex_MappingActualPISPIPTypeIndex.qbl b/_Main/BL/Type_MappingActualPISPIP/TypeIndex_MappingActualPISPIPTypeIndex.qbl
deleted file mode 100644
index da6905e..0000000
--- a/_Main/BL/Type_MappingActualPISPIP/TypeIndex_MappingActualPISPIPTypeIndex.qbl
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-TypeIndex MappingActualPISPIPTypeIndex
-{
-  Attributes:
-  [
-    TypeIndexAttribute
-    {
-      ModelElement: Date
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: ProductID
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: StockingPointID
-    }
-  ]
-}
diff --git a/_Main/BL/Type_MappingActualPISPIP/_ROOT_Type_MappingActualPISPIP.qbl b/_Main/BL/Type_MappingActualPISPIP/_ROOT_Type_MappingActualPISPIP.qbl
deleted file mode 100644
index c1eb86e..0000000
--- a/_Main/BL/Type_MappingActualPISPIP/_ROOT_Type_MappingActualPISPIP.qbl
+++ /dev/null
@@ -1,10 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type MappingActualPISPIP
-{
-  #keys: '5[414480.0.61560023][414480.0.61560021][0.0.0][414480.0.61560022][414480.0.61560024]'
-  BaseType: Object
-  Description: '鍦ㄥ簱搴撳瓨'
-  StructuredName: 'MappingActualPISPIPs'
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_AlternativeMaterialCode.qbl b/_Main/BL/Type_MappingBOM/Attribute_AlternativeMaterialCode.qbl
deleted file mode 100644
index 805262d..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_AlternativeMaterialCode.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute AlternativeMaterialCode
-{
-  #keys: '3[412960.0.86934549][412960.0.86934548][412960.0.86934550]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_AlternativeMaterialType.qbl b/_Main/BL/Type_MappingBOM/Attribute_AlternativeMaterialType.qbl
deleted file mode 100644
index baca335..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_AlternativeMaterialType.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute AlternativeMaterialType
-{
-  #keys: '3[412960.0.86934670][412960.0.86934669][412960.0.86934671]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_AlternativeMaterialUnit.qbl b/_Main/BL/Type_MappingBOM/Attribute_AlternativeMaterialUnit.qbl
deleted file mode 100644
index 276a497..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_AlternativeMaterialUnit.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute AlternativeMaterialUnit
-{
-  #keys: '3[412960.0.86934797][412960.0.86934796][412960.0.86934798]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_AlternativeRate.qbl b/_Main/BL/Type_MappingBOM/Attribute_AlternativeRate.qbl
deleted file mode 100644
index bf080b2..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_AlternativeRate.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute AlternativeRate
-{
-  #keys: '3[412960.0.86934925][412960.0.86934924][412960.0.86934926]'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_BusinessType.qbl b/_Main/BL/Type_MappingBOM/Attribute_BusinessType.qbl
deleted file mode 100644
index 534f086..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_BusinessType.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute BusinessType
-{
-  #keys: '3[412960.0.86941837][412960.0.86941836][412960.0.86941838]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_ComponentCode.qbl b/_Main/BL/Type_MappingBOM/Attribute_ComponentCode.qbl
deleted file mode 100644
index 905fc88..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_ComponentCode.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ComponentCode
-{
-  #keys: '3[412960.0.86934110][412960.0.86934109][412960.0.86934111]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_ComponentDescription.qbl b/_Main/BL/Type_MappingBOM/Attribute_ComponentDescription.qbl
deleted file mode 100644
index 99fb1de..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_ComponentDescription.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ComponentDescription
-{
-  #keys: '3[412960.0.86934357][412960.0.86934356][412960.0.86934358]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_ComponentOutputRate.qbl b/_Main/BL/Type_MappingBOM/Attribute_ComponentOutputRate.qbl
deleted file mode 100644
index 2738173..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_ComponentOutputRate.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ComponentOutputRate
-{
-  #keys: '3[412960.0.86934173][412960.0.86934172][412960.0.86934174]'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_ComponentType.qbl b/_Main/BL/Type_MappingBOM/Attribute_ComponentType.qbl
deleted file mode 100644
index f6574f3..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_ComponentType.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ComponentType
-{
-  #keys: '3[412960.0.86934293][412960.0.86934292][412960.0.86934294]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_ComponentUnit.qbl b/_Main/BL/Type_MappingBOM/Attribute_ComponentUnit.qbl
deleted file mode 100644
index b15885e..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_ComponentUnit.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ComponentUnit
-{
-  #keys: '3[412960.0.86934421][412960.0.86934420][412960.0.86934422]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_ComponentUnitDescription.qbl b/_Main/BL/Type_MappingBOM/Attribute_ComponentUnitDescription.qbl
deleted file mode 100644
index 329c8f5..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_ComponentUnitDescription.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ComponentUnitDescription
-{
-  #keys: '3[412960.0.86934485][412960.0.86934484][412960.0.86934486]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_DescriptionOfAlternativeMaterial.qbl b/_Main/BL/Type_MappingBOM/Attribute_DescriptionOfAlternativeMaterial.qbl
deleted file mode 100644
index d0064b7..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_DescriptionOfAlternativeMaterial.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DescriptionOfAlternativeMaterial
-{
-  #keys: '3[412960.0.86934734][412960.0.86934733][412960.0.86934735]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_DescriptionOfAlternativeMaterialUnits.qbl b/_Main/BL/Type_MappingBOM/Attribute_DescriptionOfAlternativeMaterialUnits.qbl
deleted file mode 100644
index f2d3cdf..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_DescriptionOfAlternativeMaterialUnits.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DescriptionOfAlternativeMaterialUnits
-{
-  #keys: '3[412960.0.86934861][412960.0.86934860][412960.0.86934862]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_DescriptionOfAlternativeMaterials.qbl b/_Main/BL/Type_MappingBOM/Attribute_DescriptionOfAlternativeMaterials.qbl
deleted file mode 100644
index 563268b..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_DescriptionOfAlternativeMaterials.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DescriptionOfAlternativeMaterials
-{
-  #keys: '3[414384.0.633771855][414384.0.633771854][414384.0.633771856]'
-  Description: '鏇夸唬鏂欐弿杩�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_MaterialSystem.qbl b/_Main/BL/Type_MappingBOM/Attribute_MaterialSystem.qbl
deleted file mode 100644
index c0d2997..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_MaterialSystem.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MaterialSystem
-{
-  #keys: '3[412960.0.86935116][412960.0.86935115][412960.0.86935117]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_OrganCode.qbl b/_Main/BL/Type_MappingBOM/Attribute_OrganCode.qbl
deleted file mode 100644
index 6b7ec13..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_OrganCode.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrganCode
-{
-  #keys: '3[412960.0.86956307][412960.0.86956306][412960.0.86956308]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_ProcessSection.qbl b/_Main/BL/Type_MappingBOM/Attribute_ProcessSection.qbl
deleted file mode 100644
index c333f3d..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_ProcessSection.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProcessSection
-{
-  #keys: '3[412960.0.86935053][412960.0.86935052][412960.0.86935054]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_ProductCode.qbl b/_Main/BL/Type_MappingBOM/Attribute_ProductCode.qbl
deleted file mode 100644
index 6b70c9a..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_ProductCode.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductCode
-{
-  #keys: '3[412960.0.86956371][412960.0.86956370][412960.0.86956372]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_ProductDescribe.qbl b/_Main/BL/Type_MappingBOM/Attribute_ProductDescribe.qbl
deleted file mode 100644
index 2b9211a..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_ProductDescribe.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductDescribe
-{
-  #keys: '3[412960.0.86956499][412960.0.86956498][412960.0.86956500]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_ProductType.qbl b/_Main/BL/Type_MappingBOM/Attribute_ProductType.qbl
deleted file mode 100644
index 8e90486..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_ProductType.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductType
-{
-  #keys: '3[412960.0.86956435][412960.0.86956434][412960.0.86956436]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_ProductUnitDescription.qbl b/_Main/BL/Type_MappingBOM/Attribute_ProductUnitDescription.qbl
deleted file mode 100644
index f6da6b5..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_ProductUnitDescription.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductUnitDescription
-{
-  #keys: '3[412960.0.86933925][412960.0.86933924][412960.0.86933926]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_SubstitutionRelationship.qbl b/_Main/BL/Type_MappingBOM/Attribute_SubstitutionRelationship.qbl
deleted file mode 100644
index 5d5a978..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_SubstitutionRelationship.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SubstitutionRelationship
-{
-  #keys: '3[412960.0.86934989][412960.0.86934988][412960.0.86934990]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBOM/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_MappingBOM/Attribute_UnitOfMeasureName.qbl
deleted file mode 100644
index ef7f61e..0000000
--- a/_Main/BL/Type_MappingBOM/Attribute_UnitOfMeasureName.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute UnitOfMeasureName
-{
-  #keys: '3[412960.0.86956563][412960.0.86956562][412960.0.86956564]'
-  ValueType: String
-}
diff --git "a/_Main/BL/Type_MappingBOM/Attribute_UnitUsageOfComponents\043328.qbl" "b/_Main/BL/Type_MappingBOM/Attribute_UnitUsageOfComponents\043328.qbl"
deleted file mode 100644
index db7d74c..0000000
--- "a/_Main/BL/Type_MappingBOM/Attribute_UnitUsageOfComponents\043328.qbl"
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute UnitUsageOfComponents
-{
-  #keys: '3[412960.0.86933989][412960.0.86933988][412960.0.86933990]'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingBOM/StaticMethod_CreateTestData.qbl b/_Main/BL/Type_MappingBOM/StaticMethod_CreateTestData.qbl
deleted file mode 100644
index d374c5e..0000000
--- a/_Main/BL/Type_MappingBOM/StaticMethod_CreateTestData.qbl
+++ /dev/null
@@ -1,25 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod CreateTestData (
-  MacroPlan parent,
-  String businessType,
-  String orgCode,
-  String productCode
-) as MappingBOM
-{
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    value := select( parent, MappingBOM, bom, bom.BusinessType() = businessType and bom.OrganCode() = orgCode and bom.ProductCode() = productCode );
-    if( isnull( value ) ) {
-      value := parent.MappingBOM( relnew, 
-                                  BusinessType := businessType,
-                                  OrganCode := orgCode,
-                                  ProductCode := productCode, 
-                                  ProcessSection := "", 
-                                  ComponentCode := "", 
-                                  AlternativeMaterialCode := "" );
-    }
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_MappingBOM/TypeIndex_BOMTypeIndex.qbl b/_Main/BL/Type_MappingBOM/TypeIndex_BOMTypeIndex.qbl
deleted file mode 100644
index 6fe767b..0000000
--- a/_Main/BL/Type_MappingBOM/TypeIndex_BOMTypeIndex.qbl
+++ /dev/null
@@ -1,32 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-TypeIndex BOMTypeIndex
-{
-  Attributes:
-  [
-    TypeIndexAttribute
-    {
-      ModelElement: OrganCode
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: ComponentCode
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: ProductCode
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: AlternativeMaterialCode
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: ProcessSection
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: BusinessType
-    }
-  ]
-}
diff --git a/_Main/BL/Type_MappingBOM/_ROOT_Type_MappingBOM.qbl b/_Main/BL/Type_MappingBOM/_ROOT_Type_MappingBOM.qbl
deleted file mode 100644
index 8cc965f..0000000
--- a/_Main/BL/Type_MappingBOM/_ROOT_Type_MappingBOM.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type MappingBOM
-{
-  #keys: '5[412960.0.86941816][412960.0.86941814][0.0.0][412960.0.86941815][412960.0.86941817]'
-  BaseType: Object
-  StructuredName: 'MappingBOMs'
-}
diff --git a/_Main/BL/Type_MappingBaseConversionFactor/Attribute_Factor.qbl b/_Main/BL/Type_MappingBaseConversionFactor/Attribute_Factor.qbl
deleted file mode 100644
index 41d39b0..0000000
--- a/_Main/BL/Type_MappingBaseConversionFactor/Attribute_Factor.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Factor
-{
-  #keys: '3[414384.0.583154658][414384.0.583154657][414384.0.583154659]'
-  Description: '绯绘暟'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingBaseConversionFactor/Attribute_IsEnabled.qbl b/_Main/BL/Type_MappingBaseConversionFactor/Attribute_IsEnabled.qbl
deleted file mode 100644
index 7126f0a..0000000
--- a/_Main/BL/Type_MappingBaseConversionFactor/Attribute_IsEnabled.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute IsEnabled
-{
-  #keys: '3[414384.0.583154638][414384.0.583154637][414384.0.583154639]'
-  Description: '鏄惁鏈夋晥'
-  IsReadOnly: true
-  ValueType: Boolean
-}
diff --git a/_Main/BL/Type_MappingBaseConversionFactor/Attribute_ProductId.qbl b/_Main/BL/Type_MappingBaseConversionFactor/Attribute_ProductId.qbl
deleted file mode 100644
index de885d5..0000000
--- a/_Main/BL/Type_MappingBaseConversionFactor/Attribute_ProductId.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductId
-{
-  #keys: '3[414384.0.583154648][414384.0.583154647][414384.0.583154649]'
-  Description: '鐗╂枡缂栫爜'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBaseConversionFactor/Attribute_SourceUnitOfMeasureName.qbl b/_Main/BL/Type_MappingBaseConversionFactor/Attribute_SourceUnitOfMeasureName.qbl
deleted file mode 100644
index 5fd0076..0000000
--- a/_Main/BL/Type_MappingBaseConversionFactor/Attribute_SourceUnitOfMeasureName.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SourceUnitOfMeasureName
-{
-  #keys: '3[414384.0.583154615][414384.0.583154614][414384.0.583154616]'
-  Description: '婧愬崟浣嶅悕'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBaseConversionFactor/Attribute_TargetUnitOfMeasureName.qbl b/_Main/BL/Type_MappingBaseConversionFactor/Attribute_TargetUnitOfMeasureName.qbl
deleted file mode 100644
index fb1c698..0000000
--- a/_Main/BL/Type_MappingBaseConversionFactor/Attribute_TargetUnitOfMeasureName.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute TargetUnitOfMeasureName
-{
-  #keys: '3[414384.0.583154628][414384.0.583154627][414384.0.583154629]'
-  Description: '鐩爣鍗曚綅鍚�'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingBaseConversionFactor/DefaultValue_Factor.qbl b/_Main/BL/Type_MappingBaseConversionFactor/DefaultValue_Factor.qbl
deleted file mode 100644
index f3fbfd1..0000000
--- a/_Main/BL/Type_MappingBaseConversionFactor/DefaultValue_Factor.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  ISOValue: '1'
-  TargetAttribute: Factor
-}
diff --git a/_Main/BL/Type_MappingBaseConversionFactor/TypeIndex_MappingBaseConversionFactorTypeIndex.qbl b/_Main/BL/Type_MappingBaseConversionFactor/TypeIndex_MappingBaseConversionFactorTypeIndex.qbl
deleted file mode 100644
index 6cb1f90..0000000
--- a/_Main/BL/Type_MappingBaseConversionFactor/TypeIndex_MappingBaseConversionFactorTypeIndex.qbl
+++ /dev/null
@@ -1,24 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-TypeIndex MappingBaseConversionFactorTypeIndex
-{
-  Attributes:
-  [
-    TypeIndexAttribute
-    {
-      ModelElement: SourceUnitOfMeasureName
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: TargetUnitOfMeasureName
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: ProductId
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: IsEnabled
-    }
-  ]
-}
diff --git a/_Main/BL/Type_MappingBaseConversionFactor/_ROOT_Type_MappingBaseConversionFactor.qbl b/_Main/BL/Type_MappingBaseConversionFactor/_ROOT_Type_MappingBaseConversionFactor.qbl
deleted file mode 100644
index 46a0348..0000000
--- a/_Main/BL/Type_MappingBaseConversionFactor/_ROOT_Type_MappingBaseConversionFactor.qbl
+++ /dev/null
@@ -1,10 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type MappingBaseConversionFactor
-{
-  #keys: '5[414384.0.583154589][414384.0.583154587][0.0.0][414384.0.583154588][414384.0.583154590]'
-  BaseType: Object
-  Description: 'ETL鍗曚綅杞崲'
-  StructuredName: 'MappingBaseConversionFactors'
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/Attribute_BusinessType.qbl b/_Main/BL/Type_MappingCustomerOrder/Attribute_BusinessType.qbl
deleted file mode 100644
index 9d0d69b..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/Attribute_BusinessType.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute BusinessType
-{
-  #keys: '3[414384.0.583154786][414384.0.583154785][414384.0.583154787]'
-  Description: '浜嬩笟閮�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/Attribute_CurrencyID.qbl b/_Main/BL/Type_MappingCustomerOrder/Attribute_CurrencyID.qbl
deleted file mode 100644
index f09efe0..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/Attribute_CurrencyID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CurrencyID
-{
-  #keys: '3[414384.0.583154796][414384.0.583154795][414384.0.583154797]'
-  Description: '璐у竵'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/Attribute_Customer.qbl b/_Main/BL/Type_MappingCustomerOrder/Attribute_Customer.qbl
deleted file mode 100644
index 33a6c7c..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/Attribute_Customer.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Customer
-{
-  #keys: '3[414384.0.583154806][414384.0.583154805][414384.0.583154807]'
-  Description: '瀹㈡埛鍚嶇О'
-  ValueType: String
-}
diff --git "a/_Main/BL/Type_MappingCustomerOrder/Attribute_CustomerID\043616.qbl" "b/_Main/BL/Type_MappingCustomerOrder/Attribute_CustomerID\043616.qbl"
deleted file mode 100644
index bf6ee59..0000000
--- "a/_Main/BL/Type_MappingCustomerOrder/Attribute_CustomerID\043616.qbl"
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CustomerID
-{
-  #keys: '3[414384.0.583154816][414384.0.583154815][414384.0.583154817]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/Attribute_ID.qbl b/_Main/BL/Type_MappingCustomerOrder/Attribute_ID.qbl
deleted file mode 100644
index 96a56c7..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/Attribute_ID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ID
-{
-  #keys: '3[414384.0.583154833][414384.0.583154832][414384.0.583154834]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/Attribute_IsAvailable.qbl b/_Main/BL/Type_MappingCustomerOrder/Attribute_IsAvailable.qbl
deleted file mode 100644
index 8f209ab..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/Attribute_IsAvailable.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute IsAvailable
-{
-  #keys: '3[414384.0.583160549][414384.0.583160548][414384.0.583160550]'
-  Description: '璁㈠崟鏄惁鍙備笌璁″垝'
-  ValueType: Boolean
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/Attribute_OrderDate.qbl b/_Main/BL/Type_MappingCustomerOrder/Attribute_OrderDate.qbl
deleted file mode 100644
index 8031d73..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/Attribute_OrderDate.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrderDate
-{
-  #keys: '3[414384.0.583154843][414384.0.583154842][414384.0.583154844]'
-  ValueType: Date
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/Attribute_OrderID.qbl b/_Main/BL/Type_MappingCustomerOrder/Attribute_OrderID.qbl
deleted file mode 100644
index b096ea4..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/Attribute_OrderID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrderID
-{
-  #keys: '3[414384.0.583154853][414384.0.583154852][414384.0.583154854]'
-  Description: '璁㈠崟鍙�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/Attribute_OrderLineID.qbl b/_Main/BL/Type_MappingCustomerOrder/Attribute_OrderLineID.qbl
deleted file mode 100644
index a49d0fa..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/Attribute_OrderLineID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrderLineID
-{
-  #keys: '3[414384.0.583154863][414384.0.583154862][414384.0.583154864]'
-  Description: '璁㈠崟琛屽彿'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/Attribute_OrderType.qbl b/_Main/BL/Type_MappingCustomerOrder/Attribute_OrderType.qbl
deleted file mode 100644
index 1da64a6..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/Attribute_OrderType.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrderType
-{
-  #keys: '3[414384.0.583160539][414384.0.583160538][414384.0.583160540]'
-  Description: '璁㈠崟绫诲瀷'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/Attribute_Price.qbl b/_Main/BL/Type_MappingCustomerOrder/Attribute_Price.qbl
deleted file mode 100644
index 375844f..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/Attribute_Price.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Price
-{
-  #keys: '3[414384.0.583154882][414384.0.583154881][414384.0.583154883]'
-  Description: '鍗曚环'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/Attribute_PriorityName.qbl b/_Main/BL/Type_MappingCustomerOrder/Attribute_PriorityName.qbl
deleted file mode 100644
index 7707d63..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/Attribute_PriorityName.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute PriorityName
-{
-  #keys: '3[414384.0.583160479][414384.0.583160478][414384.0.583160480]'
-  Description: '浼樺厛绾�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/Attribute_ProductID.qbl b/_Main/BL/Type_MappingCustomerOrder/Attribute_ProductID.qbl
deleted file mode 100644
index d7648f7..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/Attribute_ProductID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductID
-{
-  #keys: '3[414384.0.583160489][414384.0.583160488][414384.0.583160490]'
-  Description: '浜у搧缂栫爜'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/Attribute_Quantity.qbl b/_Main/BL/Type_MappingCustomerOrder/Attribute_Quantity.qbl
deleted file mode 100644
index a48f0b1..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/Attribute_Quantity.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Quantity
-{
-  #keys: '3[414384.0.583160519][414384.0.583160518][414384.0.583160520]'
-  Description: '鏁伴噺'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_MappingCustomerOrder/Attribute_SalesSegmentName.qbl
deleted file mode 100644
index a0a6ac3..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/Attribute_SalesSegmentName.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SalesSegmentName
-{
-  #keys: '3[414384.0.583160509][414384.0.583160508][414384.0.583160510]'
-  Description: '閿�鍞儴闂ㄥ悕绉�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/Attribute_StockPointID.qbl b/_Main/BL/Type_MappingCustomerOrder/Attribute_StockPointID.qbl
deleted file mode 100644
index 35ae11d..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/Attribute_StockPointID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute StockPointID
-{
-  #keys: '3[414384.0.583160499][414384.0.583160498][414384.0.583160500]'
-  Description: '搴撳瓨鐐瑰敮涓�鏍囪瘑'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_MappingCustomerOrder/Attribute_UnitOfMeasureName.qbl
deleted file mode 100644
index 793aa39..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/Attribute_UnitOfMeasureName.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute UnitOfMeasureName
-{
-  #keys: '3[414384.0.583160529][414384.0.583160528][414384.0.583160530]'
-  Description: '鍗曚綅'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/DefaultValue_IsAvailable.qbl b/_Main/BL/Type_MappingCustomerOrder/DefaultValue_IsAvailable.qbl
deleted file mode 100644
index efaa00d..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/DefaultValue_IsAvailable.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  ISOValue: 'true'
-  TargetAttribute: IsAvailable
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByHalfYear.qbl b/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByHalfYear.qbl
deleted file mode 100644
index 27563ee..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByHalfYear.qbl
+++ /dev/null
@@ -1,21 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetNewSupplyByHalfYear (
-  Strings productNo,
-  MacroPlan macroPlan,
-  Number yearNo,
-  Number halfNo
-) as Real
-{
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    fromMonth := 1 + ( halfNo - 1 ) * 6;
-    toMonth := 6 + ( halfNo - 1 ) * 6;
-    result := 0.0;
-    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
-      result := result + MappingCustomerOrder::GetNewSupplyByMonth( productNo, macroPlan, yearNo, i );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByMonth.qbl b/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByMonth.qbl
deleted file mode 100644
index 478e518..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByMonth.qbl
+++ /dev/null
@@ -1,22 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetNewSupplyByMonth (
-  Strings productNo,
-  MacroPlan macroPlan,
-  Number yearNo,
-  Number monthNo
-) as Real
-{
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := sum( macroPlan, 
-                   MappingCustomerOrder, 
-                   item, 
-                   productNo.Find( item.ProductID() ) > -1 
-                   and item.OrderDate().Year() = yearNo
-                   and item.OrderDate().Month() = monthNo,
-                   item.Quantity() * item.Price() );
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyBySeason.qbl b/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyBySeason.qbl
deleted file mode 100644
index 1a6ad83..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyBySeason.qbl
+++ /dev/null
@@ -1,21 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetNewSupplyBySeason (
-  Strings productNo,
-  MacroPlan macroPlan,
-  Number yearNo,
-  Number seasonNo
-) as Real
-{
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    fromMonth := 1 + ( seasonNo - 1 ) * 3;
-    toMonth := 3 + ( seasonNo - 1 ) * 3;
-    result := 0.0;
-    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
-      result := result + MappingCustomerOrder::GetNewSupplyByMonth( productNo, macroPlan, yearNo, i );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByYear.qbl b/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByYear.qbl
deleted file mode 100644
index bd09df8..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByYear.qbl
+++ /dev/null
@@ -1,18 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetNewSupplyByYear (
-  Strings productNo,
-  MacroPlan macroPlan,
-  Number yearNo
-) as Real
-{
-  TextBody:
-  [*
-    // yypsybs Sep-21-2023 (created)
-    result := 0.0;
-    for( i := 1; i <= 12; i := i + 1 ) {
-      result := result + MappingCustomerOrder::GetNewSupplyByMonth( productNo, macroPlan, yearNo, i );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/TypeIndex_MappingCustomerOrderTypeIndex.qbl b/_Main/BL/Type_MappingCustomerOrder/TypeIndex_MappingCustomerOrderTypeIndex.qbl
deleted file mode 100644
index 1637398..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/TypeIndex_MappingCustomerOrderTypeIndex.qbl
+++ /dev/null
@@ -1,12 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-TypeIndex MappingCustomerOrderTypeIndex
-{
-  Attributes:
-  [
-    TypeIndexAttribute
-    {
-      ModelElement: ID
-    }
-  ]
-}
diff --git a/_Main/BL/Type_MappingCustomerOrder/_ROOT_Type_MappingCustomerOrder.qbl b/_Main/BL/Type_MappingCustomerOrder/_ROOT_Type_MappingCustomerOrder.qbl
deleted file mode 100644
index 6d522dc..0000000
--- a/_Main/BL/Type_MappingCustomerOrder/_ROOT_Type_MappingCustomerOrder.qbl
+++ /dev/null
@@ -1,10 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type MappingCustomerOrder
-{
-  #keys: '5[414384.0.583154763][414384.0.583154761][0.0.0][414384.0.583154762][414384.0.583154764]'
-  BaseType: Object
-  Description: 'ETL璁㈠崟闇�姹�'
-  StructuredName: 'MappingCustomerOrders'
-}
diff --git a/_Main/BL/Type_MappingExternalSupply/Attribute_Date.qbl b/_Main/BL/Type_MappingExternalSupply/Attribute_Date.qbl
deleted file mode 100644
index 26a68d5..0000000
--- a/_Main/BL/Type_MappingExternalSupply/Attribute_Date.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Date
-{
-  #keys: '3[414480.0.61560142][414480.0.61560141][414480.0.61560143]'
-  ValueType: Date
-}
diff --git a/_Main/BL/Type_MappingExternalSupply/Attribute_Description.qbl b/_Main/BL/Type_MappingExternalSupply/Attribute_Description.qbl
deleted file mode 100644
index a278391..0000000
--- a/_Main/BL/Type_MappingExternalSupply/Attribute_Description.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Description
-{
-  #keys: '3[414480.0.61560152][414480.0.61560151][414480.0.61560153]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingExternalSupply/Attribute_ID.qbl b/_Main/BL/Type_MappingExternalSupply/Attribute_ID.qbl
deleted file mode 100644
index 843a93a..0000000
--- a/_Main/BL/Type_MappingExternalSupply/Attribute_ID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ID
-{
-  #keys: '3[414480.0.61560112][414480.0.61560111][414480.0.61560113]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingExternalSupply/Attribute_ManufacturedDate.qbl b/_Main/BL/Type_MappingExternalSupply/Attribute_ManufacturedDate.qbl
deleted file mode 100644
index deced53..0000000
--- a/_Main/BL/Type_MappingExternalSupply/Attribute_ManufacturedDate.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ManufacturedDate
-{
-  #keys: '3[414480.0.61560172][414480.0.61560171][414480.0.61560173]'
-  ValueType: Date
-}
diff --git a/_Main/BL/Type_MappingExternalSupply/Attribute_ProductID.qbl b/_Main/BL/Type_MappingExternalSupply/Attribute_ProductID.qbl
deleted file mode 100644
index acf4d11..0000000
--- a/_Main/BL/Type_MappingExternalSupply/Attribute_ProductID.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductID
-{
-  #keys: '3[414480.0.61560122][414480.0.61560121][414480.0.61560123]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingExternalSupply/Attribute_StockingPointID.qbl b/_Main/BL/Type_MappingExternalSupply/Attribute_StockingPointID.qbl
deleted file mode 100644
index 022f6a1..0000000
--- a/_Main/BL/Type_MappingExternalSupply/Attribute_StockingPointID.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute StockingPointID
-{
-  #keys: '3[414480.0.61560132][414480.0.61560131][414480.0.61560133]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingExternalSupply/Attribute_SupplyType.qbl b/_Main/BL/Type_MappingExternalSupply/Attribute_SupplyType.qbl
deleted file mode 100644
index be7d7e7..0000000
--- a/_Main/BL/Type_MappingExternalSupply/Attribute_SupplyType.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SupplyType
-{
-  #keys: '3[414480.0.61560162][414480.0.61560161][414480.0.61560163]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingExternalSupply/Attribute_UserQuantity.qbl b/_Main/BL/Type_MappingExternalSupply/Attribute_UserQuantity.qbl
deleted file mode 100644
index 0d0001c..0000000
--- a/_Main/BL/Type_MappingExternalSupply/Attribute_UserQuantity.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute UserQuantity
-{
-  #keys: '3[414480.0.61560182][414480.0.61560181][414480.0.61560183]'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingExternalSupply/TypeIndex_MappingExternalSupplyTypeIndex.qbl b/_Main/BL/Type_MappingExternalSupply/TypeIndex_MappingExternalSupplyTypeIndex.qbl
deleted file mode 100644
index d575064..0000000
--- a/_Main/BL/Type_MappingExternalSupply/TypeIndex_MappingExternalSupplyTypeIndex.qbl
+++ /dev/null
@@ -1,12 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-TypeIndex MappingExternalSupplyTypeIndex
-{
-  Attributes:
-  [
-    TypeIndexAttribute
-    {
-      ModelElement: ID
-    }
-  ]
-}
diff --git a/_Main/BL/Type_MappingExternalSupply/_ROOT_Type_MappingExternalSupply.qbl b/_Main/BL/Type_MappingExternalSupply/_ROOT_Type_MappingExternalSupply.qbl
deleted file mode 100644
index 7d24b00..0000000
--- a/_Main/BL/Type_MappingExternalSupply/_ROOT_Type_MappingExternalSupply.qbl
+++ /dev/null
@@ -1,10 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type MappingExternalSupply
-{
-  #keys: '5[414480.0.61560108][414480.0.61560106][0.0.0][414480.0.61560107][414480.0.61560109]'
-  BaseType: Object
-  Description: '鍦ㄩ�斿湪鍒�'
-  StructuredName: 'MappingExternalSupplys'
-}
diff --git a/_Main/BL/Type_MappingForecast/Attribute_BusinessType.qbl b/_Main/BL/Type_MappingForecast/Attribute_BusinessType.qbl
deleted file mode 100644
index 419f914..0000000
--- a/_Main/BL/Type_MappingForecast/Attribute_BusinessType.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute BusinessType
-{
-  #keys: '3[414384.0.583160308][414384.0.583160307][414384.0.583160309]'
-  Description: '浜嬩笟閮�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingForecast/Attribute_CurrencyID.qbl b/_Main/BL/Type_MappingForecast/Attribute_CurrencyID.qbl
deleted file mode 100644
index aa36bcc..0000000
--- a/_Main/BL/Type_MappingForecast/Attribute_CurrencyID.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CurrencyID
-{
-  #keys: '3[414384.0.583160408][414384.0.583160407][414384.0.583160409]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingForecast/Attribute_EndDate.qbl b/_Main/BL/Type_MappingForecast/Attribute_EndDate.qbl
deleted file mode 100644
index d023148..0000000
--- a/_Main/BL/Type_MappingForecast/Attribute_EndDate.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute EndDate
-{
-  #keys: '3[414384.0.583160358][414384.0.583160357][414384.0.583160359]'
-  Description: '缁撴潫鏃ユ湡'
-  ValueType: Date
-}
diff --git a/_Main/BL/Type_MappingForecast/Attribute_ID.qbl b/_Main/BL/Type_MappingForecast/Attribute_ID.qbl
deleted file mode 100644
index b4b1a45..0000000
--- a/_Main/BL/Type_MappingForecast/Attribute_ID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ID
-{
-  #keys: '3[414384.0.583160318][414384.0.583160317][414384.0.583160319]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingForecast/Attribute_Price.qbl b/_Main/BL/Type_MappingForecast/Attribute_Price.qbl
deleted file mode 100644
index 91d21b6..0000000
--- a/_Main/BL/Type_MappingForecast/Attribute_Price.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Price
-{
-  #keys: '3[414384.0.583160388][414384.0.583160387][414384.0.583160389]'
-  Description: '鍗曚环'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingForecast/Attribute_PriorityName.qbl b/_Main/BL/Type_MappingForecast/Attribute_PriorityName.qbl
deleted file mode 100644
index 814e324..0000000
--- a/_Main/BL/Type_MappingForecast/Attribute_PriorityName.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute PriorityName
-{
-  #keys: '3[414384.0.583160398][414384.0.583160397][414384.0.583160399]'
-  Description: '浼樺厛绾у悕绉�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingForecast/Attribute_ProductID.qbl b/_Main/BL/Type_MappingForecast/Attribute_ProductID.qbl
deleted file mode 100644
index 46137a3..0000000
--- a/_Main/BL/Type_MappingForecast/Attribute_ProductID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductID
-{
-  #keys: '3[414384.0.583160328][414384.0.583160327][414384.0.583160329]'
-  Description: '浜у搧鍞竴缂栫爜'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingForecast/Attribute_Quantity.qbl b/_Main/BL/Type_MappingForecast/Attribute_Quantity.qbl
deleted file mode 100644
index 1d306b0..0000000
--- a/_Main/BL/Type_MappingForecast/Attribute_Quantity.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Quantity
-{
-  #keys: '3[414384.0.583160378][414384.0.583160377][414384.0.583160379]'
-  Description: '鏁伴噺'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingForecast/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_MappingForecast/Attribute_SalesSegmentName.qbl
deleted file mode 100644
index 75c8cd0..0000000
--- a/_Main/BL/Type_MappingForecast/Attribute_SalesSegmentName.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SalesSegmentName
-{
-  #keys: '3[414384.0.583160368][414384.0.583160367][414384.0.583160369]'
-  Description: '閿�鍞儴闂ㄥ悕绉�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingForecast/Attribute_StartDate.qbl b/_Main/BL/Type_MappingForecast/Attribute_StartDate.qbl
deleted file mode 100644
index a1bef6a..0000000
--- a/_Main/BL/Type_MappingForecast/Attribute_StartDate.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute StartDate
-{
-  #keys: '3[414384.0.583160348][414384.0.583160347][414384.0.583160349]'
-  Description: '寮�濮嬫棩鏈�'
-  ValueType: Date
-}
diff --git a/_Main/BL/Type_MappingForecast/Attribute_StockingPointID.qbl b/_Main/BL/Type_MappingForecast/Attribute_StockingPointID.qbl
deleted file mode 100644
index d7607ca..0000000
--- a/_Main/BL/Type_MappingForecast/Attribute_StockingPointID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute StockingPointID
-{
-  #keys: '3[414384.0.583160338][414384.0.583160337][414384.0.583160339]'
-  Description: '搴撳瓨鐐笽D'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingForecast/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_MappingForecast/Attribute_UnitOfMeasureName.qbl
deleted file mode 100644
index 7dbcc91..0000000
--- a/_Main/BL/Type_MappingForecast/Attribute_UnitOfMeasureName.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute UnitOfMeasureName
-{
-  #keys: '3[414384.0.583160418][414384.0.583160417][414384.0.583160419]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingForecast/StaticMethod_GetBalanceByMonth.qbl b/_Main/BL/Type_MappingForecast/StaticMethod_GetBalanceByMonth.qbl
deleted file mode 100644
index 6b7351c..0000000
--- a/_Main/BL/Type_MappingForecast/StaticMethod_GetBalanceByMonth.qbl
+++ /dev/null
@@ -1,21 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetBalanceByMonth (
-  Strings productCodes,
-  MacroPlan parent,
-  Number yearNo,
-  Number monthNo
-) as Real
-{
-  Description: 'todo changeParent'
-  TextBody:
-  [*
-    // yypsybs Sep-19-2023 (created)
-    value := sum( parent, 
-                  MappingForecast, 
-                  item,
-                  productCodes.Find( item.ProductID() ) > -1 and yearNo = item.StartDate().Year() and monthNo = item.StartDate().Month(), 
-                  item.Price() * item.Quantity() );
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_MappingForecast/StaticMethod_GetBalanceByYear.qbl b/_Main/BL/Type_MappingForecast/StaticMethod_GetBalanceByYear.qbl
deleted file mode 100644
index dfc4872..0000000
--- a/_Main/BL/Type_MappingForecast/StaticMethod_GetBalanceByYear.qbl
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetBalanceByYear (
-  Strings productCodes,
-  MacroPlan parent,
-  Number yearNo
-) as Real
-{
-  Description: 'todo changeParent'
-  TextBody:
-  [*
-    // yypsybs Sep-19-2023 (created)
-    value := sum( parent, 
-                  MappingForecast, 
-                  item,
-                  productCodes.Find( item.ProductID() ) > -1 and yearNo = item.StartDate().Year(), 
-                  item.Price() * item.Quantity() );
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_MappingForecast/StaticMethod_GetQuantityByHalfYear.qbl b/_Main/BL/Type_MappingForecast/StaticMethod_GetQuantityByHalfYear.qbl
deleted file mode 100644
index ecf844c..0000000
--- a/_Main/BL/Type_MappingForecast/StaticMethod_GetQuantityByHalfYear.qbl
+++ /dev/null
@@ -1,24 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetQuantityByHalfYear (
-  Strings productCodes,
-  MacroPlan parent,
-  Number yearNo,
-  Number halfNo
-) as Real
-{
-  TextBody:
-  [*
-    // yypsybs Sep-19-2023 (created)
-    value := 0.0;
-    
-    startMonth := 1 + ( halfNo - 1 ) * 6;
-    endMonth := 6 + ( halfNo - 1 ) * 6;
-    
-    for( monthNo := startMonth; monthNo <= endMonth; monthNo := monthNo + 1 ) {
-      value := value + MappingForecast::GetQuantityByMonth( productCodes, parent, yearNo, monthNo );
-    }
-    
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_MappingForecast/StaticMethod_GetQuantityByMonth.qbl b/_Main/BL/Type_MappingForecast/StaticMethod_GetQuantityByMonth.qbl
deleted file mode 100644
index d3ae8c1..0000000
--- a/_Main/BL/Type_MappingForecast/StaticMethod_GetQuantityByMonth.qbl
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetQuantityByMonth (
-  Strings productCodes,
-  MacroPlan parent,
-  Number yearNo,
-  Number monthNo
-) as Real
-{
-  TextBody:
-  [*
-    // yypsybs Sep-19-2023 (created)
-    value := sum( parent, 
-                  MappingForecast, 
-                  item,
-                  productCodes.Find( item.ProductID() ) > -1 and yearNo = item.StartDate().Year() and monthNo = item.StartDate().Month(), 
-                  item.Quantity() );
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_MappingForecast/StaticMethod_GetQuantityBySeason.qbl b/_Main/BL/Type_MappingForecast/StaticMethod_GetQuantityBySeason.qbl
deleted file mode 100644
index 3b4ac41..0000000
--- a/_Main/BL/Type_MappingForecast/StaticMethod_GetQuantityBySeason.qbl
+++ /dev/null
@@ -1,24 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetQuantityBySeason (
-  Strings productCodes,
-  MacroPlan parent,
-  Number yearNo,
-  Number seasonNo
-) as Real
-{
-  TextBody:
-  [*
-    // yypsybs Sep-19-2023 (created)
-    value := 0.0;
-    
-    startMonth := 1 + ( seasonNo - 1 ) * 3;
-    endMonth := 3 + ( seasonNo - 1 ) * 3;
-    
-    for( monthNo := startMonth; monthNo <= endMonth; monthNo := monthNo + 1 ) {
-      value := value + MappingForecast::GetQuantityByMonth( productCodes, parent, yearNo, monthNo );
-    }
-    
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_MappingForecast/StaticMethod_GetQuantityByYear.qbl b/_Main/BL/Type_MappingForecast/StaticMethod_GetQuantityByYear.qbl
deleted file mode 100644
index 31db8aa..0000000
--- a/_Main/BL/Type_MappingForecast/StaticMethod_GetQuantityByYear.qbl
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetQuantityByYear (
-  Strings productCodes,
-  MacroPlan parent,
-  Number yearNo
-) as Real
-{
-  Description: 'todo changeParent'
-  TextBody:
-  [*
-    // yypsybs Sep-19-2023 (created)
-    value := sum( parent, 
-                  MappingForecast, 
-                  item,
-                  productCodes.Find( item.ProductID() ) > -1 and yearNo = item.StartDate().Year(), 
-                  item.Quantity() );
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_MappingForecast/TypeIndex_MappingForecastTypeIndex.qbl b/_Main/BL/Type_MappingForecast/TypeIndex_MappingForecastTypeIndex.qbl
deleted file mode 100644
index b1edfb5..0000000
--- a/_Main/BL/Type_MappingForecast/TypeIndex_MappingForecastTypeIndex.qbl
+++ /dev/null
@@ -1,12 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-TypeIndex MappingForecastTypeIndex
-{
-  Attributes:
-  [
-    TypeIndexAttribute
-    {
-      ModelElement: ID
-    }
-  ]
-}
diff --git a/_Main/BL/Type_MappingForecast/_ROOT_Type_MappingForecast.qbl b/_Main/BL/Type_MappingForecast/_ROOT_Type_MappingForecast.qbl
deleted file mode 100644
index b96f05c..0000000
--- a/_Main/BL/Type_MappingForecast/_ROOT_Type_MappingForecast.qbl
+++ /dev/null
@@ -1,10 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type MappingForecast
-{
-  #keys: '5[414384.0.583160279][414384.0.583160277][0.0.0][414384.0.583160278][414384.0.583160280]'
-  BaseType: Object
-  Description: 'ETL璁㈠崟棰勬祴'
-  StructuredName: 'MappingForecasts'
-}
diff --git a/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_AccountName.qbl b/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_AccountName.qbl
deleted file mode 100644
index f275616..0000000
--- a/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_AccountName.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute AccountName
-{
-  #keys: '3[414384.0.601560062][414384.0.601560061][414384.0.601560063]'
-  Description: '绉戠洰鍚嶇О'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_Cost.qbl b/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_Cost.qbl
deleted file mode 100644
index 0b9d627..0000000
--- a/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_Cost.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Cost
-{
-  #keys: '3[414384.0.601560065][414384.0.601560064][414384.0.601560066]'
-  Description: '鎴愭湰'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_CostDriver.qbl b/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_CostDriver.qbl
deleted file mode 100644
index d6c93bc..0000000
--- a/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_CostDriver.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CostDriver
-{
-  #keys: '3[414384.0.601560068][414384.0.601560067][414384.0.601560069]'
-  Description: '鎴愭湰鍔ㄥ洜'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_ID.qbl b/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_ID.qbl
deleted file mode 100644
index 9d9899e..0000000
--- a/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_ID.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ID
-{
-  #keys: '3[414384.0.601560071][414384.0.601560070][414384.0.601560072]'
-  Description: '鍞竴鏍囪瘑'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_ProductID.qbl b/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_ProductID.qbl
deleted file mode 100644
index 17cc4f1..0000000
--- a/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_ProductID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductID
-{
-  #keys: '3[414384.0.601560074][414384.0.601560073][414384.0.601560075]'
-  Description: '鐗╂枡缂栫爜'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_Start.qbl b/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_Start.qbl
deleted file mode 100644
index 4f793fc..0000000
--- a/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_Start.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Start
-{
-  #keys: '3[414384.0.601560077][414384.0.601560076][414384.0.601560078]'
-  Description: '鐢熸晥鏃堕棿'
-  ValueType: Date
-}
diff --git a/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_StockingPointID.qbl b/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_StockingPointID.qbl
deleted file mode 100644
index 5823c8c..0000000
--- a/_Main/BL/Type_MappingInventoryValueAndCost/Attribute_StockingPointID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute StockingPointID
-{
-  #keys: '3[414384.0.601560080][414384.0.601560079][414384.0.601560081]'
-  Description: '搴撳瓨鐐圭紪鐮�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingInventoryValueAndCost/DefaultValue_AccountName.qbl b/_Main/BL/Type_MappingInventoryValueAndCost/DefaultValue_AccountName.qbl
deleted file mode 100644
index 51766e0..0000000
--- a/_Main/BL/Type_MappingInventoryValueAndCost/DefaultValue_AccountName.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  ISOValue: 'Inventory holding cost'
-  TargetAttribute: AccountName
-}
diff --git a/_Main/BL/Type_MappingInventoryValueAndCost/DefaultValue_CostDriver.qbl b/_Main/BL/Type_MappingInventoryValueAndCost/DefaultValue_CostDriver.qbl
deleted file mode 100644
index e26561c..0000000
--- a/_Main/BL/Type_MappingInventoryValueAndCost/DefaultValue_CostDriver.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  ISOValue: 'Inventory holding'
-  TargetAttribute: CostDriver
-}
diff --git a/_Main/BL/Type_MappingInventoryValueAndCost/TypeIndex_MappingInventoryCostTypeIndex.qbl b/_Main/BL/Type_MappingInventoryValueAndCost/TypeIndex_MappingInventoryCostTypeIndex.qbl
deleted file mode 100644
index c55e5f5..0000000
--- a/_Main/BL/Type_MappingInventoryValueAndCost/TypeIndex_MappingInventoryCostTypeIndex.qbl
+++ /dev/null
@@ -1,12 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-TypeIndex MappingInventoryCostTypeIndex
-{
-  Attributes:
-  [
-    TypeIndexAttribute
-    {
-      ModelElement: ID
-    }
-  ]
-}
diff --git a/_Main/BL/Type_MappingInventoryValueAndCost/_ROOT_Type_MappingInventoryValueAndCost.qbl b/_Main/BL/Type_MappingInventoryValueAndCost/_ROOT_Type_MappingInventoryValueAndCost.qbl
deleted file mode 100644
index f8c6551..0000000
--- a/_Main/BL/Type_MappingInventoryValueAndCost/_ROOT_Type_MappingInventoryValueAndCost.qbl
+++ /dev/null
@@ -1,10 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type MappingInventoryValueAndCost
-{
-  #keys: '5[414384.0.601560012][414384.0.601560010][0.0.0][414384.0.601560011][414384.0.601560013]'
-  BaseType: Object
-  Description: 'ETL搴撳瓨鎴愭湰'
-  StructuredName: 'MappingInventoryValueAndCosts'
-}
diff --git a/_Main/BL/Type_MappingOperation/Attribute_ActualCapacity.qbl b/_Main/BL/Type_MappingOperation/Attribute_ActualCapacity.qbl
deleted file mode 100644
index 9e79672..0000000
--- a/_Main/BL/Type_MappingOperation/Attribute_ActualCapacity.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ActualCapacity
-{
-  #keys: '3[412960.0.86978472][412960.0.86978471][412960.0.86978473]'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingOperation/Attribute_BusinessType.qbl b/_Main/BL/Type_MappingOperation/Attribute_BusinessType.qbl
deleted file mode 100644
index 4709bfd..0000000
--- a/_Main/BL/Type_MappingOperation/Attribute_BusinessType.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute BusinessType
-{
-  #keys: '3[412960.0.86977961][412960.0.86977960][412960.0.86977962]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingOperation/Attribute_Line.qbl b/_Main/BL/Type_MappingOperation/Attribute_Line.qbl
deleted file mode 100644
index a52b854..0000000
--- a/_Main/BL/Type_MappingOperation/Attribute_Line.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Line
-{
-  #keys: '3[412960.0.86978344][412960.0.86978343][412960.0.86978345]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingOperation/Attribute_MaximumQuantity.qbl b/_Main/BL/Type_MappingOperation/Attribute_MaximumQuantity.qbl
deleted file mode 100644
index a382633..0000000
--- a/_Main/BL/Type_MappingOperation/Attribute_MaximumQuantity.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MaximumQuantity
-{
-  #keys: '3[412960.0.86978664][412960.0.86978663][412960.0.86978665]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_MappingOperation/Attribute_MinimumQuantity.qbl b/_Main/BL/Type_MappingOperation/Attribute_MinimumQuantity.qbl
deleted file mode 100644
index 4065295..0000000
--- a/_Main/BL/Type_MappingOperation/Attribute_MinimumQuantity.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MinimumQuantity
-{
-  #keys: '3[412960.0.86978600][412960.0.86978599][412960.0.86978601]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_MappingOperation/Attribute_OrganCode.qbl b/_Main/BL/Type_MappingOperation/Attribute_OrganCode.qbl
deleted file mode 100644
index b3eef88..0000000
--- a/_Main/BL/Type_MappingOperation/Attribute_OrganCode.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrganCode
-{
-  #keys: '3[412960.0.86978024][412960.0.86978023][412960.0.86978025]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingOperation/Attribute_OrganName.qbl b/_Main/BL/Type_MappingOperation/Attribute_OrganName.qbl
deleted file mode 100644
index b2250d8..0000000
--- a/_Main/BL/Type_MappingOperation/Attribute_OrganName.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrganName
-{
-  #keys: '3[412960.0.86978088][412960.0.86978087][412960.0.86978089]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingOperation/Attribute_PlantName.qbl b/_Main/BL/Type_MappingOperation/Attribute_PlantName.qbl
deleted file mode 100644
index ec05566..0000000
--- a/_Main/BL/Type_MappingOperation/Attribute_PlantName.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute PlantName
-{
-  #keys: '3[412960.0.86978216][412960.0.86978215][412960.0.86978217]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingOperation/Attribute_ProcessSection.qbl b/_Main/BL/Type_MappingOperation/Attribute_ProcessSection.qbl
deleted file mode 100644
index 0716724..0000000
--- a/_Main/BL/Type_MappingOperation/Attribute_ProcessSection.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProcessSection
-{
-  #keys: '3[412960.0.86978280][412960.0.86978279][412960.0.86978281]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingOperation/Attribute_ProductID.qbl b/_Main/BL/Type_MappingOperation/Attribute_ProductID.qbl
deleted file mode 100644
index 9e2b692..0000000
--- a/_Main/BL/Type_MappingOperation/Attribute_ProductID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductID
-{
-  #keys: '3[412960.0.86978152][412960.0.86978151][412960.0.86978153]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingOperation/Attribute_SequenceNumber.qbl b/_Main/BL/Type_MappingOperation/Attribute_SequenceNumber.qbl
deleted file mode 100644
index fed9689..0000000
--- a/_Main/BL/Type_MappingOperation/Attribute_SequenceNumber.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SequenceNumber
-{
-  #keys: '3[412960.0.86978408][412960.0.86978407][412960.0.86978409]'
-  IsReadOnly: true
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_MappingOperation/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_MappingOperation/Attribute_UnitOfMeasureName.qbl
deleted file mode 100644
index 963cca9..0000000
--- a/_Main/BL/Type_MappingOperation/Attribute_UnitOfMeasureName.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute UnitOfMeasureName
-{
-  #keys: '3[412960.0.86978728][412960.0.86978727][412960.0.86978729]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingOperation/Attribute_UserLeadTime.qbl b/_Main/BL/Type_MappingOperation/Attribute_UserLeadTime.qbl
deleted file mode 100644
index b88d70e..0000000
--- a/_Main/BL/Type_MappingOperation/Attribute_UserLeadTime.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute UserLeadTime
-{
-  #keys: '3[412960.0.86978536][412960.0.86978535][412960.0.86978537]'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingOperation/StaticMethod_FindMinSeq.qbl b/_Main/BL/Type_MappingOperation/StaticMethod_FindMinSeq.qbl
deleted file mode 100644
index 74aadb6..0000000
--- a/_Main/BL/Type_MappingOperation/StaticMethod_FindMinSeq.qbl
+++ /dev/null
@@ -1,17 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod FindMinSeq (
-  MacroPlan macroPlan,
-  String orgCode,
-  String productId,
-  String processSection
-) as Number
-{
-  TextBody:
-  [*
-    // yypsybs Aug-22-2023 (created)
-    return guard (min( macroPlan, MappingOperation, item, 
-                item.OrganCode() = orgCode and item.ProductID() = productId and item.ProcessSection() = processSection,
-                item.SequenceNumber() ), Number::MinNumber() );
-  *]
-}
diff --git a/_Main/BL/Type_MappingOperation/TypeIndex_MappingOperationTypeIndex.qbl b/_Main/BL/Type_MappingOperation/TypeIndex_MappingOperationTypeIndex.qbl
deleted file mode 100644
index 2fc4aff..0000000
--- a/_Main/BL/Type_MappingOperation/TypeIndex_MappingOperationTypeIndex.qbl
+++ /dev/null
@@ -1,36 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-TypeIndex MappingOperationTypeIndex
-{
-  Attributes:
-  [
-    TypeIndexAttribute
-    {
-      ModelElement: ProcessSection
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: PlantName
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: BusinessType
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: Line
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: ProductID
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: SequenceNumber
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: OrganCode
-    }
-  ]
-}
diff --git a/_Main/BL/Type_MappingOperation/_ROOT_Type_MappingOperation.qbl b/_Main/BL/Type_MappingOperation/_ROOT_Type_MappingOperation.qbl
deleted file mode 100644
index 0ec2e02..0000000
--- a/_Main/BL/Type_MappingOperation/_ROOT_Type_MappingOperation.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type MappingOperation
-{
-  #keys: '5[412960.0.86977940][412960.0.86977938][0.0.0][412960.0.86977939][412960.0.86977941]'
-  BaseType: Object
-  StructuredName: 'MappingOperations'
-}
diff --git a/_Main/BL/Type_MappingOperationCost/Attribute_AccountName.qbl b/_Main/BL/Type_MappingOperationCost/Attribute_AccountName.qbl
deleted file mode 100644
index 9a81230..0000000
--- a/_Main/BL/Type_MappingOperationCost/Attribute_AccountName.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute AccountName
-{
-  #keys: '3[412960.0.94793446][412960.0.94793445][412960.0.94793447]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingOperationCost/Attribute_Cost.qbl b/_Main/BL/Type_MappingOperationCost/Attribute_Cost.qbl
deleted file mode 100644
index b0c351a..0000000
--- a/_Main/BL/Type_MappingOperationCost/Attribute_Cost.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Cost
-{
-  #keys: '3[412960.0.94793456][412960.0.94793455][412960.0.94793457]'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingOperationCost/Attribute_CostDriver.qbl b/_Main/BL/Type_MappingOperationCost/Attribute_CostDriver.qbl
deleted file mode 100644
index 2651c65..0000000
--- a/_Main/BL/Type_MappingOperationCost/Attribute_CostDriver.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CostDriver
-{
-  #keys: '3[412960.0.94793466][412960.0.94793465][412960.0.94793467]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingOperationCost/Attribute_ID.qbl b/_Main/BL/Type_MappingOperationCost/Attribute_ID.qbl
deleted file mode 100644
index 981e7e2..0000000
--- a/_Main/BL/Type_MappingOperationCost/Attribute_ID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ID
-{
-  #keys: '3[412960.0.94793476][412960.0.94793475][412960.0.94793477]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingOperationCost/Attribute_LengthOfTime.qbl b/_Main/BL/Type_MappingOperationCost/Attribute_LengthOfTime.qbl
deleted file mode 100644
index 02977c1..0000000
--- a/_Main/BL/Type_MappingOperationCost/Attribute_LengthOfTime.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute LengthOfTime
-{
-  #keys: '3[412960.0.94793486][412960.0.94793485][412960.0.94793487]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_MappingOperationCost/Attribute_OrgCode.qbl b/_Main/BL/Type_MappingOperationCost/Attribute_OrgCode.qbl
deleted file mode 100644
index 86c20db..0000000
--- a/_Main/BL/Type_MappingOperationCost/Attribute_OrgCode.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrgCode
-{
-  #keys: '3[412960.0.94793496][412960.0.94793495][412960.0.94793497]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingOperationCost/Attribute_ProductID.qbl b/_Main/BL/Type_MappingOperationCost/Attribute_ProductID.qbl
deleted file mode 100644
index af70a16..0000000
--- a/_Main/BL/Type_MappingOperationCost/Attribute_ProductID.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductID
-{
-  #keys: '3[412960.0.94793506][412960.0.94793505][412960.0.94793507]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingOperationCost/Attribute_Start.qbl b/_Main/BL/Type_MappingOperationCost/Attribute_Start.qbl
deleted file mode 100644
index 7747d1c..0000000
--- a/_Main/BL/Type_MappingOperationCost/Attribute_Start.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Start
-{
-  #keys: '3[412960.0.94793516][412960.0.94793515][412960.0.94793517]'
-  ValueType: Date
-}
diff --git a/_Main/BL/Type_MappingOperationCost/Attribute_TimeUnit.qbl b/_Main/BL/Type_MappingOperationCost/Attribute_TimeUnit.qbl
deleted file mode 100644
index e88a460..0000000
--- a/_Main/BL/Type_MappingOperationCost/Attribute_TimeUnit.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute TimeUnit
-{
-  #keys: '3[412960.0.94793526][412960.0.94793525][412960.0.94793527]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingOperationCost/TypeIndex_MappingOperationCostTypeIndex.qbl b/_Main/BL/Type_MappingOperationCost/TypeIndex_MappingOperationCostTypeIndex.qbl
deleted file mode 100644
index 56c3d31..0000000
--- a/_Main/BL/Type_MappingOperationCost/TypeIndex_MappingOperationCostTypeIndex.qbl
+++ /dev/null
@@ -1,12 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-TypeIndex MappingOperationCostTypeIndex
-{
-  Attributes:
-  [
-    TypeIndexAttribute
-    {
-      ModelElement: ID
-    }
-  ]
-}
diff --git a/_Main/BL/Type_MappingOperationCost/_ROOT_Type_MappingOperationCost.qbl b/_Main/BL/Type_MappingOperationCost/_ROOT_Type_MappingOperationCost.qbl
deleted file mode 100644
index c6b4926..0000000
--- a/_Main/BL/Type_MappingOperationCost/_ROOT_Type_MappingOperationCost.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type MappingOperationCost
-{
-  #keys: '5[412960.0.94793442][412960.0.94793440][0.0.0][412960.0.94793441][412960.0.94793443]'
-  BaseType: Object
-  StructuredName: 'MappingOperationCosts'
-}
diff --git a/_Main/BL/Type_MappingProduct/Attribute_BusinessType.qbl b/_Main/BL/Type_MappingProduct/Attribute_BusinessType.qbl
deleted file mode 100644
index 1d3a4b3..0000000
--- a/_Main/BL/Type_MappingProduct/Attribute_BusinessType.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute BusinessType
-{
-  #keys: '3[414480.0.61560268][414480.0.61560267][414480.0.61560269]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingProduct/Attribute_CommonBusiness.qbl b/_Main/BL/Type_MappingProduct/Attribute_CommonBusiness.qbl
deleted file mode 100644
index 6c38dd3..0000000
--- a/_Main/BL/Type_MappingProduct/Attribute_CommonBusiness.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CommonBusiness
-{
-  #keys: '3[414480.0.61560298][414480.0.61560297][414480.0.61560299]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingProduct/Attribute_EndDate.qbl b/_Main/BL/Type_MappingProduct/Attribute_EndDate.qbl
deleted file mode 100644
index 869e122..0000000
--- a/_Main/BL/Type_MappingProduct/Attribute_EndDate.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute EndDate
-{
-  #keys: '3[414480.0.61534728][414480.0.61534727][414480.0.61534729]'
-  ValueType: Date
-}
diff --git a/_Main/BL/Type_MappingProduct/Attribute_ID.qbl b/_Main/BL/Type_MappingProduct/Attribute_ID.qbl
deleted file mode 100644
index 5d5d0a4..0000000
--- a/_Main/BL/Type_MappingProduct/Attribute_ID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ID
-{
-  #keys: '3[414480.0.61560258][414480.0.61560257][414480.0.61560259]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingProduct/Attribute_IsCommon.qbl b/_Main/BL/Type_MappingProduct/Attribute_IsCommon.qbl
deleted file mode 100644
index 2c6dcc1..0000000
--- a/_Main/BL/Type_MappingProduct/Attribute_IsCommon.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute IsCommon
-{
-  #keys: '3[414480.0.61560288][414480.0.61560287][414480.0.61560289]'
-  ValueType: Boolean
-}
diff --git "a/_Main/BL/Type_MappingProduct/Attribute_KeyProduct\043814.qbl" "b/_Main/BL/Type_MappingProduct/Attribute_KeyProduct\043814.qbl"
deleted file mode 100644
index a24de96..0000000
--- "a/_Main/BL/Type_MappingProduct/Attribute_KeyProduct\043814.qbl"
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute KeyProduct
-{
-  #keys: '3[414480.0.61534708][414480.0.61534707][414480.0.61534709]'
-  ValueType: Boolean
-}
diff --git a/_Main/BL/Type_MappingProduct/Attribute_Name.qbl b/_Main/BL/Type_MappingProduct/Attribute_Name.qbl
deleted file mode 100644
index ee3c048..0000000
--- a/_Main/BL/Type_MappingProduct/Attribute_Name.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Name
-{
-  #keys: '3[414480.0.61534675][414480.0.61534674][414480.0.61534676]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingProduct/Attribute_Notes.qbl b/_Main/BL/Type_MappingProduct/Attribute_Notes.qbl
deleted file mode 100644
index 2c845d2..0000000
--- a/_Main/BL/Type_MappingProduct/Attribute_Notes.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Notes
-{
-  #keys: '3[414480.0.61534718][414480.0.61534717][414480.0.61534719]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingProduct/Attribute_OrgCode.qbl b/_Main/BL/Type_MappingProduct/Attribute_OrgCode.qbl
deleted file mode 100644
index 6569df8..0000000
--- a/_Main/BL/Type_MappingProduct/Attribute_OrgCode.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrgCode
-{
-  #keys: '3[414384.0.795680117][414384.0.795680116][414384.0.795680118]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingProduct/Attribute_ProductMajorType.qbl b/_Main/BL/Type_MappingProduct/Attribute_ProductMajorType.qbl
deleted file mode 100644
index a1a1d2e..0000000
--- a/_Main/BL/Type_MappingProduct/Attribute_ProductMajorType.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductMajorType
-{
-  #keys: '3[414480.0.61534652][414480.0.61534651][414480.0.61534653]'
-  Description: '鐗╂枡澶х被'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingProduct/Attribute_ProductSubclassType.qbl b/_Main/BL/Type_MappingProduct/Attribute_ProductSubclassType.qbl
deleted file mode 100644
index 7eacc67..0000000
--- a/_Main/BL/Type_MappingProduct/Attribute_ProductSubclassType.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductSubclassType
-{
-  #keys: '3[414480.0.61534662][414480.0.61534661][414480.0.61534663]'
-  Description: '鐗╂枡灏忕被'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingProduct/Attribute_ShelfLife.qbl b/_Main/BL/Type_MappingProduct/Attribute_ShelfLife.qbl
deleted file mode 100644
index 8f3b139..0000000
--- a/_Main/BL/Type_MappingProduct/Attribute_ShelfLife.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ShelfLife
-{
-  #keys: '3[414480.0.61534698][414480.0.61534697][414480.0.61534699]'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingProduct/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_MappingProduct/Attribute_UnitOfMeasureName.qbl
deleted file mode 100644
index 585f237..0000000
--- a/_Main/BL/Type_MappingProduct/Attribute_UnitOfMeasureName.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute UnitOfMeasureName
-{
-  #keys: '3[414480.0.61534685][414480.0.61534684][414480.0.61534686]'
-  Description: '鐗╂枡鍗曚綅'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingProduct/StaticMethod_GetByProductId.qbl b/_Main/BL/Type_MappingProduct/StaticMethod_GetByProductId.qbl
deleted file mode 100644
index c8ac218..0000000
--- a/_Main/BL/Type_MappingProduct/StaticMethod_GetByProductId.qbl
+++ /dev/null
@@ -1,17 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetByProductId (
-  MacroPlan parent,
-  String productId
-) as MappingProduct
-{
-  Description: '鏍规嵁鏂欏彿鏌ヨ褰�'
-  TextBody:
-  [*
-    // yypsybs Sep-12-2023 (created)
-    
-    // todo 淇敼parent绫诲瀷
-    value := select( parent, MappingProduct, item, item.ID() = productId );
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_MappingProduct/TypeIndex_MappingProductTypeIndex.qbl b/_Main/BL/Type_MappingProduct/TypeIndex_MappingProductTypeIndex.qbl
deleted file mode 100644
index 56be564..0000000
--- a/_Main/BL/Type_MappingProduct/TypeIndex_MappingProductTypeIndex.qbl
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-TypeIndex MappingProductTypeIndex
-{
-  Attributes:
-  [
-    TypeIndexAttribute
-    {
-      ModelElement: ID
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: BusinessType
-    }
-  ]
-}
diff --git a/_Main/BL/Type_MappingProduct/_ROOT_Type_MappingProduct.qbl b/_Main/BL/Type_MappingProduct/_ROOT_Type_MappingProduct.qbl
deleted file mode 100644
index 305fd9d..0000000
--- a/_Main/BL/Type_MappingProduct/_ROOT_Type_MappingProduct.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type MappingProduct
-{
-  #keys: '5[414480.0.61581356][414480.0.61581354][0.0.0][414480.0.61581355][414480.0.61581357]'
-  BaseType: Object
-  StructuredName: 'MappingProducts'
-}
diff --git a/_Main/BL/Type_MappingProductInLine/Attribute_LineID.qbl b/_Main/BL/Type_MappingProductInLine/Attribute_LineID.qbl
deleted file mode 100644
index f5a5b03..0000000
--- a/_Main/BL/Type_MappingProductInLine/Attribute_LineID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute LineID
-{
-  #keys: '3[412960.0.86844688][412960.0.86844687][412960.0.86844689]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingProductInLine/Attribute_ProductID.qbl b/_Main/BL/Type_MappingProductInLine/Attribute_ProductID.qbl
deleted file mode 100644
index 1d12810..0000000
--- a/_Main/BL/Type_MappingProductInLine/Attribute_ProductID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductID
-{
-  #keys: '3[412960.0.86844678][412960.0.86844677][412960.0.86844679]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingProductInLine/TypeIndex_MappingProductInLineTypeIndex.qbl b/_Main/BL/Type_MappingProductInLine/TypeIndex_MappingProductInLineTypeIndex.qbl
deleted file mode 100644
index e03b2fd..0000000
--- a/_Main/BL/Type_MappingProductInLine/TypeIndex_MappingProductInLineTypeIndex.qbl
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-TypeIndex MappingProductInLineTypeIndex
-{
-  Attributes:
-  [
-    TypeIndexAttribute
-    {
-      ModelElement: ProductID
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: LineID
-    }
-  ]
-}
diff --git a/_Main/BL/Type_MappingProductInLine/_ROOT_Type_MappingProductInLane.qbl b/_Main/BL/Type_MappingProductInLine/_ROOT_Type_MappingProductInLane.qbl
deleted file mode 100644
index dc33bce..0000000
--- a/_Main/BL/Type_MappingProductInLine/_ROOT_Type_MappingProductInLane.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type MappingProductInLane
-{
-  #keys: '5[412960.0.86844659][412960.0.86844657][0.0.0][412960.0.86844658][412960.0.86844660]'
-  BaseType: Object
-  StructuredName: 'MappingProductInLanes'
-}
diff --git a/_Main/BL/Type_MappingSalesSegment/Attribute_BusinessType.qbl b/_Main/BL/Type_MappingSalesSegment/Attribute_BusinessType.qbl
deleted file mode 100644
index 7dd6ffa..0000000
--- a/_Main/BL/Type_MappingSalesSegment/Attribute_BusinessType.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute BusinessType
-{
-  #keys: '3[414384.0.583160133][414384.0.583160132][414384.0.583160134]'
-  Description: '浜嬩笟閮�'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingSalesSegment/Attribute_DisplayIndex.qbl b/_Main/BL/Type_MappingSalesSegment/Attribute_DisplayIndex.qbl
deleted file mode 100644
index 560dc81..0000000
--- a/_Main/BL/Type_MappingSalesSegment/Attribute_DisplayIndex.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DisplayIndex
-{
-  #keys: '3[414384.0.583160163][414384.0.583160162][414384.0.583160164]'
-  Description: '鏄剧ず椤哄簭缂栧彿'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_MappingSalesSegment/Attribute_Name.qbl b/_Main/BL/Type_MappingSalesSegment/Attribute_Name.qbl
deleted file mode 100644
index 34acb74..0000000
--- a/_Main/BL/Type_MappingSalesSegment/Attribute_Name.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Name
-{
-  #keys: '3[414384.0.583160143][414384.0.583160142][414384.0.583160144]'
-  Description: '瀹㈡埛鍚嶇О'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingSalesSegment/Attribute_ParentName.qbl b/_Main/BL/Type_MappingSalesSegment/Attribute_ParentName.qbl
deleted file mode 100644
index 2dae528..0000000
--- a/_Main/BL/Type_MappingSalesSegment/Attribute_ParentName.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ParentName
-{
-  #keys: '3[414384.0.583160153][414384.0.583160152][414384.0.583160154]'
-  Description: '閿�鍞儴闂ㄥ垎绫�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingSalesSegment/TypeIndex_MappingSalesSegmentTypeIndex.qbl b/_Main/BL/Type_MappingSalesSegment/TypeIndex_MappingSalesSegmentTypeIndex.qbl
deleted file mode 100644
index 8d2d6f4..0000000
--- a/_Main/BL/Type_MappingSalesSegment/TypeIndex_MappingSalesSegmentTypeIndex.qbl
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-TypeIndex MappingSalesSegmentTypeIndex
-{
-  Attributes:
-  [
-    TypeIndexAttribute
-    {
-      ModelElement: BusinessType
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: Name
-    }
-  ]
-}
diff --git a/_Main/BL/Type_MappingSalesSegment/_ROOT_Type_MappingSalesSegment.qbl b/_Main/BL/Type_MappingSalesSegment/_ROOT_Type_MappingSalesSegment.qbl
deleted file mode 100644
index 36a7d8b..0000000
--- a/_Main/BL/Type_MappingSalesSegment/_ROOT_Type_MappingSalesSegment.qbl
+++ /dev/null
@@ -1,10 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type MappingSalesSegment
-{
-  #keys: '5[414384.0.583160110][414384.0.583160108][0.0.0][414384.0.583160109][414384.0.583160111]'
-  BaseType: Object
-  Description: 'ETL閿�鍞儴闂�'
-  StructuredName: 'MappingSalesSegments'
-}
diff --git a/_Main/BL/Type_MappingUnit/Attribute_Equipment.qbl b/_Main/BL/Type_MappingUnit/Attribute_Equipment.qbl
deleted file mode 100644
index 9031b89..0000000
--- a/_Main/BL/Type_MappingUnit/Attribute_Equipment.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Equipment
-{
-  #keys: '3[412960.0.96453712][412960.0.96453711][412960.0.96453713]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingUnit/Attribute_EquipmentID.qbl b/_Main/BL/Type_MappingUnit/Attribute_EquipmentID.qbl
deleted file mode 100644
index a058fae..0000000
--- a/_Main/BL/Type_MappingUnit/Attribute_EquipmentID.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute EquipmentID
-{
-  #keys: '3[412960.0.96453702][412960.0.96453701][412960.0.96453703]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingUnit/Attribute_OperationType.qbl b/_Main/BL/Type_MappingUnit/Attribute_OperationType.qbl
deleted file mode 100644
index f6e2520..0000000
--- a/_Main/BL/Type_MappingUnit/Attribute_OperationType.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OperationType
-{
-  #keys: '3[412960.0.96453692][412960.0.96453691][412960.0.96453693]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingUnit/Attribute_OrganCode.qbl b/_Main/BL/Type_MappingUnit/Attribute_OrganCode.qbl
deleted file mode 100644
index 94daa49..0000000
--- a/_Main/BL/Type_MappingUnit/Attribute_OrganCode.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrganCode
-{
-  #keys: '3[412960.0.96453662][412960.0.96453661][412960.0.96453663]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingUnit/Attribute_OrganName.qbl b/_Main/BL/Type_MappingUnit/Attribute_OrganName.qbl
deleted file mode 100644
index f7e8208..0000000
--- a/_Main/BL/Type_MappingUnit/Attribute_OrganName.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrganName
-{
-  #keys: '3[412960.0.96453672][412960.0.96453671][412960.0.96453673]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingUnit/Attribute_PlantName.qbl b/_Main/BL/Type_MappingUnit/Attribute_PlantName.qbl
deleted file mode 100644
index 98dffe6..0000000
--- a/_Main/BL/Type_MappingUnit/Attribute_PlantName.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute PlantName
-{
-  #keys: '3[412960.0.96453682][412960.0.96453681][412960.0.96453683]'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingUnit/TypeIndex_MappingUnitTypeIndex.qbl b/_Main/BL/Type_MappingUnit/TypeIndex_MappingUnitTypeIndex.qbl
deleted file mode 100644
index 1e6093e..0000000
--- a/_Main/BL/Type_MappingUnit/TypeIndex_MappingUnitTypeIndex.qbl
+++ /dev/null
@@ -1,24 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-TypeIndex MappingUnitTypeIndex
-{
-  Attributes:
-  [
-    TypeIndexAttribute
-    {
-      ModelElement: OrganCode
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: OperationType
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: EquipmentID
-    }
-    TypeIndexAttribute
-    {
-      ModelElement: PlantName
-    }
-  ]
-}
diff --git a/_Main/BL/Type_MappingUnit/_ROOT_Type_MappingUnit.qbl b/_Main/BL/Type_MappingUnit/_ROOT_Type_MappingUnit.qbl
deleted file mode 100644
index 9dd41e7..0000000
--- a/_Main/BL/Type_MappingUnit/_ROOT_Type_MappingUnit.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type MappingUnit
-{
-  #keys: '5[412960.0.96453658][412960.0.96453656][0.0.0][412960.0.96453657][412960.0.96453659]'
-  BaseType: Object
-  StructuredName: 'MappingUnits'
-}
diff --git a/_Main/BL/Type_MappingUnitOfMeasure/Attribute_IsDefault.qbl b/_Main/BL/Type_MappingUnitOfMeasure/Attribute_IsDefault.qbl
deleted file mode 100644
index 241405a..0000000
--- a/_Main/BL/Type_MappingUnitOfMeasure/Attribute_IsDefault.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute IsDefault
-{
-  #keys: '3[414384.0.583160085][414384.0.583160084][414384.0.583160086]'
-  Description: '鏄惁榛樿'
-  ValueType: Boolean
-}
diff --git a/_Main/BL/Type_MappingUnitOfMeasure/Attribute_name.qbl b/_Main/BL/Type_MappingUnitOfMeasure/Attribute_name.qbl
deleted file mode 100644
index f65ee0a..0000000
--- a/_Main/BL/Type_MappingUnitOfMeasure/Attribute_name.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Name
-{
-  #keys: '3[414384.0.583160075][414384.0.583160074][414384.0.583160076]'
-  Description: '鍗曚綅鍚嶇О'
-  IsReadOnly: true
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingUnitOfMeasure/DefaultValue_IsDefault.qbl b/_Main/BL/Type_MappingUnitOfMeasure/DefaultValue_IsDefault.qbl
deleted file mode 100644
index 4bce483..0000000
--- a/_Main/BL/Type_MappingUnitOfMeasure/DefaultValue_IsDefault.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  ISOValue: 'false'
-  TargetAttribute: IsDefault
-}
diff --git a/_Main/BL/Type_MappingUnitOfMeasure/TypeIndex_MappingUnitOfMeasureTypeIndex.qbl b/_Main/BL/Type_MappingUnitOfMeasure/TypeIndex_MappingUnitOfMeasureTypeIndex.qbl
deleted file mode 100644
index 930697e..0000000
--- a/_Main/BL/Type_MappingUnitOfMeasure/TypeIndex_MappingUnitOfMeasureTypeIndex.qbl
+++ /dev/null
@@ -1,12 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-TypeIndex MappingUnitOfMeasureTypeIndex
-{
-  Attributes:
-  [
-    TypeIndexAttribute
-    {
-      ModelElement: Name
-    }
-  ]
-}
diff --git a/_Main/BL/Type_MappingUnitOfMeasure/_ROOT_Type_MappingUnitOfMeasure.qbl b/_Main/BL/Type_MappingUnitOfMeasure/_ROOT_Type_MappingUnitOfMeasure.qbl
deleted file mode 100644
index cfa0e06..0000000
--- a/_Main/BL/Type_MappingUnitOfMeasure/_ROOT_Type_MappingUnitOfMeasure.qbl
+++ /dev/null
@@ -1,10 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type MappingUnitOfMeasure
-{
-  #keys: '5[414384.0.583160055][414384.0.583160053][0.0.0][414384.0.583160054][414384.0.583160056]'
-  BaseType: Object
-  Description: 'ETL鍗曚綅'
-  StructuredName: 'MappingUnitOfMeasures'
-}
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_PRData/StaticMethod_ExportTheFileStream.qbl b/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl
new file mode 100644
index 0000000..4f4edbb
--- /dev/null
+++ b/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl
@@ -0,0 +1,53 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ExportTheFileStream (
+  PRDatas toExportList
+) as BinaryValue
+{
+  TextBody:
+  [*
+    text:= '<?xml version="1.0" encoding="utf-8" standalone="yes"?><table><name>PR</name><column><name>鐗╂枡缂栫爜</name><type>String</type></column><column><name>鐗╂枡鍚嶇О</name><type>String</type></column><column><name>闈㈡澘鐗╂枡鏍囪瘑</name><type>String</type></column><column><name>浜よ揣鏃ユ湡</name><type>String</type></column><column><name>PR寤鸿鏃ユ湡</name><type>String</type></column><column><name>浜よ揣鏁伴噺</name><type>Number</type></column><column><name>MRP璁$畻鐗堟湰鍙�</name><type>String</type></column><column><name>涓氬姟绫诲瀷</name><type>String</type></column><column><name>缁勭粐缂栫爜</name><type>String</type></column><column><name>鏄惁闀垮懆鏈�</name><type>String</type></column><column><name>鏄惁涓撶敤鏂�</name><type>String</type></column><column><name>鐗╂枡璁″垝绛栫暐</name><type>String</type></column><column><name>鎻愬墠鏈�</name><type>Number</type></column><column><name>渚涘簲鍟嗕唬鐮�</name><type>String</type></column><column><name>渚涘簲鍟嗗悕绉�</name><type>String</type></column><column><name>鏀惰揣搴撳瓨鐐�</name><type>String</type></column><column><name>璁¢噺鍗曚綅</name><type>String</type></column><column><name>PR鏁版嵁鍙戦�佺姸鎬�</name><type>String</type></column><column><name>鍙戦�佹椂闂�</name><type>String</type></column><column><name>鍙戦�佷汉</name><type>String</type></column></table>';
+    
+    sc := DateToString::StandardConverter();
+    sc.SetCustomConversion();
+    sc.CustomFormatString( 'yyyy-MM-dd' );
+    
+    xmlDOMImplementation := XMLDOMImplementation::Create();
+    xmlDOMDocument := xmlDOMImplementation.CreateDocumentFromString( text );
+    
+    tableElement:= xmlDOMDocument.GetElementByTagName( "table", 0 );
+    
+    traverse ( toExportList, Elements, prd ) {
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.ProductID(), "鐗╂枡缂栫爜" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.ProductName(), "鐗╂枡鍚嶇О" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.IsPanelMaterial(), "闈㈡澘鐗╂枡鏍囪瘑" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, sc.Convert( prd.DeliveryDate() ), "浜よ揣鏃ユ湡" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, sc.Convert( prd.PRSuggestionDate() ), "PR寤鸿鏃ユ湡" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]( prd.Quantity().Round( 0 ) ), "浜よ揣鏁伴噺" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.MRPCalverNo(), "MRP璁$畻鐗堟湰鍙�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.BusinessType(), "涓氬姟绫诲瀷" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.OrganCode(), "缁勭粐缂栫爜" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.IsLongLeadItem(), "鏄惁闀垮懆鏈�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.IsGenericMaterial(), "鏄惁涓撶敤鏂�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.MaterialMRPType(), "鐗╂枡璁″垝绛栫暐" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]prd.LeadTime(), "鎻愬墠鏈�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.ProviderCode(), "渚涘簲鍟嗕唬鐮�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.ProviderName(), "渚涘簲鍟嗗悕绉�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.StockingPointID(), "鏀惰揣搴撳瓨鐐�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.UnitOfMeasure(), "璁¢噺鍗曚綅" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.PRReleaseStatus(), "PR鏁版嵁鍙戦�佺姸鎬�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.CreateTimeString(), "鍙戦�佹椂闂�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.CreateBy(), "鍙戦�佷汉" );
+    }
+    
+    xmlDOMSerializer := xmlDOMImplementation.CreateSerializer();
+    xmlTableString := xmlDOMSerializer.WriteToString( xmlDOMDocument );
+    
+    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTableString ) );
+    tableGroupHandle := TableGroupHandle::Create( "PR" );
+    tableGroupHandle.Add( tableHandle );
+    tableBinaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    
+    return tableBinaryData.AsBinaryValue();
+  *]
+}
diff --git a/_Main/BL/Type_PRData/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl "b/_Main/BL/Type_PRData/StaticMethod_GeneratesTheSpecifiedXMLColumn\04356.qbl"
similarity index 100%
rename from _Main/BL/Type_PRData/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl
rename to "_Main/BL/Type_PRData/StaticMethod_GeneratesTheSpecifiedXMLColumn\04356.qbl"
diff --git a/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_Quantity.qbl b/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_Quantity.qbl
new file mode 100644
index 0000000..47736bd
--- /dev/null
+++ b/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[414702.1.294748144][414702.1.294748143][414702.1.294748145]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_SalesDemandBaseID.qbl b/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_SalesDemandBaseID.qbl
new file mode 100644
index 0000000..1df641d
--- /dev/null
+++ b/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_SalesDemandBaseID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesDemandBaseID
+{
+  #keys: '3[414702.1.294144484][414702.1.294144483][414702.1.294144485]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StartDate.qbl b/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StartDate.qbl
new file mode 100644
index 0000000..76121f8
--- /dev/null
+++ b/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[414702.1.294179414][414702.1.294179413][414702.1.294179415]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StockingPointID.qbl b/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..7571b1e
--- /dev/null
+++ b/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414702.1.294179270][414702.1.294179269][414702.1.294179271]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingProductInSalesDemandBase/_ROOT_Type_PeggingProductInSalesDemandBase.qbl b/_Main/BL/Type_PeggingProductInSalesDemandBase/_ROOT_Type_PeggingProductInSalesDemandBase.qbl
new file mode 100644
index 0000000..1563969
--- /dev/null
+++ b/_Main/BL/Type_PeggingProductInSalesDemandBase/_ROOT_Type_PeggingProductInSalesDemandBase.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PeggingProductInSalesDemandBase
+{
+  #keys: '5[414702.1.290710055][414702.1.290710053][0.0.0][414702.1.290710054][414702.1.290710056]'
+  BaseType: Object
+  StructuredName: 'PeggingProductInSalesDemandBases'
+}
diff --git a/_Main/BL/Type_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/Attribute_ProductID.qbl b/_Main/BL/Type_PeggingProduct_MP/Attribute_ProductID.qbl
new file mode 100644
index 0000000..1aa0e94
--- /dev/null
+++ b/_Main/BL/Type_PeggingProduct_MP/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.1.290710074][414702.1.290710073][414702.1.290710075]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingProduct_MP/StaticMethod_Create.qbl b/_Main/BL/Type_PeggingProduct_MP/StaticMethod_Create.qbl
new file mode 100644
index 0000000..8eaaed9
--- /dev/null
+++ b/_Main/BL/Type_PeggingProduct_MP/StaticMethod_Create.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Create (
+  GlobalOTDSOP globalOTDSOP,
+  String productID
+) as PeggingProduct_MP
+{
+  TextBody:
+  [*
+    targetPeggingProduct_MP := select( globalOTDSOP, PeggingProduct_MP, tempPPMP, tempPPMP.ProductID() = productID );
+    
+    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_PeggingProduct_MP/_ROOT_Type_PeggingProduct_MP.qbl b/_Main/BL/Type_PeggingProduct_MP/_ROOT_Type_PeggingProduct_MP.qbl
new file mode 100644
index 0000000..6b2219e
--- /dev/null
+++ b/_Main/BL/Type_PeggingProduct_MP/_ROOT_Type_PeggingProduct_MP.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PeggingProduct_MP
+{
+  #keys: '5[414702.1.290710035][414702.1.290710033][0.0.0][414702.1.290710034][414702.1.290710036]'
+  BaseType: Object
+  StructuredName: 'PeggingProduct_MPs'
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_ActualFulfillmentQuantity.qbl b/_Main/BL/Type_PeggingResult/Attribute_ActualFulfillmentQuantity.qbl
new file mode 100644
index 0000000..54dd8e4
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_ActualFulfillmentQuantity.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ActualFulfillmentQuantity
+{
+  #keys: '3[414702.1.314092328][414702.1.314092327][414702.1.314092329]'
+  Description: '瀹為檯浜や粯鐨勬暟閲�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_FulfillmentQuantity.qbl b/_Main/BL/Type_PeggingResult/Attribute_FulfillmentQuantity.qbl
new file mode 100644
index 0000000..36ca7a2
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_FulfillmentQuantity.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FulfillmentQuantity
+{
+  #keys: '3[414702.1.294201083][414702.1.294201082][414702.1.294201084]'
+  Description: '璁㈠崟鎵�闇�瑕佺殑鏁伴噺'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_NumberOfPlies.qbl b/_Main/BL/Type_PeggingResult/Attribute_NumberOfPlies.qbl
new file mode 100644
index 0000000..610302a
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_NumberOfPlies.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute NumberOfPlies
+{
+  #keys: '3[414702.1.294145595][414702.1.294145594][414702.1.294145596]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_ProductID.qbl b/_Main/BL/Type_PeggingResult/Attribute_ProductID.qbl
new file mode 100644
index 0000000..d0beff9
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.1.294201096][414702.1.294201095][414702.1.294201097]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_StartDate.qbl b/_Main/BL/Type_PeggingResult/Attribute_StartDate.qbl
new file mode 100644
index 0000000..62f0fec
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[414702.1.294201063][414702.1.294201062][414702.1.294201064]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_StockingPointID.qbl b/_Main/BL/Type_PeggingResult/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..6a9dcad
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414702.1.294201106][414702.1.294201105][414702.1.294201107]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_SupplyQuantity.qbl b/_Main/BL/Type_PeggingResult/Attribute_SupplyQuantity.qbl
new file mode 100644
index 0000000..053a461
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_SupplyQuantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SupplyQuantity
+{
+  #keys: '3[414702.1.294201073][414702.1.294201072][414702.1.294201074]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_SupplyType.qbl b/_Main/BL/Type_PeggingResult/Attribute_SupplyType.qbl
new file mode 100644
index 0000000..fcfb218
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_SupplyType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SupplyType
+{
+  #keys: '3[414702.1.294201053][414702.1.294201052][414702.1.294201054]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_UnitOfMeasurementName.qbl b/_Main/BL/Type_PeggingResult/Attribute_UnitOfMeasurementName.qbl
new file mode 100644
index 0000000..1d741f1
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_UnitOfMeasurementName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasurementName
+{
+  #keys: '3[414702.1.294852022][414702.1.294852021][414702.1.294852023]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_Create.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_Create.qbl
new file mode 100644
index 0000000..35370aa
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_Create.qbl
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Create (
+  PeggingProductInSalesDemandBase peggingProductInSalesDemandBase,
+  String productID,
+  String stockingPointID,
+  Date startDate,
+  Real supplyQuantity,
+  Real actualFulfillmentQuantity,
+  Real fulfillmentQuantity,
+  String supplyType,
+  Number numberOfPlies,
+  String unitOfMeasurementName
+) as PeggingResult
+{
+  TextBody:
+  [*
+    peggingResult := peggingProductInSalesDemandBase.PeggingResult( relnew, 
+                                                                    ProductID                 := productID,
+                                                                    StockingPointID           := stockingPointID,
+                                                                    StartDate                 := startDate,
+                                                                    SupplyQuantity            := supplyQuantity,
+                                                                    ActualFulfillmentQuantity := actualFulfillmentQuantity,
+                                                                    FulfillmentQuantity       := fulfillmentQuantity,
+                                                                    SupplyType                := supplyType,
+                                                                    NumberOfPlies             := numberOfPlies,
+                                                                    UnitOfMeasurementName     := unitOfMeasurementName
+                                                                   );
+    return peggingResult;
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_CreateAllChildRelation.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_CreateAllChildRelation.qbl
new file mode 100644
index 0000000..b435f3b
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_CreateAllChildRelation.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateAllChildRelation (
+  PeggingProductInSalesDemandBase ppisdb
+)
+{
+  TextBody:
+  [*
+    targetPeggingResults := selectset( ppisdb, PeggingResult, tempPR, tempPR.NumberOfPlies() = 0 );
+    
+    traverse ( targetPeggingResults, Elements, pr ) {
+      parentPeggingResult := pr;
+      childPeggingResult  := pr;
+      PeggingResult::SetAllChildRelation( ppisdb, parentPeggingResult, childPeggingResult );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_CreateData.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_CreateData.qbl
new file mode 100644
index 0000000..59d58f3
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_CreateData.qbl
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateData (
+  PeggingProductInSalesDemandBases peggingProductInSalesDemandBases,
+  const MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    traverse ( peggingProductInSalesDemandBases, Elements, ppisdb ) {
+      ppisdb.PeggingResult( relflush );
+      targetSalesDemand := select( macroPlan, SalesDemand, tempSD, tempSD.ID() = ppisdb.SalesDemandBaseID() );
+      traverse ( targetSalesDemand, SalesDemandInPeriod.Fulfillment, f ) {
+        smp                 := f.Supply_MP();
+        fulfillmentQuantity := f.Quantity();
+        PeggingResult::GeneratePeggingResult( ppisdb, 
+                                              0,
+                                              smp,
+                                              fulfillmentQuantity,
+                                              fulfillmentQuantity,
+                                              null( PeggingResult ) );
+      }
+      
+      PeggingResult::CreateAllChildRelation( ppisdb );
+      PeggingResult::SetAllChildRelation1( ppisdb );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_GenerateInventorySupply.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_GenerateInventorySupply.qbl
new file mode 100644
index 0000000..6d10ac1
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_GenerateInventorySupply.qbl
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateInventorySupply (
+  PeggingProductInSalesDemandBase peggingProductInSalesDemandBase,
+  Number numberOfPlies,
+  const InventorySupply is,
+  Real actualFulfillmentQuantity,
+  Real fulfillmentQuantity,
+  PeggingResult parentPeggingResult
+)
+{
+  TextBody:
+  [*
+    //info( "渚涘簲绫诲瀷锛圛nventorySupply锛�    ", "渚涘簲鏃堕棿锛�", is.Date().Format( "Y-M2-D2" ), "    渚涘簲閲忥細", is.Quantity(), 
+    //      "    瀹為檯鐢ㄩ噺锛�", fulfillmentQuantity, "    ", is.ProductInStockingPoint_MP().Name() );
+    pisp := is.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP();
+    childPeggingResult := PeggingResult::Create( peggingProductInSalesDemandBase, 
+                                                 pisp.ProductID(), 
+                                                 pisp.StockingPointID(), 
+                                                 is.Date(), 
+                                                 is.Quantity(), 
+                                                 actualFulfillmentQuantity,
+                                                 fulfillmentQuantity, 
+                                                 "搴撳瓨渚涘簲", 
+                                                 numberOfPlies,
+                                                 pisp.UnitOfMeasureName()
+                                                );
+    
+    PeggingResult::SetParentChildRelationship( parentPeggingResult, childPeggingResult );
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl
new file mode 100644
index 0000000..269e335
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl
@@ -0,0 +1,70 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateNewSupply (
+  PeggingProductInSalesDemandBase peggingProductInSalesDemandBase,
+  Number numberOfPlies,
+  const NewSupply ns,
+  Real actualFulfillmentQuantity,
+  Real fulfillmentQuantity,
+  PeggingResult parentPeggingResult
+)
+{
+  TextBody:
+  [*
+    //info( "渚涘簲绫诲瀷锛圢ewSupply锛�", "    渚涘簲閲忥細", ns.Quantity(), "    婊¤冻锛�", fulfillmentQuantity );
+    
+    pisp := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP();
+    
+    childPeggingResult := PeggingResult::Create( peggingProductInSalesDemandBase, 
+                                                 pisp.ProductID(), 
+                                                 pisp.StockingPointID(), 
+                                                 ns.Start().Date(), 
+                                                 ns.Quantity(),
+                                                 actualFulfillmentQuantity, 
+                                                 fulfillmentQuantity, 
+                                                 "", 
+                                                 numberOfPlies, 
+                                                 pisp.UnitOfMeasureName() );
+    PeggingResult::SetParentChildRelationship( parentPeggingResult, childPeggingResult );
+    
+    ontype ( ns.PeriodTask_MP() ) {
+      PeriodTaskOperation as pto : {
+        childPeggingResult.SupplyType( "浜х嚎渚涘簲" );
+    //    info( "鎿嶄綔鍛ㄦ湡浠诲姟    ", "渚涘簲鏃堕棿锛�", ns.Start().Format( "Y-M2-D2" ), "    鍛ㄦ湡浠诲姟KEY锛�", pto.Key(), "    ",
+    //          ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name() );
+        traverse ( pto, DependentDemand, dd, dd.Quantity() > 0 ) {
+          traverse ( dd, Fulfillment, f ) {
+            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( "--------------------------------------------------------------" );
+            PeggingResult::GeneratePeggingResult( peggingProductInSalesDemandBase, numberOfPlies, smp1, actualFulfillmentQuantity, orderFulfillmentQuantity, childPeggingResult );
+            numberOfPlies--;
+          }
+        }
+      }
+           
+      PeriodTaskLaneLeg as ptll : {
+        childPeggingResult.SupplyType( "杞﹂亾渚涘簲" );
+        targetDependentDemand := select( ptll, DependentDemand, dd, 
+                                         dd.ProcessInput().ProductInStockingPoint_MP().ProductID() = ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() and
+                                         dd.Quantity() = ns.Quantity() );
+    //    info( "杞﹂亾鍛ㄦ湡浠诲姟    ", "渚涘簲鏃堕棿锛�", ns.Start().Format( "Y-M2-D2" ), "    鍛ㄦ湡浠诲姟KEY锛�", ptll.Key(), "    ", 
+    //          ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name() );
+        traverse ( targetDependentDemand, Fulfillment, f ) {
+          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, orderFulfillmentQuantity, childPeggingResult );
+          numberOfPlies--;
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_GeneratePeggingResult.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_GeneratePeggingResult.qbl
new file mode 100644
index 0000000..3e6f64e
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_GeneratePeggingResult.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GeneratePeggingResult (
+  PeggingProductInSalesDemandBase peggingProductInSalesDemandBase,
+  Number numberOfPlies,
+  const Supply_MP smp,
+  Real actualFulfillmentQuantity,
+  Real fulfillmentQuantity,
+  PeggingResult parentPeggingResult
+)
+{
+  TextBody:
+  [*
+    //info( "灞傛暟锛�", numberOfPlies );
+    ontype ( smp ) {
+      NewSupply as ns : {
+        PeggingResult::GenerateNewSupply( peggingProductInSalesDemandBase, numberOfPlies, ns, actualFulfillmentQuantity, fulfillmentQuantity, parentPeggingResult );
+      }
+    
+      InventorySupply as is : {
+        PeggingResult::GenerateInventorySupply( peggingProductInSalesDemandBase, numberOfPlies, is, actualFulfillmentQuantity, fulfillmentQuantity, parentPeggingResult );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation.qbl
new file mode 100644
index 0000000..caee0aa
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SetAllChildRelation (
+  PeggingProductInSalesDemandBase peggingProductInSalesDemandBase,
+  PeggingResult parentPeggingResult,
+  PeggingResult childPeggingResult
+)
+{
+  TextBody:
+  [*
+    if ( childPeggingResult.Child( relsize ) = 0 ) {
+      childPeggingResult.AllParent( relset, parentPeggingResult ); 
+    }
+    
+    traverse ( childPeggingResult, Child, pr ) {
+      pr.AllParent( relset, parentPeggingResult );
+      PeggingResult::SetAllChildRelation( peggingProductInSalesDemandBase, parentPeggingResult, pr );
+    }
+  *]
+}
diff --git "a/_Main/BL/Type_PeggingResult/StaticMethod_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_PeggingResult/StaticMethod_SetParentChildRelationship.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_SetParentChildRelationship.qbl
new file mode 100644
index 0000000..144505c
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_SetParentChildRelationship.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SetParentChildRelationship (
+  PeggingResult parentPeggingResult,
+  PeggingResult childPeggingResult
+)
+{
+  TextBody:
+  [*
+    if ( not isnull( parentPeggingResult ) and not isnull( childPeggingResult ) ) {
+      childPeggingResult.Parent( relset, parentPeggingResult );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResult/_ROOT_Type_PeggingResult.qbl b/_Main/BL/Type_PeggingResult/_ROOT_Type_PeggingResult.qbl
new file mode 100644
index 0000000..cd1bb3b
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/_ROOT_Type_PeggingResult.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PeggingResult
+{
+  #keys: '5[414702.1.290710095][414702.1.290710093][0.0.0][414702.1.290710094][414702.1.290710096]'
+  BaseType: Object
+  StructuredName: 'PeggingResults'
+}
diff --git a/_Main/BL/Type_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_PriorityFactor/Attribute_BusinessType.qbl b/_Main/BL/Type_PriorityFactor/Attribute_BusinessType.qbl
index 8aac689..a151143 100644
--- a/_Main/BL/Type_PriorityFactor/Attribute_BusinessType.qbl
+++ b/_Main/BL/Type_PriorityFactor/Attribute_BusinessType.qbl
@@ -3,5 +3,6 @@
 Attribute BusinessType
 {
   #keys: '3[414382.0.456067060][414382.0.456067059][414382.0.456067061]'
+  Description: '浜嬩笟閮�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityFactor/Attribute_Desc.qbl b/_Main/BL/Type_PriorityFactor/Attribute_Desc.qbl
index bb97070..8947833 100644
--- a/_Main/BL/Type_PriorityFactor/Attribute_Desc.qbl
+++ b/_Main/BL/Type_PriorityFactor/Attribute_Desc.qbl
@@ -3,5 +3,6 @@
 Attribute Desc
 {
   #keys: '3[414382.0.440655066][414382.0.440655065][414382.0.440655067]'
+  Description: '鎻忚堪'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityFactor/Attribute_Name.qbl b/_Main/BL/Type_PriorityFactor/Attribute_Name.qbl
index 80792db..f6624c3 100644
--- a/_Main/BL/Type_PriorityFactor/Attribute_Name.qbl
+++ b/_Main/BL/Type_PriorityFactor/Attribute_Name.qbl
@@ -3,5 +3,6 @@
 Attribute Name
 {
   #keys: '3[414382.0.440655046][414382.0.440655045][414382.0.440655047]'
+  Description: '浼樺厛绾у洜瀛愬悕绉�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityFactor/Attribute_ReflectionAttribute.qbl b/_Main/BL/Type_PriorityFactor/Attribute_ReflectionAttribute.qbl
deleted file mode 100644
index 3f5a69d..0000000
--- a/_Main/BL/Type_PriorityFactor/Attribute_ReflectionAttribute.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ReflectionAttribute
-{
-  #keys: '3[414382.0.554303396][414382.0.554303395][414382.0.554303397]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_PriorityFactor/Attribute_ReflectionType.qbl b/_Main/BL/Type_PriorityFactor/Attribute_ReflectionType.qbl
deleted file mode 100644
index 49b163b..0000000
--- a/_Main/BL/Type_PriorityFactor/Attribute_ReflectionType.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ReflectionType
-{
-  #keys: '3[414382.0.554014806][414382.0.554014805][414382.0.554014807]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_PriorityFactor/Method_CreatePrioitifyFacotrDetail.qbl b/_Main/BL/Type_PriorityFactor/Method_CreatePrioitifyFacotrDetail.qbl
new file mode 100644
index 0000000..1a33591
--- /dev/null
+++ b/_Main/BL/Type_PriorityFactor/Method_CreatePrioitifyFacotrDetail.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+Method CreatePrioitifyFacotrDetail (
+  PriorityFactorDetail priorityFactorDetails
+)
+{
+  TextBody:
+  [*
+    // Akari Nov-7-2023 (created)
+  *]
+}
diff --git a/_Main/BL/Type_PriorityFactor/StaticMethod_CheckNameValid.qbl b/_Main/BL/Type_PriorityFactor/StaticMethod_CheckNameValid.qbl
index 4fa81fb..b1761d7 100644
--- a/_Main/BL/Type_PriorityFactor/StaticMethod_CheckNameValid.qbl
+++ b/_Main/BL/Type_PriorityFactor/StaticMethod_CheckNameValid.qbl
@@ -8,10 +8,11 @@
   String name
 ) as Boolean
 {
+  Description: '鏍¢獙鍚嶇О鏄惁鐩稿悓'
   TextBody:
   [*
     // NBoTk Sep-22-2023 (created)
-    
+    // 鏍¢獙鍚嶇О鏄惁鐩稿悓 鍚嶇О鐩稿悓鐨勬暟鎹烦杩囧鐞�
     value := true;
     
     // 鍚嶇О鐩稿悓璺宠繃
diff --git a/_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl b/_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl
index d935ad9..0497cd2 100644
--- a/_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl
+++ b/_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl
@@ -6,6 +6,7 @@
   String name
 ) as Real
 {
+  Description: '鑾峰彇浼樺厛绾у洜瀛愮郴鏁�'
   TextBody:
   [*
     // NBoTk Sep-21-2023 (created)
diff --git a/_Main/BL/Type_PriorityFactor/StaticMethod_GetDataByBusinessType.qbl b/_Main/BL/Type_PriorityFactor/StaticMethod_GetDataByBusinessType.qbl
index 6f6f24f..db637e1 100644
--- a/_Main/BL/Type_PriorityFactor/StaticMethod_GetDataByBusinessType.qbl
+++ b/_Main/BL/Type_PriorityFactor/StaticMethod_GetDataByBusinessType.qbl
@@ -5,6 +5,7 @@
   String businessType
 ) as owning PriorityFactors
 {
+  Description: '鏍规嵁浜嬩笟閮ㄨ幏鍙栦紭鍏堢骇鍥犲瓙闆嗗悎'
   TextBody:
   [*
     // NBoTk Sep-18-2023 (created)
diff --git a/_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl b/_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl
index 05489f2..70e553c 100644
--- a/_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl
+++ b/_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl
@@ -5,6 +5,7 @@
   String businessType
 ) as String
 {
+  Description: '鑾峰彇浼樺厛绾у洜瀛愪笅鎷夊垪琛�'
   TextBody:
   [*
     // NBoTk Sep-21-2023 (created)
diff --git a/_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl b/_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl
index a2be846..da99caa 100644
--- a/_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl
+++ b/_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl
@@ -4,6 +4,7 @@
   MacroPlan owner
 )
 {
+  Description: '鍒濆鍖栧熀纭�鏁版嵁锛堟祴璇曢樁娈典娇鐢級'
   TextBody:
   [*
     // NBoTk Sep-15-2023 (created)
@@ -35,7 +36,7 @@
           
           traverse( priorityFactorList,Elements,e)
           {
-              PriorityFactorDetails::InitData( owner,e); 
+              PriorityFactorDetail::InitData( owner,e); 
           }
     
     }
diff --git a/_Main/BL/Type_PriorityFactor/_ROOT_Type_PriorityFactor.qbl b/_Main/BL/Type_PriorityFactor/_ROOT_Type_PriorityFactor.qbl
index fcac9ad..a1fceb8 100644
--- a/_Main/BL/Type_PriorityFactor/_ROOT_Type_PriorityFactor.qbl
+++ b/_Main/BL/Type_PriorityFactor/_ROOT_Type_PriorityFactor.qbl
@@ -5,5 +5,6 @@
 {
   #keys: '5[414382.0.440655008][414382.0.440655006][0.0.0][414382.0.440655007][414382.0.440655009]'
   BaseType: Object
+  Description: '浼樺厛绾у洜瀛�'
   StructuredName: 'PriorityFactors'
 }
diff --git a/_Main/BL/Type_PriorityFactorDetails/Attribute_GradeDesc.qbl b/_Main/BL/Type_PriorityFactorDetails/Attribute_GradeDesc.qbl
index 55b4b64..a793114 100644
--- a/_Main/BL/Type_PriorityFactorDetails/Attribute_GradeDesc.qbl
+++ b/_Main/BL/Type_PriorityFactorDetails/Attribute_GradeDesc.qbl
@@ -3,5 +3,6 @@
 Attribute GradeDesc
 {
   #keys: '3[414382.0.475830209][414382.0.475830208][414382.0.475830210]'
+  Description: '浼樺厛绾у洜瀛愮粏鍒嗘弿杩�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityFactorDetails/Attribute_GradeTarget.qbl b/_Main/BL/Type_PriorityFactorDetails/Attribute_GradeTarget.qbl
index 9ae65b9..f22d96f 100644
--- a/_Main/BL/Type_PriorityFactorDetails/Attribute_GradeTarget.qbl
+++ b/_Main/BL/Type_PriorityFactorDetails/Attribute_GradeTarget.qbl
@@ -3,5 +3,6 @@
 Attribute GradeTarget
 {
   #keys: '3[414382.0.440655126][414382.0.440655125][414382.0.440655127]'
+  Description: '浼樺厛绾у洜瀛愮粏鍒嗙洰鏍囧��'
   ValueType: Real
 }
diff --git a/_Main/BL/Type_PriorityFactorDetails/Attribute_GradeValueStr.qbl b/_Main/BL/Type_PriorityFactorDetails/Attribute_GradeValueStr.qbl
index e84d510..d0e463e 100644
--- a/_Main/BL/Type_PriorityFactorDetails/Attribute_GradeValueStr.qbl
+++ b/_Main/BL/Type_PriorityFactorDetails/Attribute_GradeValueStr.qbl
@@ -3,5 +3,6 @@
 Attribute GradeValueStr
 {
   #keys: '3[414382.0.440655139][414382.0.440655138][414382.0.440655140]'
+  Description: '浼樺厛绾у洜瀛愮粏鍒嗙郴鏁�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityFactorDetails/Attribute_GradingName.qbl b/_Main/BL/Type_PriorityFactorDetails/Attribute_GradingName.qbl
index e38eb27..ac74d03 100644
--- a/_Main/BL/Type_PriorityFactorDetails/Attribute_GradingName.qbl
+++ b/_Main/BL/Type_PriorityFactorDetails/Attribute_GradingName.qbl
@@ -3,5 +3,6 @@
 Attribute GradingName
 {
   #keys: '3[414382.0.440655086][414382.0.440655085][414382.0.440655087]'
+  Description: '浼樺厛绾у洜瀛愮粏鍒嗗悕绉�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityFactorDetails/Attribute_IsBusinessType.qbl b/_Main/BL/Type_PriorityFactorDetails/Attribute_IsBusinessType.qbl
index b5b33ba..899f37f 100644
--- a/_Main/BL/Type_PriorityFactorDetails/Attribute_IsBusinessType.qbl
+++ b/_Main/BL/Type_PriorityFactorDetails/Attribute_IsBusinessType.qbl
@@ -3,5 +3,6 @@
 Attribute IsBusinessType
 {
   #keys: '3[414382.0.444830107][414382.0.444830106][414382.0.444830108]'
+  Description: '鏄惁涓轰簨涓氶儴锛堝綋鍓嶉樁娈靛純鐢級'
   ValueType: Boolean
 }
diff --git a/_Main/BL/Type_PriorityFactorDetails/Attribute_IsRange.qbl b/_Main/BL/Type_PriorityFactorDetails/Attribute_IsRange.qbl
index 8b4b84c..9f2a7b3 100644
--- a/_Main/BL/Type_PriorityFactorDetails/Attribute_IsRange.qbl
+++ b/_Main/BL/Type_PriorityFactorDetails/Attribute_IsRange.qbl
@@ -3,5 +3,6 @@
 Attribute IsRange
 {
   #keys: '3[414382.0.440655096][414382.0.440655095][414382.0.440655097]'
+  Description: '鏄惁浣跨敤鑼冨洿'
   ValueType: Boolean
 }
diff --git a/_Main/BL/Type_PriorityFactorDetails/Attribute_PriorityFactorDesc.qbl b/_Main/BL/Type_PriorityFactorDetails/Attribute_PriorityFactorDesc.qbl
deleted file mode 100644
index 265d712..0000000
--- a/_Main/BL/Type_PriorityFactorDetails/Attribute_PriorityFactorDesc.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute PriorityFactorDesc
-{
-  #keys: '3[414382.0.452050072][414382.0.452050071][414382.0.452050073]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_PriorityFactorDetails/Attribute_PriorityFactorName.qbl b/_Main/BL/Type_PriorityFactorDetails/Attribute_PriorityFactorName.qbl
index 6d4a629..71105b3 100644
--- a/_Main/BL/Type_PriorityFactorDetails/Attribute_PriorityFactorName.qbl
+++ b/_Main/BL/Type_PriorityFactorDetails/Attribute_PriorityFactorName.qbl
@@ -2,6 +2,7 @@
 #parent: #root
 Attribute PriorityFactorName
 {
-  #keys: '3[414382.0.444830222][414382.0.444830221][414382.0.444830223]'
+  #keys: '3[414382.0.640470087][414382.0.640470086][414382.0.640470088]'
+  Description: '浼樺厛绾у洜瀛愬悕绉�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityFactorDetails/Attribute_RangeMax.qbl b/_Main/BL/Type_PriorityFactorDetails/Attribute_RangeMax.qbl
index 4193c14..ad59f0e 100644
--- a/_Main/BL/Type_PriorityFactorDetails/Attribute_RangeMax.qbl
+++ b/_Main/BL/Type_PriorityFactorDetails/Attribute_RangeMax.qbl
@@ -3,5 +3,6 @@
 Attribute RangeMax
 {
   #keys: '3[414382.0.440655106][414382.0.440655105][414382.0.440655107]'
+  Description: '鑼冨洿鏈�澶у��'
   ValueType: Real
 }
diff --git a/_Main/BL/Type_PriorityFactorDetails/Attribute_RangeMin.qbl b/_Main/BL/Type_PriorityFactorDetails/Attribute_RangeMin.qbl
index 1af51cb..513cdbe 100644
--- a/_Main/BL/Type_PriorityFactorDetails/Attribute_RangeMin.qbl
+++ b/_Main/BL/Type_PriorityFactorDetails/Attribute_RangeMin.qbl
@@ -3,5 +3,6 @@
 Attribute RangeMin
 {
   #keys: '3[414382.0.440655116][414382.0.440655115][414382.0.440655117]'
+  Description: '鑼冨洿鏈�灏忓��'
   ValueType: Real
 }
diff --git a/_Main/BL/Type_PriorityFactorDetails/StaticMethod_ClearTestData.qbl b/_Main/BL/Type_PriorityFactorDetails/StaticMethod_ClearTestData.qbl
index 536d7e8..bca0897 100644
--- a/_Main/BL/Type_PriorityFactorDetails/StaticMethod_ClearTestData.qbl
+++ b/_Main/BL/Type_PriorityFactorDetails/StaticMethod_ClearTestData.qbl
@@ -4,6 +4,7 @@
   MacroPlan owner
 )
 {
+  Description: '娓呴櫎娴嬭瘯鏁版嵁锛堟祴璇曢樁娈碉級'
   TextBody:
   [*
     // NBoTk Sep-18-2023 (created)
diff --git a/_Main/BL/Type_PriorityFactorDetails/StaticMethod_GetDataByPriorityFactor.qbl b/_Main/BL/Type_PriorityFactorDetails/StaticMethod_GetDataByPriorityFactor.qbl
index 1f31939..b27e4a5 100644
--- a/_Main/BL/Type_PriorityFactorDetails/StaticMethod_GetDataByPriorityFactor.qbl
+++ b/_Main/BL/Type_PriorityFactorDetails/StaticMethod_GetDataByPriorityFactor.qbl
@@ -3,13 +3,14 @@
 StaticMethod GetDataByPriorityFactor (
   PriorityFactor priorityFactor,
   MacroPlan owner
-) as owning PriorityFactorDetailss
+) as owning PriorityFactorDetails
 {
+  Description: '鏍规嵁浜嬩紭鍏堢骇鍥犲瓙鑾峰彇浼樺厛绾у洜瀛愮粏鍒嗛泦鍚�'
   TextBody:
   [*
     // NBoTk Sep-18-2023 (created)
     
-    list := selectset( owner,PriorityFactor.PriorityFactorDetails,p,
+    list := selectset( owner,PriorityFactor.PriorityFactorDetail,p,
                        p.BusinessType() = priorityFactor.BusinessType() and priorityFactor.Name() = p.PriorityFactorName()
                        );
     
diff --git a/_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl b/_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl
index 1449c61..eadd506 100644
--- a/_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl
+++ b/_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl
@@ -5,6 +5,7 @@
   PriorityFactor priorityFactor
 )
 {
+  Description: '鍒濆鍖栨暟鎹紙娴嬭瘯闃舵锛�'
   TextBody:
   [*
     // NBoTk Sep-17-2023 (created)
@@ -17,85 +18,85 @@
     
     if( priorityFactor.Name() = "澶у紶鐩堝埄姘村钩" )
     {
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                             IsRange := false,GradingName := "澶х泩",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                 IsRange := false,GradingName := "灏忕泩",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 0,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 0,
                                                 IsRange := false,GradingName := "鎸佸钩",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -3,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -3,
                                                 IsRange := false,GradingName := "灏忎簭",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -5,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -5,
                                                 IsRange := false,GradingName := "澶т簭",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
     }
     
     if( priorityFactor.Name() = "瀹㈡埛绛栫暐" )
     {
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                             IsRange := false,GradingName := "81%鈮鈮�100%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 4,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 4,
                                                 IsRange := false,GradingName := "61%鈮鈮�80%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                 IsRange := false,GradingName := "41%鈮鈮�60%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 2,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 2,
                                                 IsRange := false,GradingName := "21%鈮鈮�40%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                 IsRange := false,GradingName := "1%鈮鈮�20%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
     }
     
     if( priorityFactor.Name() = "缁嗗垎甯傚満绛夌骇" )
     {
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                             IsRange := false,GradingName := "鎴樼暐",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                 IsRange := false,GradingName := "閲嶇偣",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                 IsRange := false,GradingName := "娼滃姏",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
     }
     
     if( priorityFactor.Name() = "璁㈠崟涓嬪崟鏃堕棿" )
     {
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                             IsRange := false,GradingName := "120",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 4,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 4,
                                                 IsRange := false,GradingName := "90",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                 IsRange := false,GradingName := "60",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 2,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 2,
                                                 IsRange := false,GradingName := "30",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                 IsRange := false,GradingName := "0",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
     }
     
     if( priorityFactor.Name() = "闇�姹傜被鍨�" )
     {
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                             IsRange := false,GradingName := "鏈夐娴�",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                 IsRange := false,GradingName := "鏃犻娴�",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                 IsRange := false,GradingName := "绾娴�",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
     }
     
     if( priorityFactor.Name() = "瀹㈡埛绛夌骇" )
     {
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                             IsRange := false,GradingName := "鎴樼暐",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                 IsRange := false,GradingName := "閲嶇偣",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                 IsRange := false,GradingName := "娼滃姏",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
     }
     
     if( priorityFactor.Name() = "DOI" or priorityFactor.Name() = "DSI")
     {
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                             IsRange := false,GradingName := "<7",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                 IsRange := false,GradingName := "<15",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                 IsRange := false,GradingName := "<30",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
-        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
+        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                 IsRange := false,GradingName := ">30",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());                                                                                     
     }
   *]
diff --git a/_Main/BL/Type_PriorityFactorDetails/_ROOT_Type_PriorityFactorDetail.qbl b/_Main/BL/Type_PriorityFactorDetails/_ROOT_Type_PriorityFactorDetail.qbl
new file mode 100644
index 0000000..1ada706
--- /dev/null
+++ b/_Main/BL/Type_PriorityFactorDetails/_ROOT_Type_PriorityFactorDetail.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PriorityFactorDetail
+{
+  #keys: '5[414382.0.440655013][414382.0.440655011][0.0.0][414382.0.440655012][414382.0.440655014]'
+  BaseType: Object
+  Description: '浼樺厛绾у洜瀛愮粏鍒�'
+  StructuredName: 'PriorityFactorDetails'
+}
diff --git a/_Main/BL/Type_PriorityFactorDetails/_ROOT_Type_PriorityFactorDetails.qbl b/_Main/BL/Type_PriorityFactorDetails/_ROOT_Type_PriorityFactorDetails.qbl
deleted file mode 100644
index 7c4a1f4..0000000
--- a/_Main/BL/Type_PriorityFactorDetails/_ROOT_Type_PriorityFactorDetails.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type PriorityFactorDetails
-{
-  #keys: '5[414382.0.440655013][414382.0.440655011][0.0.0][414382.0.440655012][414382.0.440655014]'
-  BaseType: Object
-  StructuredName: 'PriorityFactorDetailss'
-}
diff --git a/_Main/BL/Type_PriorityPolicy/Attribute_BusinessType.qbl b/_Main/BL/Type_PriorityPolicy/Attribute_BusinessType.qbl
index 4cc5680..221fec6 100644
--- a/_Main/BL/Type_PriorityPolicy/Attribute_BusinessType.qbl
+++ b/_Main/BL/Type_PriorityPolicy/Attribute_BusinessType.qbl
@@ -3,5 +3,6 @@
 Attribute BusinessType
 {
   #keys: '3[414382.0.488041999][414382.0.488041998][414382.0.488042000]'
+  Description: '浜嬩笟閮�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityPolicy/Attribute_CalculateValue.qbl b/_Main/BL/Type_PriorityPolicy/Attribute_CalculateValue.qbl
index ce4c95c..ac12465 100644
--- a/_Main/BL/Type_PriorityPolicy/Attribute_CalculateValue.qbl
+++ b/_Main/BL/Type_PriorityPolicy/Attribute_CalculateValue.qbl
@@ -3,5 +3,6 @@
 Attribute CalculateValue
 {
   #keys: '3[414382.0.488041974][414382.0.488041973][414382.0.488041975]'
+  Description: '璁$畻鍊�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityPolicy/Attribute_Desc.qbl b/_Main/BL/Type_PriorityPolicy/Attribute_Desc.qbl
index a142044..a5dc73d 100644
--- a/_Main/BL/Type_PriorityPolicy/Attribute_Desc.qbl
+++ b/_Main/BL/Type_PriorityPolicy/Attribute_Desc.qbl
@@ -3,5 +3,6 @@
 Attribute Desc
 {
   #keys: '3[414382.0.488042011][414382.0.488042010][414382.0.488042012]'
+  Description: '鎻忚堪'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityPolicy/Attribute_Formula.qbl b/_Main/BL/Type_PriorityPolicy/Attribute_Formula.qbl
index 1c416d1..9c6372a 100644
--- a/_Main/BL/Type_PriorityPolicy/Attribute_Formula.qbl
+++ b/_Main/BL/Type_PriorityPolicy/Attribute_Formula.qbl
@@ -3,5 +3,6 @@
 Attribute Formula
 {
   #keys: '3[414382.0.488041964][414382.0.488041963][414382.0.488041965]'
+  Description: '璁$畻鍏紡'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityPolicy/Attribute_Name.qbl b/_Main/BL/Type_PriorityPolicy/Attribute_Name.qbl
index 709f9c9..e386c74 100644
--- a/_Main/BL/Type_PriorityPolicy/Attribute_Name.qbl
+++ b/_Main/BL/Type_PriorityPolicy/Attribute_Name.qbl
@@ -3,5 +3,6 @@
 Attribute Name
 {
   #keys: '3[414382.0.488041954][414382.0.488041953][414382.0.488041955]'
+  Description: '浼樺厛绾х瓥鐣ュ悕绉�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcFormula.qbl b/_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcFormula.qbl
index c76e0a0..b8cf039 100644
--- a/_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcFormula.qbl
+++ b/_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcFormula.qbl
@@ -5,6 +5,7 @@
   String formula
 ) as String
 {
+  Description: '鏍规嵁浼樺厛绾у洜瀛愬悕绉� 鎷兼帴鍏紡'
   TextBody:
   [*
     // NBoTk Oct-7-2023 (created)
diff --git a/_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcStr.qbl b/_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcStr.qbl
index 2095877..6a7f27e 100644
--- a/_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcStr.qbl
+++ b/_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcStr.qbl
@@ -6,6 +6,7 @@
   String lastCalcStr
 ) as String
 {
+  Description: '浼樺厛绾ц绠�'
   TextBody:
   [*
     // NBoTk Oct-7-2023 (created)
diff --git a/_Main/BL/Type_PriorityPolicy/StaticMethod_GetDataByBusinessType.qbl b/_Main/BL/Type_PriorityPolicy/StaticMethod_GetDataByBusinessType.qbl
index 2698209..b6c9ec4 100644
--- a/_Main/BL/Type_PriorityPolicy/StaticMethod_GetDataByBusinessType.qbl
+++ b/_Main/BL/Type_PriorityPolicy/StaticMethod_GetDataByBusinessType.qbl
@@ -5,6 +5,7 @@
   String businessType
 ) as owning PriorityPolicys
 {
+  Description: '鏍规嵁浜嬩笟閮ㄨ幏鍙栦紭鍏堢骇绛栫暐'
   TextBody:
   [*
     // NBoTk Sep-20-2023 (created)
diff --git a/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackCalcStr.qbl b/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackCalcStr.qbl
index 122b53c..b284e66 100644
--- a/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackCalcStr.qbl
+++ b/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackCalcStr.qbl
@@ -6,6 +6,7 @@
   String stringData
 ) as String
 {
+  Description: '椤甸潰璁$畻鍏紡鍥為��鎿嶄綔'
   TextBody:
   [*
     // NBoTk Sep-21-2023 (created)
diff --git a/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl b/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl
index 129f7d7..7098d73 100644
--- a/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl
+++ b/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl
@@ -6,6 +6,7 @@
   String stringData
 ) as String
 {
+  Description: '椤甸潰璁$畻鍊煎洖閫�鎿嶄綔'
   TextBody:
   [*
     // NBoTk Sep-21-2023 (created)
diff --git a/_Main/BL/Type_PriorityResult/Attribute_BusinessType.qbl b/_Main/BL/Type_PriorityResult/Attribute_BusinessType.qbl
index 16f7189..ed82831 100644
--- a/_Main/BL/Type_PriorityResult/Attribute_BusinessType.qbl
+++ b/_Main/BL/Type_PriorityResult/Attribute_BusinessType.qbl
@@ -3,5 +3,6 @@
 Attribute BusinessType
 {
   #keys: '3[414382.0.504275379][414382.0.504275378][414382.0.504275380]'
+  Description: '浜嬩笟閮�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityResult/Attribute_Customer.qbl b/_Main/BL/Type_PriorityResult/Attribute_Customer.qbl
index 21774fc..c333696 100644
--- a/_Main/BL/Type_PriorityResult/Attribute_Customer.qbl
+++ b/_Main/BL/Type_PriorityResult/Attribute_Customer.qbl
@@ -3,5 +3,6 @@
 Attribute Customer
 {
   #keys: '3[414382.0.504275376][414382.0.504275375][414382.0.504275377]'
+  Description: '瀹㈡埛鍚嶇О'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityResult/Attribute_CustomerID.qbl b/_Main/BL/Type_PriorityResult/Attribute_CustomerID.qbl
index afabecd..f803ee2 100644
--- a/_Main/BL/Type_PriorityResult/Attribute_CustomerID.qbl
+++ b/_Main/BL/Type_PriorityResult/Attribute_CustomerID.qbl
@@ -3,5 +3,6 @@
 Attribute CustomerID
 {
   #keys: '3[414382.0.504275385][414382.0.504275384][414382.0.504275386]'
+  Description: '瀹㈡埛缂栫爜'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityResult/Attribute_CustomerOrderID.qbl b/_Main/BL/Type_PriorityResult/Attribute_CustomerOrderID.qbl
index f65a510..bce35d0 100644
--- a/_Main/BL/Type_PriorityResult/Attribute_CustomerOrderID.qbl
+++ b/_Main/BL/Type_PriorityResult/Attribute_CustomerOrderID.qbl
@@ -3,5 +3,6 @@
 Attribute CustomerOrderID
 {
   #keys: '3[414382.0.554015006][414382.0.554015005][414382.0.554015007]'
+  Description: '瀹㈡埛璁㈠崟ID'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityResult/Attribute_DemandDate.qbl b/_Main/BL/Type_PriorityResult/Attribute_DemandDate.qbl
index 5088806..3d15622 100644
--- a/_Main/BL/Type_PriorityResult/Attribute_DemandDate.qbl
+++ b/_Main/BL/Type_PriorityResult/Attribute_DemandDate.qbl
@@ -3,5 +3,6 @@
 Attribute DemandDate
 {
   #keys: '3[414382.0.504275370][414382.0.504275369][414382.0.504275371]'
+  Description: '闇�姹傛椂闂�'
   ValueType: Date
 }
diff --git a/_Main/BL/Type_PriorityResult/Attribute_PriorityResultScore.qbl b/_Main/BL/Type_PriorityResult/Attribute_PriorityResultScore.qbl
index 6f38dd5..eea1d9c 100644
--- a/_Main/BL/Type_PriorityResult/Attribute_PriorityResultScore.qbl
+++ b/_Main/BL/Type_PriorityResult/Attribute_PriorityResultScore.qbl
@@ -3,5 +3,6 @@
 Attribute PriorityResultScore
 {
   #keys: '3[414382.0.504275396][414382.0.504275395][414382.0.504275397]'
+  Description: '浼樺厛绾х粨鏋滃緱鍒�'
   ValueType: Real
 }
diff --git a/_Main/BL/Type_PriorityResult/Attribute_ProductID.qbl b/_Main/BL/Type_PriorityResult/Attribute_ProductID.qbl
index b9b828f..a3d6adc 100644
--- a/_Main/BL/Type_PriorityResult/Attribute_ProductID.qbl
+++ b/_Main/BL/Type_PriorityResult/Attribute_ProductID.qbl
@@ -3,5 +3,6 @@
 Attribute ProductID
 {
   #keys: '3[414382.0.504275367][414382.0.504275366][414382.0.504275368]'
+  Description: '浜у搧缂栫爜'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityResult/Attribute_Quantity.qbl b/_Main/BL/Type_PriorityResult/Attribute_Quantity.qbl
index b18ef2c..8d86e9e 100644
--- a/_Main/BL/Type_PriorityResult/Attribute_Quantity.qbl
+++ b/_Main/BL/Type_PriorityResult/Attribute_Quantity.qbl
@@ -3,5 +3,6 @@
 Attribute Quantity
 {
   #keys: '3[414382.0.504275361][414382.0.504275360][414382.0.504275362]'
+  Description: '鏁伴噺'
   ValueType: Real
 }
diff --git a/_Main/BL/Type_PriorityResult/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_PriorityResult/Attribute_SalesSegmentName.qbl
index 1ade98f..9a4faf4 100644
--- a/_Main/BL/Type_PriorityResult/Attribute_SalesSegmentName.qbl
+++ b/_Main/BL/Type_PriorityResult/Attribute_SalesSegmentName.qbl
@@ -3,5 +3,6 @@
 Attribute SalesSegmentName
 {
   #keys: '3[414382.0.504275382][414382.0.504275381][414382.0.504275383]'
+  Description: '閿�鍞儴闂ㄥ悕绉�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityResult/Attribute_StockingPointID.qbl b/_Main/BL/Type_PriorityResult/Attribute_StockingPointID.qbl
index db04a7f..17b0e02 100644
--- a/_Main/BL/Type_PriorityResult/Attribute_StockingPointID.qbl
+++ b/_Main/BL/Type_PriorityResult/Attribute_StockingPointID.qbl
@@ -3,5 +3,6 @@
 Attribute StockingPointID
 {
   #keys: '3[414382.0.504275364][414382.0.504275363][414382.0.504275365]'
+  Description: '搴撳瓨鐐�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityResult/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_PriorityResult/Attribute_UnitOfMeasureName.qbl
index 8877500..42dda31 100644
--- a/_Main/BL/Type_PriorityResult/Attribute_UnitOfMeasureName.qbl
+++ b/_Main/BL/Type_PriorityResult/Attribute_UnitOfMeasureName.qbl
@@ -3,5 +3,6 @@
 Attribute UnitOfMeasureName
 {
   #keys: '3[414382.0.504275373][414382.0.504275372][414382.0.504275374]'
+  Description: '鍗曚綅'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_BusinessType.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_BusinessType.qbl
deleted file mode 100644
index 1672b03..0000000
--- a/_Main/BL/Type_PriorityResult/DefaultValue_BusinessType.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: BusinessType
-}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_Customer.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_Customer.qbl
deleted file mode 100644
index e02a336..0000000
--- a/_Main/BL/Type_PriorityResult/DefaultValue_Customer.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: Customer
-}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_CustomerID.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_CustomerID.qbl
deleted file mode 100644
index 66ae438..0000000
--- a/_Main/BL/Type_PriorityResult/DefaultValue_CustomerID.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: CustomerID
-}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_ProductID.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_ProductID.qbl
deleted file mode 100644
index 98649b2..0000000
--- a/_Main/BL/Type_PriorityResult/DefaultValue_ProductID.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: ProductID
-}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_SalesSegmentName.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_SalesSegmentName.qbl
deleted file mode 100644
index 521966d..0000000
--- a/_Main/BL/Type_PriorityResult/DefaultValue_SalesSegmentName.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: SalesSegmentName
-}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_StockingPointID.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_StockingPointID.qbl
deleted file mode 100644
index fbb83fc..0000000
--- a/_Main/BL/Type_PriorityResult/DefaultValue_StockingPointID.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: StockingPointID
-}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_UnitOfMeasureName.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_UnitOfMeasureName.qbl
deleted file mode 100644
index b2012de..0000000
--- a/_Main/BL/Type_PriorityResult/DefaultValue_UnitOfMeasureName.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: UnitOfMeasureName
-}
diff --git a/_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl b/_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl
index 2f7e3cb..dbd5fae 100644
--- a/_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl
+++ b/_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl
@@ -9,59 +9,49 @@
   const GlobalOTDTable globalOTDTable
 ) as Real
 {
+  Description: '閫掑綊澶勭悊浼樺厛绾х瓥鐣ュ叕寮�'
   TextBody:
   [*
     // NBoTk Sep-26-2023 (created)
     
     score := 0.0;
     remindFormula := formula;
-    
     // 閬嶅巻浼樺厛绾у洜瀛愰厤缃�
-    if( not remindFormula = '' )
-    {
+    if( not remindFormula = '' ){
             // 浠庤捣濮嬩綅缃紑濮嬪尮閰� 
-            if(remindFormula.StartsWith( "+" ))
-            {
+            if(remindFormula.StartsWith( "+" )){
                 remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                 score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan,globalOTDTable); 
                 score := lastScore + score;
-                
+    
                 // 鎴彇鎺夊凡缁忚绠楃殑浼樺厛绾у洜瀛� 閫掑綊璁$畻
                 remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
-                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
-            }
-            else if( remindFormula.StartsWith( "-" ))
-            {
+                score := score + PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
+            }else if( remindFormula.StartsWith( "-" )){
                 remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                 score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan,globalOTDTable);
                 score := lastScore - score;
                 
                 // 鎴彇鎺夊凡缁忚绠楃殑浼樺厛绾у洜瀛� 閫掑綊璁$畻
                 remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
-                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
-            }
-            else if( remindFormula.StartsWith( "*" ) )
-            {
+                score := score + PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
+            }else if( remindFormula.StartsWith( "x" ) ){
                 remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                 score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan,globalOTDTable);
                 score := lastScore * score;
                 
                 // 鎴彇鎺夊凡缁忚绠楃殑浼樺厛绾у洜瀛� 閫掑綊璁$畻
                 remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
-                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
-            }
-            else if( remindFormula.StartsWith( "/" ) )
-            {
+                score := score + PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
+            }else if( remindFormula.StartsWith( "/" ) ){
                 remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                 score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan,globalOTDTable);
                 score := lastScore / score;
                 
                 // 鎴彇鎺夊凡缁忚绠楃殑浼樺厛绾у洜瀛� 閫掑綊璁$畻
                 remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
-                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
-            }
-            else if( remindFormula.StartsWith( "(" ) )
-            {
+                score := score + PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
+            }else if( remindFormula.StartsWith( "(" ) ){
                 // 鎵惧埌绗竴涓粨鏉熺殑 )
                 // 璁$畻鎷彿涓殑鍐呭
                 rightBracket := remindFormula.FindString( ")",0);
@@ -70,17 +60,14 @@
                 
                 // 鎴彇 ) 鍚庣殑瀛楃缁х画杩涜璁$畻
                 remindFormula := remindFormula.SubString( rightBracket,remindFormula.Length()-1);
-            }
-            else
-            {
+            }else{
                 // 涓嶆槸绗﹀彿 鐩存帴鑾峰彇璁$畻鍚庣殑鏁板��
                 score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan,globalOTDTable);
                 // 鎴彇鎺夊凡缁忚绠楃殑浼樺厛绾у洜瀛� 閫掑綊璁$畻
                 remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
-                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
+                score := PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
             }
     }
-    
     // 娌℃湁鍖归厤 鍏紡璁$畻瀹屾垚
     return score;
   *]
diff --git a/_Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl b/_Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl
index 4555573..2372923 100644
--- a/_Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl
+++ b/_Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl
@@ -7,6 +7,7 @@
   const GlobalOTDTable globalOTDTable
 ) as Real
 {
+  Description: '璁$畻浼樺厛绾у洜瀛愬緱鍒�'
   TextBody:
   [*
     // NBoTk Sep-26-2023 (created)
@@ -31,7 +32,7 @@
     {
             if( "瀹㈡埛绛栫暐" =  priorityFactor.Name())
             {
-                 obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "瀹㈡埛绛栫暐" and p.GradingName() = customerOrder.CustomerPolicy());
+                 obj := selectobject( priorityFactor,PriorityFactorDetail,p , p.PriorityFactorName() = "瀹㈡埛绛栫暐" and p.GradingName() = customerOrder.CustomerPolicy());
                  gradeTarget := 1.0;
                  if( not isnull( obj ) )
                  {
@@ -42,7 +43,7 @@
             
             if( "澶у紶鐩堝埄姘村钩" =  priorityFactor.Name())
             {
-                 obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "澶у紶鐩堝埄姘村钩" and  p.GradingName() = customerOrder.SheetProfitability());
+                 obj := selectobject( priorityFactor,PriorityFactorDetail,p , p.PriorityFactorName() = "澶у紶鐩堝埄姘村钩" and  p.GradingName() = customerOrder.SheetProfitability());
                  gradeTarget := 1.0;
                  if( not isnull( obj ) )
                  {
@@ -77,7 +78,7 @@
             
             if( "缁嗗垎甯傚満绛夌骇" =  priorityFactor.Name())
             {
-                 obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "缁嗗垎甯傚満绛夌骇" and p.GradingName() = customerOrder.SegmentPriority());
+                 obj := selectobject( priorityFactor,PriorityFactorDetail,p , p.PriorityFactorName() = "缁嗗垎甯傚満绛夌骇" and p.GradingName() = customerOrder.SegmentPriority());
                  gradeTarget := 1.0;
                  if( not isnull( obj ) )
                  {
@@ -89,7 +90,7 @@
             if( "闇�姹傜被鍨�" =  priorityFactor.Name())
             {     
                 // 鏈夐娴� 鏃犻娴� 绾娴�
-                 obj := selectobject( priorityFactor,PriorityFactorDetails,p,p.GradingName() = customerOrder.OrderType());
+                 obj := selectobject( priorityFactor,PriorityFactorDetail,p,p.GradingName() = customerOrder.OrderType());
                  gradeTarget := 1.0;
                  if( not isnull( obj ) )
                  {
@@ -115,8 +116,22 @@
                  // 涓嬪崟鏃堕棿
                  orderTime := customerOrder.OrderTime();
                  days := orderTime.TotalInDays() - customerOrder.EndDate().TotalInDays();
-                 obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "璁㈠崟涓嬪崟鏃堕棿" and days >= [Number]p.GradingName());
-                 value := priorityFactor.Coefficient() * obj.GradeTarget();
+                 obj := null( PriorityFactorDetail);
+                 sortDetail := selectsortedset( priorityFactor,PriorityFactorDetail,p,[Number]p.GradingName());
+                 traverse( sortDetail,Elements,e )
+                 {
+                       if( days >= [Number]e.GradingName() )
+                       {
+                              obj := e;
+                       }
+                 }      
+                 //obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "璁㈠崟涓嬪崟鏃堕棿" and days >= [Number]p.GradingName());
+                 value := 0;
+                 if( not isnull( obj) )
+                 {
+                    value := priorityFactor.Coefficient() * obj.GradeTarget();
+                 }
+                 
             }
     }
     return value;
diff --git a/_Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl b/_Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl
index 3033476..8518ab1 100644
--- a/_Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl
+++ b/_Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl
@@ -5,6 +5,7 @@
   MacroPlan macroPlan
 ) as String
 {
+  Description: '浼樺厛绾х瓥鐣ュ叕寮忔埅鍙�'
   TextBody:
   [*
     // NBoTk Sep-26-2023 (created)
diff --git a/_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl b/_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl
index 83fc44e..c8cc95d 100644
--- a/_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl
+++ b/_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl
@@ -6,6 +6,7 @@
   GlobalOTDTable globalOTDTable
 )
 {
+  Description: '璁$畻customerOrder浼樺厛绾у緱鍒�'
   TextBody:
   [*
     // NBoTk Sep-26-2023 (created)
diff --git a/_Main/BL/Type_PriorityResult/_ROOT_Type_PriorityResult.qbl b/_Main/BL/Type_PriorityResult/_ROOT_Type_PriorityResult.qbl
index 3d6983a..301485b 100644
--- a/_Main/BL/Type_PriorityResult/_ROOT_Type_PriorityResult.qbl
+++ b/_Main/BL/Type_PriorityResult/_ROOT_Type_PriorityResult.qbl
@@ -5,5 +5,6 @@
 {
   #keys: '5[414382.0.504275125][414382.0.504275123][0.0.0][414382.0.504275124][414382.0.504275126]'
   BaseType: Object
+  Description: '浼樺厛绾х粨鏋�'
   StructuredName: 'PriorityResults'
 }
diff --git a/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_CheckCanTopping.qbl b/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_CheckCanTopping.qbl
index 5e14913..c380797 100644
--- a/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_CheckCanTopping.qbl
+++ b/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_CheckCanTopping.qbl
@@ -4,11 +4,12 @@
   PriorityResultBusinessTypeDetail businessTypeDetails
 ) as Boolean
 {
+  Description: '鏍¢獙褰撳墠鍗曟嵁鏄惁鍙揣鎬ョ疆椤�'
   TextBody:
   [*
     // NBoTk Sep-21-2023 (created)
     groupDetails := selectset( businessTypeDetails.PriorityResult(),PriorityResultGroupDetail,p,true);
     
-    return isnull( groupDetails);
+    return not isnull( groupDetails);
   *]
 }
diff --git a/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_EmergencyTopping.qbl b/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_EmergencyTopping.qbl
index 8030509..7e00fe2 100644
--- a/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_EmergencyTopping.qbl
+++ b/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_EmergencyTopping.qbl
@@ -5,6 +5,7 @@
   PriorityResultBusinessTypeDetail businessTypeDetails
 )
 {
+  Description: '绱ф�ョ疆椤�'
   TextBody:
   [*
     // NBoTk Sep-21-2023 (created)
@@ -16,5 +17,81 @@
     
     topScore := maxPriorityResult + 1;
     businessTypeDetails.PriorityTotalScore(topScore);
+    
+    // 浼樺厛绾у洜瀛愬鐞嗗畬鎴愬悗 鎺掑簭鍥炲~鏁版嵁
+    resultList := selectsortedset( owner,PriorityResult,result,
+                                   true,
+                                   result.PriorityResultScore()
+                                   )
+    
+    // 閲嶆柊璁$畻鍙嶅~customerOrder浼樺厛绾�
+    // Quintiq浼樺厛绾у垎10绾� 闇�瑕佸垎娈佃绠� 鍚戜笂鍙栨暣
+    subLevel := round( resultList.Size() div 10);
+    subLevelCount := 0;
+    
+    priorityValue := 1;
+    if( resultList.Size() <= 10 )
+    {
+        traverse( resultList,Elements,e)
+        {
+            obj := selectobject( owner,SalesDemand.astype( CustomerOrder ),order, 
+                         order.ID() = e.CustomerOrderID()
+                         );
+                         
+            // 璁㈠崟鏁版嵁涓嶄负绌哄啀鍋氬鐞�
+            if( not isnull( obj ) )
+            {
+                  obj.PriorityName([String]priorityValue);
+                  
+                  // 鍒涘缓浼樺厛绾ф暟鎹� 闇�瑕佸厛娓呴櫎涓婁竴娆$殑璁$畻缁撴灉
+                  // 鍒ゆ柇褰撳墠customerOrder鏄惁瀛樺湪
+                  oldPriority := selectobject( owner,Priority,p,p.Name() = [String]priorityValue);
+                  if(isnull( oldPriority ) )
+                  {
+                        owner.Priority(relnew,Weight := priorityValue,Name := [String]priorityValue);
+                  }        
+            }
+            
+            // 鍒ゆ柇璁$畻鍒嗘鏁伴噺涓嶲uintiq鍘熷浼樺厛绾�
+            //浼樺厛绾�+1
+            priorityValue := priorityValue + 1;
+        }
+    }
+    else
+    {
+        traverse( resultList,Elements,e)
+        {
+            obj := selectobject( owner,SalesDemand.astype( CustomerOrder ),order, 
+                                 order.ID() = e.CustomerOrderID()
+                                 );
+            
+            // 璁㈠崟鏁版嵁涓嶄负绌哄啀鍋氬鐞�
+            if( not isnull( obj ) )
+            {
+                  obj.PriorityName([String]priorityValue);
+                  
+                  // 鍒涘缓浼樺厛绾ф暟鎹� 闇�瑕佸厛娓呴櫎涓婁竴娆$殑璁$畻缁撴灉
+                  // 鍒ゆ柇褰撳墠customerOrder鏄惁瀛樺湪
+                  oldPriority := selectobject( owner,Priority,p,p.Name() = [String]priorityValue);
+                  if(isnull( oldPriority ) )
+                  {
+                        owner.Priority(relnew,Weight := priorityValue,Name := [String]priorityValue);
+                  }        
+            }
+        
+            // 鍒ゆ柇璁$畻鍒嗘鏁伴噺涓嶲uintiq鍘熷浼樺厛绾�
+            subLevelCount := subLevelCount + 1;
+            if( subLevelCount = subLevel )
+            {
+                // 褰撳埌杈惧垎娈垫暟閲忓悗 浼樺厛绾�+1 鍒嗘璁℃暟浠�0寮�濮�
+                if( priorityValue < 10 )
+                {
+                      priorityValue := priorityValue + 1;
+                }
+                subLevelCount := 0;
+            }
+        }
+    
+    }
   *]
 }
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_BusinessType.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_BusinessType.qbl
index 0d853fd..aef1070 100644
--- a/_Main/BL/Type_PriorityResultDetail/Attribute_BusinessType.qbl
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_BusinessType.qbl
@@ -3,5 +3,6 @@
 Attribute BusinessType
 {
   #keys: '3[414382.0.504275420][414382.0.504275419][414382.0.504275421]'
+  Description: '浜嬩笟閮�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_Customer.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_Customer.qbl
index e5c3e9e..0ebe7f8 100644
--- a/_Main/BL/Type_PriorityResultDetail/Attribute_Customer.qbl
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_Customer.qbl
@@ -3,5 +3,6 @@
 Attribute Customer
 {
   #keys: '3[414382.0.504275411][414382.0.504275410][414382.0.504275412]'
+  Description: '瀹㈡埛鍚嶇О'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_CustomerID.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_CustomerID.qbl
index 3afa6f2..7f16e5b 100644
--- a/_Main/BL/Type_PriorityResultDetail/Attribute_CustomerID.qbl
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_CustomerID.qbl
@@ -3,5 +3,6 @@
 Attribute CustomerID
 {
   #keys: '3[414382.0.504275429][414382.0.504275428][414382.0.504275430]'
+  Description: '瀹㈡埛缂栫爜'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_DemandDate.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_DemandDate.qbl
index 8218754..099d639 100644
--- a/_Main/BL/Type_PriorityResultDetail/Attribute_DemandDate.qbl
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_DemandDate.qbl
@@ -3,5 +3,6 @@
 Attribute DemandDate
 {
   #keys: '3[414382.0.504275423][414382.0.504275422][414382.0.504275424]'
+  Description: '闇�姹傛椂闂�'
   ValueType: Date
 }
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorGradingName.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorGradingName.qbl
index 30c7925..caa0d6f 100644
--- a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorGradingName.qbl
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorGradingName.qbl
@@ -3,5 +3,6 @@
 Attribute PriorityFactorGradingName
 {
   #keys: '3[414382.0.504275468][414382.0.504275467][414382.0.504275469]'
+  Description: '浼樺厛绾у洜瀛愮粏鍒嗗悕绉�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorName.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorName.qbl
index 2941275..07dc447 100644
--- a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorName.qbl
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorName.qbl
@@ -3,5 +3,6 @@
 Attribute PriorityFactorName
 {
   #keys: '3[414382.0.504275458][414382.0.504275457][414382.0.504275459]'
+  Description: '浼樺厛绾у洜瀛愬悕绉�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityPolicyName.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityPolicyName.qbl
index 58f721a..6488cec 100644
--- a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityPolicyName.qbl
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityPolicyName.qbl
@@ -3,5 +3,6 @@
 Attribute PriorityPolicyName
 {
   #keys: '3[414382.0.504275439][414382.0.504275438][414382.0.504275440]'
+  Description: '浼樺厛绾х瓥鐣ュ悕绉�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityResultScore.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityResultScore.qbl
index 7ef6592..4c5b4b8 100644
--- a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityResultScore.qbl
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityResultScore.qbl
@@ -3,5 +3,6 @@
 Attribute PriorityResultScore
 {
   #keys: '3[414382.0.504275426][414382.0.504275425][414382.0.504275427]'
+  Description: '浼樺厛绾х粨鏋滃緱鍒�'
   ValueType: Real
 }
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_Quantity.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_Quantity.qbl
index 6da2ce3..69c2626 100644
--- a/_Main/BL/Type_PriorityResultDetail/Attribute_Quantity.qbl
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_Quantity.qbl
@@ -3,5 +3,6 @@
 Attribute Quantity
 {
   #keys: '3[414382.0.504275414][414382.0.504275413][414382.0.504275415]'
+  Description: '鏁伴噺'
   ValueType: Real
 }
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_SalesSegmentName.qbl
index 96cedff..a51accf 100644
--- a/_Main/BL/Type_PriorityResultDetail/Attribute_SalesSegmentName.qbl
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_SalesSegmentName.qbl
@@ -3,5 +3,6 @@
 Attribute SalesSegmentName
 {
   #keys: '3[414382.0.504275435][414382.0.504275434][414382.0.504275436]'
+  Description: '閿�鍞儴闂ㄥ悕绉�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_StockingPointID.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_StockingPointID.qbl
index 6f0a2fc..63082aa 100644
--- a/_Main/BL/Type_PriorityResultDetail/Attribute_StockingPointID.qbl
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_StockingPointID.qbl
@@ -3,5 +3,6 @@
 Attribute StockingPointID
 {
   #keys: '3[414382.0.504275417][414382.0.504275416][414382.0.504275418]'
+  Description: '搴撳瓨鐐�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_UnitOfMeasureName.qbl
index 7abadad..d2f8d9e 100644
--- a/_Main/BL/Type_PriorityResultDetail/Attribute_UnitOfMeasureName.qbl
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_UnitOfMeasureName.qbl
@@ -3,5 +3,6 @@
 Attribute UnitOfMeasureName
 {
   #keys: '3[414382.0.504275432][414382.0.504275431][414382.0.504275433]'
+  Description: '鍗曚綅'
   ValueType: String
 }
diff --git a/_Main/BL/Type_PriorityResultDetail/DefaultValue_BusinessType.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_BusinessType.qbl
deleted file mode 100644
index 1672b03..0000000
--- a/_Main/BL/Type_PriorityResultDetail/DefaultValue_BusinessType.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: BusinessType
-}
diff --git a/_Main/BL/Type_PriorityResultDetail/DefaultValue_Customer.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_Customer.qbl
deleted file mode 100644
index e02a336..0000000
--- a/_Main/BL/Type_PriorityResultDetail/DefaultValue_Customer.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: Customer
-}
diff --git a/_Main/BL/Type_PriorityResultDetail/DefaultValue_CustomerID.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_CustomerID.qbl
deleted file mode 100644
index 66ae438..0000000
--- a/_Main/BL/Type_PriorityResultDetail/DefaultValue_CustomerID.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: CustomerID
-}
diff --git a/_Main/BL/Type_PriorityResultDetail/DefaultValue_SalesSegmentName.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_SalesSegmentName.qbl
deleted file mode 100644
index 521966d..0000000
--- a/_Main/BL/Type_PriorityResultDetail/DefaultValue_SalesSegmentName.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: SalesSegmentName
-}
diff --git a/_Main/BL/Type_PriorityResultDetail/DefaultValue_StockingPointID.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_StockingPointID.qbl
deleted file mode 100644
index fbb83fc..0000000
--- a/_Main/BL/Type_PriorityResultDetail/DefaultValue_StockingPointID.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: StockingPointID
-}
diff --git a/_Main/BL/Type_PriorityResultDetail/DefaultValue_UnitOfMeasureName.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_UnitOfMeasureName.qbl
deleted file mode 100644
index b2012de..0000000
--- a/_Main/BL/Type_PriorityResultDetail/DefaultValue_UnitOfMeasureName.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: UnitOfMeasureName
-}
diff --git a/_Main/BL/Type_PriorityResultDetail/_ROOT_Type_PriorityResultDetail.qbl b/_Main/BL/Type_PriorityResultDetail/_ROOT_Type_PriorityResultDetail.qbl
index 26b2f55..7aed150 100644
--- a/_Main/BL/Type_PriorityResultDetail/_ROOT_Type_PriorityResultDetail.qbl
+++ b/_Main/BL/Type_PriorityResultDetail/_ROOT_Type_PriorityResultDetail.qbl
@@ -5,5 +5,6 @@
 {
   #keys: '5[414382.0.504275135][414382.0.504275133][0.0.0][414382.0.504275134][414382.0.504275136]'
   BaseType: Object
+  Description: '浼樺厛绾х粨鏋滄槑缁�'
   StructuredName: 'PriorityResultDetails'
 }
diff --git a/_Main/BL/Type_ProductInLane/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_ProductInLane/StaticMethod_CreateOrUpdate.qbl
index 0359b3f..8fd36c2 100644
--- a/_Main/BL/Type_ProductInLane/StaticMethod_CreateOrUpdate.qbl
+++ b/_Main/BL/Type_ProductInLane/StaticMethod_CreateOrUpdate.qbl
@@ -15,15 +15,15 @@
     
     // Get product&line
     product :=  Product_MP::FindById( owner, productid );
-    line :=  Lane::FindLaneTypeIndex( lineid );
+    line :=  Lane::FindById( owner, lineid );
     
     if( not isnull( product) and not isnull( line)){
-      productinline := ProductInLane::FindProductInLaneTypeIndex( lineid, productid );
+      productinline := ProductInLane::FindById( owner, productid, lineid );
     
       if( isnull( productinline ) ){
       ProductInLane::Create( product, line, isexcluded, isfromdb );
       }else{
-       productinline.Update( productid, lineid, isexcluded, isfromdb );
+        productinline.Update( lineid, productid, isexcluded, isfromdb );
         }
     }
   *]
diff --git a/_Main/BL/Type_ProductInLane/StaticMethod_FindById.qbl b/_Main/BL/Type_ProductInLane/StaticMethod_FindById.qbl
new file mode 100644
index 0000000..e0065ed
--- /dev/null
+++ b/_Main/BL/Type_ProductInLane/StaticMethod_FindById.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindById (
+  MacroPlan mp,
+  String id,
+  String laneid
+) as ProductInLane
+{
+  TextBody:
+  [*
+    // yy 2023-11-01
+    result := select( mp, Product_MP.ProductInLane, pil, true, pil.ProductID() = id and pil.LaneID() = laneid );
+    
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_BusinessType.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..9acd896
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_BusinessType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[414724.0.292616049][414724.0.292616048][414724.0.292616050]'
+  Description: '浜嬩笟閮�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_CurrencyID.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_CurrencyID.qbl
new file mode 100644
index 0000000..f1af9aa
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CurrencyID
+{
+  #keys: '3[414724.0.292600064][414724.0.292600063][414724.0.292600065]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_CustomerID.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_CustomerID.qbl
new file mode 100644
index 0000000..5134f1f
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_CustomerID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomerID
+{
+  #keys: '3[414724.0.292600051][414724.0.292600050][414724.0.292600052]'
+  Description: 'CustomerID'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_CustomerName.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_CustomerName.qbl
new file mode 100644
index 0000000..48816ad
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_CustomerName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomerName
+{
+  #keys: '3[414724.0.292600074][414724.0.292600073][414724.0.292600075]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_CustomerPolicy.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_CustomerPolicy.qbl
new file mode 100644
index 0000000..26d9c89
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_CustomerPolicy.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomerPolicy
+{
+  #keys: '3[414724.0.292600039][414724.0.292600038][414724.0.292600040]'
+  Description: '瀹㈡埛绛栫暐'
+  ValueType: String
+}
diff --git "a/_Main/BL/Type_S_DT_CustomOrder/Attribute_DefaultUOMConversionFactor\043413.qbl" "b/_Main/BL/Type_S_DT_CustomOrder/Attribute_DefaultUOMConversionFactor\043413.qbl"
new file mode 100644
index 0000000..9c7b50f
--- /dev/null
+++ "b/_Main/BL/Type_S_DT_CustomOrder/Attribute_DefaultUOMConversionFactor\043413.qbl"
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DefaultUOMConversionFactor
+{
+  #keys: '3[414724.0.292600084][414724.0.292600083][414724.0.292600085]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_DemandUncertaintyPercentage.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_DemandUncertaintyPercentage.qbl
new file mode 100644
index 0000000..fa27856
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_DemandUncertaintyPercentage.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DemandUncertaintyPercentage
+{
+  #keys: '3[414724.0.292600099][414724.0.292600098][414724.0.292600100]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_DerivedPriorityName.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_DerivedPriorityName.qbl
new file mode 100644
index 0000000..7aa9f83
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_DerivedPriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DerivedPriorityName
+{
+  #keys: '3[414724.0.292600109][414724.0.292600108][414724.0.292600110]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_EndDate.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_EndDate.qbl
new file mode 100644
index 0000000..a67ffa2
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_EndDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EndDate
+{
+  #keys: '3[414724.0.292600119][414724.0.292600118][414724.0.292600120]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_ExpectedQuantity.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_ExpectedQuantity.qbl
new file mode 100644
index 0000000..cf35ed4
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_ExpectedQuantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ExpectedQuantity
+{
+  #keys: '3[414724.0.292600129][414724.0.292600128][414724.0.292600130]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_FulfilledQuantity.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_FulfilledQuantity.qbl
new file mode 100644
index 0000000..7ab421a
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_FulfilledQuantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FulfilledQuantity
+{
+  #keys: '3[414724.0.292600139][414724.0.292600138][414724.0.292600140]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_HasPostponedSalesDemand.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_HasPostponedSalesDemand.qbl
new file mode 100644
index 0000000..0ff7b63
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_HasPostponedSalesDemand.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute HasPostponedSalesDemand
+{
+  #keys: '3[414724.0.292600152][414724.0.292600151][414724.0.292600153]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_HasValidConversionFactor.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_HasValidConversionFactor.qbl
new file mode 100644
index 0000000..99402a6
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_HasValidConversionFactor.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute HasValidConversionFactor
+{
+  #keys: '3[414724.0.292600162][414724.0.292600161][414724.0.292600163]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_ID.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_ID.qbl
new file mode 100644
index 0000000..2c6851c
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_ID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[414724.0.292600172][414724.0.292600171][414724.0.292600173]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_ID_SpliteStruct.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_ID_SpliteStruct.qbl
new file mode 100644
index 0000000..a963e1d
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_ID_SpliteStruct.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID_SpliteStruct
+{
+  #keys: '3[414724.0.314769076][414724.0.314769075][414724.0.314769077]'
+  Description: 'S_DT_SpliteStruct琛↖D'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsAvailable.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsAvailable.qbl
new file mode 100644
index 0000000..26d302c
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsAvailable.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsAvailable
+{
+  #keys: '3[414724.0.292600045][414724.0.292600044][414724.0.292600046]'
+  Description: '璁㈠崟鏄惁鍙備笌璁″垝'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsEligibleForNetting.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsEligibleForNetting.qbl
new file mode 100644
index 0000000..ce1d9c3
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsEligibleForNetting.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsEligibleForNetting
+{
+  #keys: '3[414724.0.292600182][414724.0.292600181][414724.0.292600183]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsExcludedFromFulfillmentKPI.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsExcludedFromFulfillmentKPI.qbl
new file mode 100644
index 0000000..a45c711
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsExcludedFromFulfillmentKPI.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsExcludedFromFulfillmentKPI
+{
+  #keys: '3[414724.0.292600192][414724.0.292600191][414724.0.292600193]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsExcludedFromFulfillmentKPIUser.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
new file mode 100644
index 0000000..6e0bd7a
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsExcludedFromFulfillmentKPIUser
+{
+  #keys: '3[414724.0.292600202][414724.0.292600201][414724.0.292600203]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsFirmed.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsFirmed.qbl
new file mode 100644
index 0000000..bd03e0e
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsFirmed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsFirmed
+{
+  #keys: '3[414724.0.292600212][414724.0.292600211][414724.0.292600213]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsLeaf.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsLeaf.qbl
new file mode 100644
index 0000000..66c441e
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsLeaf.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsLeaf
+{
+  #keys: '3[414724.0.292600222][414724.0.292600221][414724.0.292600223]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsLocked.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsLocked.qbl
new file mode 100644
index 0000000..7a21a34
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsLocked.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsLocked
+{
+  #keys: '3[414724.0.292600232][414724.0.292600231][414724.0.292600233]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsManuallyConfigured.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsManuallyConfigured.qbl
new file mode 100644
index 0000000..b245b9a
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsManuallyConfigured.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsManuallyConfigured
+{
+  #keys: '3[414724.0.292600242][414724.0.292600241][414724.0.292600243]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsPostponed.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsPostponed.qbl
new file mode 100644
index 0000000..6e85880
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsPostponed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsPostponed
+{
+  #keys: '3[414724.0.292600252][414724.0.292600251][414724.0.292600253]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsSoftDeleted.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsSoftDeleted.qbl
new file mode 100644
index 0000000..954dea2
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsSoftDeleted.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsSoftDeleted
+{
+  #keys: '3[414724.0.292600262][414724.0.292600261][414724.0.292600263]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsValidData.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsValidData.qbl
new file mode 100644
index 0000000..e50d18d
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_IsValidData.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsValidData
+{
+  #keys: '3[414724.0.292600272][414724.0.292600271][414724.0.292600273]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_LastModify.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_LastModify.qbl
new file mode 100644
index 0000000..a8d007f
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_LastModify.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LastModify
+{
+  #keys: '3[414724.0.292600033][414724.0.292600032][414724.0.292600034]'
+  Description: '鏈�鍚庝慨鏀逛汉'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_LastModifyTime.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_LastModifyTime.qbl
new file mode 100644
index 0000000..36d44c5
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_LastModifyTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LastModifyTime
+{
+  #keys: '3[414724.0.292600021][414724.0.292600020][414724.0.292600022]'
+  Description: '鏈�鍚庢搷浣滄椂闂�'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_OrderID.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_OrderID.qbl
new file mode 100644
index 0000000..1c5d722
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_OrderID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderID
+{
+  #keys: '3[414724.0.292600282][414724.0.292600281][414724.0.292600283]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_OrderLineID.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_OrderLineID.qbl
new file mode 100644
index 0000000..6aeeba7
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_OrderLineID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderLineID
+{
+  #keys: '3[414724.0.292600292][414724.0.292600291][414724.0.292600293]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_OrderTag.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_OrderTag.qbl
new file mode 100644
index 0000000..aa425a4
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_OrderTag.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderTag
+{
+  #keys: '3[414724.0.292600042][414724.0.292600041][414724.0.292600043]'
+  Description: '璁㈠崟鐘舵�侊紝鍐插噺鍚庤祴鍊硷紝绾娴�,鏈夐娴嬶紝鏃犻娴嬶紝鍙嶇锛屾巿鏉�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_OrderTime.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_OrderTime.qbl
new file mode 100644
index 0000000..8e1a43b
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_OrderTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderTime
+{
+  #keys: '3[414724.0.292600024][414724.0.292600023][414724.0.292600025]'
+  Description: '璁㈠崟涓嬪崟鏃堕棿'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_OrderType.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_OrderType.qbl
new file mode 100644
index 0000000..f3f52cf
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_OrderType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderType
+{
+  #keys: '3[414724.0.292600018][414724.0.292600017][414724.0.292600019]'
+  Description: '璁㈠崟绫诲瀷'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_OutsideOfPlanningHorizonQuantity.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_OutsideOfPlanningHorizonQuantity.qbl
new file mode 100644
index 0000000..ec41ccb
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_OutsideOfPlanningHorizonQuantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OutsideOfPlanningHorizonQuantity
+{
+  #keys: '3[414724.0.292600302][414724.0.292600301][414724.0.292600303]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_PISPConversionFactor.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_PISPConversionFactor.qbl
new file mode 100644
index 0000000..a5128b6
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_PISPConversionFactor.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PISPConversionFactor
+{
+  #keys: '3[414724.0.292600312][414724.0.292600311][414724.0.292600313]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_ParentID.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_ParentID.qbl
new file mode 100644
index 0000000..1069893
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_ParentID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ParentID
+{
+  #keys: '3[414724.0.301487657][414724.0.301487656][414724.0.301487658]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_Price.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_Price.qbl
new file mode 100644
index 0000000..9e3c7b9
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Price
+{
+  #keys: '3[414724.0.292600322][414724.0.292600321][414724.0.292600323]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_PriceUoM.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_PriceUoM.qbl
new file mode 100644
index 0000000..f163e1d
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_PriceUoM.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriceUoM
+{
+  #keys: '3[414724.0.292600332][414724.0.292600331][414724.0.292600333]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_PriorityName.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_PriorityName.qbl
new file mode 100644
index 0000000..62b2da2
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_PriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityName
+{
+  #keys: '3[414724.0.292600342][414724.0.292600341][414724.0.292600343]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_ProductGrade.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_ProductGrade.qbl
new file mode 100644
index 0000000..d5d79e7
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_ProductGrade.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductGrade
+{
+  #keys: '3[414724.0.292600036][414724.0.292600035][414724.0.292600037]'
+  Description: '浜у搧绛夌骇'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_ProductID.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_ProductID.qbl
new file mode 100644
index 0000000..4d67010
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414724.0.292600352][414724.0.292600351][414724.0.292600353]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_Quantity.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_Quantity.qbl
new file mode 100644
index 0000000..e0194fe
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[414724.0.292600368][414724.0.292600367][414724.0.292600369]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_QuantityInDefaultUoM.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_QuantityInDefaultUoM.qbl
new file mode 100644
index 0000000..6008923
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_QuantityInDefaultUoM.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute QuantityInDefaultUoM
+{
+  #keys: '3[414724.0.292600378][414724.0.292600377][414724.0.292600379]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_QuantityPerDay.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_QuantityPerDay.qbl
new file mode 100644
index 0000000..f5d1b6c
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_QuantityPerDay.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute QuantityPerDay
+{
+  #keys: '3[414724.0.292600388][414724.0.292600387][414724.0.292600389]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_SalesDemandConversionFactor.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SalesDemandConversionFactor.qbl
new file mode 100644
index 0000000..8e79627
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SalesDemandConversionFactor.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesDemandConversionFactor
+{
+  #keys: '3[414724.0.292600398][414724.0.292600397][414724.0.292600399]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SalesSegmentName.qbl
new file mode 100644
index 0000000..dff72c7
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SalesSegmentName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesSegmentName
+{
+  #keys: '3[414724.0.292600408][414724.0.292600407][414724.0.292600409]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_SanityCheckDataMostSevere.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SanityCheckDataMostSevere.qbl
new file mode 100644
index 0000000..79942f2
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SanityCheckDataMostSevere.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SanityCheckDataMostSevere
+{
+  #keys: '3[414724.0.292600416][414724.0.292600415][414724.0.292600417]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_SanityCheckDataMostSevereCount.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SanityCheckDataMostSevereCount.qbl
new file mode 100644
index 0000000..37bec23
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SanityCheckDataMostSevereCount.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SanityCheckDataMostSevereCount
+{
+  #keys: '3[414724.0.292600426][414724.0.292600425][414724.0.292600427]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_SanityCheckDataTotalViolationCount.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SanityCheckDataTotalViolationCount.qbl
new file mode 100644
index 0000000..4d8472e
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SanityCheckDataTotalViolationCount.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SanityCheckDataTotalViolationCount
+{
+  #keys: '3[414724.0.292600436][414724.0.292600435][414724.0.292600437]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_SegmentPriority.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SegmentPriority.qbl
new file mode 100644
index 0000000..30bcd18
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SegmentPriority.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SegmentPriority
+{
+  #keys: '3[414724.0.292600030][414724.0.292600029][414724.0.292600031]'
+  Description: '缁嗗垎甯傚満浼樺厛绾�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_SheetProfitability.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SheetProfitability.qbl
new file mode 100644
index 0000000..c7d7073
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SheetProfitability.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SheetProfitability
+{
+  #keys: '3[414724.0.292600027][414724.0.292600026][414724.0.292600028]'
+  Description: '澶у紶鐩堝埄姘村钩'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_SplitCount.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SplitCount.qbl
new file mode 100644
index 0000000..7481b6d
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SplitCount.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SplitCount
+{
+  #keys: '3[414724.0.297907220][414724.0.297907219][414724.0.297907221]'
+  Description: '鎷嗚琛屾暟'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_SpliteReason.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SpliteReason.qbl
new file mode 100644
index 0000000..8121f1d
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SpliteReason.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SpliteReason
+{
+  #keys: '3[414724.0.297907210][414724.0.297907209][414724.0.297907211]'
+  Description: '鎷嗚鍘熷洜'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_SpliteRenmain.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SpliteRenmain.qbl
new file mode 100644
index 0000000..2f9bdf5
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_SpliteRenmain.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SpliteRenmain
+{
+  #keys: '3[414724.0.297907230][414724.0.297907229][414724.0.297907231]'
+  Description: '鎷嗚鍓╀綑閲�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_StartDate.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_StartDate.qbl
new file mode 100644
index 0000000..05bec5c
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[414724.0.292600446][414724.0.292600445][414724.0.292600447]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_Status_Splite.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_Status_Splite.qbl
new file mode 100644
index 0000000..2b8afbc
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_Status_Splite.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Status_Splite
+{
+  #keys: '3[414724.0.297907200][414724.0.297907199][414724.0.297907201]'
+  Description: '鎷嗚鐘舵�侊細鏈媶琛岋紝宸叉媶琛�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_StockingPointID.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..f48a4d3
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414724.0.292600456][414724.0.292600455][414724.0.292600457]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..9787651
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasureName
+{
+  #keys: '3[414724.0.292600466][414724.0.292600465][414724.0.292600467]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/Attribute_Variance.qbl b/_Main/BL/Type_S_DT_CustomOrder/Attribute_Variance.qbl
new file mode 100644
index 0000000..38c3a16
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/Attribute_Variance.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Variance
+{
+  #keys: '3[414724.0.292600476][414724.0.292600475][414724.0.292600477]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/DeclarativeTypeIndexRelation_CalcChild.qbl b/_Main/BL/Type_S_DT_CustomOrder/DeclarativeTypeIndexRelation_CalcChild.qbl
new file mode 100644
index 0000000..7306bdb
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/DeclarativeTypeIndexRelation_CalcChild.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+DeclarativeTypeIndexRelation CalcChild
+{
+  #keys: '1[414724.0.314769003]'
+  Relation: Child
+  TypeIndex: PrimaryKey_ID
+  TypeIndexExpressions:
+  [
+    DeclarativeRelationTypeIndexExpression
+    {
+      #keys: '1[414724.0.314769004]'
+      TypeIndexExpression: 'this.ParentID()'
+    }
+  ]
+}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_BusinessType.qbl b/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_BusinessType.qbl
similarity index 100%
rename from _Main/BL/Type_HistoricalSalesOrder/DefaultValue_BusinessType.qbl
rename to _Main/BL/Type_S_DT_CustomOrder/DefaultValue_BusinessType.qbl
diff --git a/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_CustomerPolicy.qbl b/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_CustomerPolicy.qbl
new file mode 100644
index 0000000..d08c252
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_CustomerPolicy.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: CustomerPolicy
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_LastModify.qbl b/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_LastModify.qbl
new file mode 100644
index 0000000..6ef422d
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_LastModify.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: LastModify
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_OrderTag.qbl b/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_OrderTag.qbl
new file mode 100644
index 0000000..9f5cca1
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_OrderTag.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: OrderTag
+}
diff --git a/_Main/BL/Type_HistoricalSalesOrder/DefaultValue_OrderType.qbl b/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_OrderType.qbl
similarity index 100%
rename from _Main/BL/Type_HistoricalSalesOrder/DefaultValue_OrderType.qbl
rename to _Main/BL/Type_S_DT_CustomOrder/DefaultValue_OrderType.qbl
diff --git a/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_ProductGrade.qbl b/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_ProductGrade.qbl
new file mode 100644
index 0000000..6571585
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_ProductGrade.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ProductGrade
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_SegmentPriority.qbl b/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_SegmentPriority.qbl
new file mode 100644
index 0000000..1da1a6c
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_SegmentPriority.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: SegmentPriority
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_SheetProfitability.qbl b/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_SheetProfitability.qbl
new file mode 100644
index 0000000..6f747a5
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/DefaultValue_SheetProfitability.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: SheetProfitability
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/TypeIndex_PrimaryKey_ID.qbl b/_Main/BL/Type_S_DT_CustomOrder/TypeIndex_PrimaryKey_ID.qbl
new file mode 100644
index 0000000..f455959
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/TypeIndex_PrimaryKey_ID.qbl
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: #root
+TypeIndex PrimaryKey_ID
+{
+  Attributes:
+  [
+    TypeIndexAttribute
+    {
+      ModelElement: ID
+    }
+  ]
+}
diff --git a/_Main/BL/Type_S_DT_CustomOrder/_ROOT_Type_S_DT_CustomOrder.qbl b/_Main/BL/Type_S_DT_CustomOrder/_ROOT_Type_S_DT_CustomOrder.qbl
new file mode 100644
index 0000000..5aef91a
--- /dev/null
+++ b/_Main/BL/Type_S_DT_CustomOrder/_ROOT_Type_S_DT_CustomOrder.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type S_DT_CustomOrder
+{
+  #keys: '5[414724.0.292616028][414724.0.292616026][0.0.0][414724.0.292616027][414724.0.292616029]'
+  BaseType: Object
+  Description: '棰勬媶琛岃鍗�'
+  StructuredName: 'S_DT_CustomOrders'
+}
diff --git a/_Main/BL/Type_S_DT_OrderSpliteRow/Attribute_NewAttribute.qbl b/_Main/BL/Type_S_DT_OrderSpliteRow/Attribute_NewAttribute.qbl
new file mode 100644
index 0000000..5e257e7
--- /dev/null
+++ b/_Main/BL/Type_S_DT_OrderSpliteRow/Attribute_NewAttribute.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute NewAttribute
+{
+  #keys: '3[414724.0.289871335][414724.0.289871334][414724.0.289871336]'
+  ValueType: BinaryValue
+}
diff --git a/_Main/BL/Type_S_DT_OrderSpliteRow/_ROOT_Type_S_DT_OrderSpliteRow.qbl b/_Main/BL/Type_S_DT_OrderSpliteRow/_ROOT_Type_S_DT_OrderSpliteRow.qbl
new file mode 100644
index 0000000..c18766d
--- /dev/null
+++ b/_Main/BL/Type_S_DT_OrderSpliteRow/_ROOT_Type_S_DT_OrderSpliteRow.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type S_DT_OrderSpliteRow
+{
+  #keys: '5[414724.0.289871270][414724.0.289871268][0.0.0][414724.0.289871269][414724.0.289871271]'
+  BaseType: Object
+  Description: '棰勬媶琛岃鍗�'
+  StructuredName: 'S_DT_OrderSpliteRows'
+}
diff --git a/_Main/BL/Type_S_DT_SpliteStruct/Attribute_ForecastDate.qbl b/_Main/BL/Type_S_DT_SpliteStruct/Attribute_ForecastDate.qbl
new file mode 100644
index 0000000..9dae9a8
--- /dev/null
+++ b/_Main/BL/Type_S_DT_SpliteStruct/Attribute_ForecastDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ForecastDate
+{
+  #keys: '3[414724.0.291485648][414724.0.291485647][414724.0.291485649]'
+  Description: '闇�姹傛棩鏈�'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_S_DT_SpliteStruct/Attribute_ID.qbl b/_Main/BL/Type_S_DT_SpliteStruct/Attribute_ID.qbl
new file mode 100644
index 0000000..b3734cd
--- /dev/null
+++ b/_Main/BL/Type_S_DT_SpliteStruct/Attribute_ID.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[414724.0.291485698][414724.0.291485697][414724.0.291485699]'
+  Description: '涓婚敭ID'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_SpliteStruct/Attribute_ID_S_DT_CustomOrder.qbl b/_Main/BL/Type_S_DT_SpliteStruct/Attribute_ID_S_DT_CustomOrder.qbl
new file mode 100644
index 0000000..f96559e
--- /dev/null
+++ b/_Main/BL/Type_S_DT_SpliteStruct/Attribute_ID_S_DT_CustomOrder.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID_S_DT_CustomOrder
+{
+  #keys: '3[414724.0.320004537][414724.0.320004536][414724.0.320004538]'
+  Description: 'S_DT_CustomOrder琛↖D,澶栭敭鍏宠仈锛圤rderID鍦ㄨ鍗曡〃涓嶅敮涓�锛屾棤娉曚娇鐢級'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_SpliteStruct/Attribute_OrderID.qbl b/_Main/BL/Type_S_DT_SpliteStruct/Attribute_OrderID.qbl
new file mode 100644
index 0000000..394500c
--- /dev/null
+++ b/_Main/BL/Type_S_DT_SpliteStruct/Attribute_OrderID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderID
+{
+  #keys: '3[414724.0.291485665][414724.0.291485664][414724.0.291485666]'
+  Description: '璁㈠崟ID'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_SpliteStruct/Attribute_Qty.qbl b/_Main/BL/Type_S_DT_SpliteStruct/Attribute_Qty.qbl
new file mode 100644
index 0000000..c24f8c6
--- /dev/null
+++ b/_Main/BL/Type_S_DT_SpliteStruct/Attribute_Qty.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Qty
+{
+  #keys: '3[414724.0.291485658][414724.0.291485657][414724.0.291485659]'
+  Description: '鏁伴噺'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_S_DT_SpliteStruct/Attribute_SpliteReason.qbl b/_Main/BL/Type_S_DT_SpliteStruct/Attribute_SpliteReason.qbl
new file mode 100644
index 0000000..e2c2bbf
--- /dev/null
+++ b/_Main/BL/Type_S_DT_SpliteStruct/Attribute_SpliteReason.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SpliteReason
+{
+  #keys: '3[414724.0.320004525][414724.0.320004524][414724.0.320004526]'
+  Description: '鎷嗗垎鍘熷洜'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_S_DT_SpliteStruct/Attribute_Status.qbl b/_Main/BL/Type_S_DT_SpliteStruct/Attribute_Status.qbl
new file mode 100644
index 0000000..7aac95f
--- /dev/null
+++ b/_Main/BL/Type_S_DT_SpliteStruct/Attribute_Status.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Status
+{
+  #keys: '3[414724.0.291485678][414724.0.291485677][414724.0.291485679]'
+  Description: '鐘舵�侊細null/1 鏈夋晥锛�0鍒犻櫎'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_S_DT_SpliteStruct/DefaultValue_Status.qbl b/_Main/BL/Type_S_DT_SpliteStruct/DefaultValue_Status.qbl
new file mode 100644
index 0000000..84f8bc0
--- /dev/null
+++ b/_Main/BL/Type_S_DT_SpliteStruct/DefaultValue_Status.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '1'
+  TargetAttribute: Status
+}
diff --git a/_Main/BL/Type_S_DT_SpliteStruct/_ROOT_Type_S_DT_SpliteStruct.qbl b/_Main/BL/Type_S_DT_SpliteStruct/_ROOT_Type_S_DT_SpliteStruct.qbl
new file mode 100644
index 0000000..3b5bd6f
--- /dev/null
+++ b/_Main/BL/Type_S_DT_SpliteStruct/_ROOT_Type_S_DT_SpliteStruct.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type S_DT_SpliteStruct
+{
+  #keys: '5[414724.0.291485609][414724.0.291485607][0.0.0][414724.0.291485608][414724.0.291485610]'
+  BaseType: Object
+  Description: '鎷嗗垎缁撴瀯'
+  StructuredName: 'S_DT_SpliteStructs'
+}
diff --git a/_Main/BL/Type_S_FunctionClass/StaticMethod_SM_OrderToSpliteOrder.qbl b/_Main/BL/Type_S_FunctionClass/StaticMethod_SM_OrderToSpliteOrder.qbl
new file mode 100644
index 0000000..26760bd
--- /dev/null
+++ b/_Main/BL/Type_S_FunctionClass/StaticMethod_SM_OrderToSpliteOrder.qbl
@@ -0,0 +1,207 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SM_OrderToSpliteOrder (
+  MacroPlan Owner,
+  CustomerOrder OrderInfo,
+  String SpliteReason
+) as owning JSON
+{
+  Description: '璁㈠崟杞负棰勬媶鍒嗚鍗曞嚱鏁�'
+  TextBody:
+  [*
+    /************************************璁㈠崟杞崲涓洪鎷嗗垎璁㈠崟******************************
+    *鍑芥暟鍚嶏細SM_OrderToSpliteOrder
+    *鍒涘缓浜猴細yunying
+    *鍒涘缓鏃堕棿锛�2023-10-26
+    *鎻忚堪锛氳鍗曟媶琛岋紝灏嗕紶鍏ョ殑璁㈠崟瀛樺叆棰勬媶鍒嗚〃锛屽苟鍦ㄨ鍗曡〃涓皢璇ヨ鍗曠Щ闄ゃ��
+          鍚屾椂鐢熸垚瀛愯鍗曪紙鑻_DT_SpliteStruct瀛樺湪鐩稿悓璁㈠崟鍙凤級
+    *-----------------------------
+    *鍙傛暟锛歄wner      MacroPlan
+    *     OrderInfo  瑕佽浆涓洪鎷嗗垎鐨勮鍗�
+    *     SpliteReason 鎷嗗垎鍘熷洜
+    *****************************************************************************/
+    // 鍒濆鍖栫粨鏋�
+    bStatus := false;
+    strMsg :="";
+    // 鑾峰彇鐗堟湰鍙�,杩欓噷鏄惁闇�瑕佸拰鐗堟湰鍙峰姛鑳藉鎺�
+    VCode :=H_FunctionClass::SM_GenerateID("VC");
+    
+    try{
+      if( not isnull( Owner))
+      {
+        // 鎷嗗垎琛屾暟
+        SplitCount := selectset( Owner,S_DT_SpliteStruct,obj,obj.ID_S_DT_CustomOrder()=OrderInfo.ID() and obj.Status()=1).Size();
+        // 鎷嗗垎鏁伴噺
+        SpliteQty:= sum( Owner,S_DT_SpliteStruct,obj,obj.ID_S_DT_CustomOrder()=OrderInfo.ID() and obj.Status()=1,obj.Qty());
+        // 鍓╀綑鏁伴噺
+        UnSpliteQty:= OrderInfo.Quantity() - SpliteQty;
+        // 淇濇寔鎷嗗垎淇℃伅
+        SCustomOrder:=select( Owner,S_DT_CustomOrder,obj,obj.ID()=OrderInfo.ID());
+        if( isnull( SCustomOrder))
+        {
+          Owner.S_DT_CustomOrder(relnew,BusinessType:=OrderInfo.BusinessType()
+                                        ,CurrencyID:=OrderInfo.CurrencyID()
+                                        ,CustomerID:=OrderInfo.CustomerID()
+                                        ,CustomerName:=OrderInfo.CustomerName()
+                                        ,CustomerPolicy:=OrderInfo.CustomerPolicy()
+                                        ,DefaultUOMConversionFactor:=OrderInfo.DefaultUOMConversionFactor()
+                                        ,DemandUncertaintyPercentage:=OrderInfo.DemandUncertaintyPercentage()
+                                        ,DerivedPriorityName:=OrderInfo.DerivedPriorityName()
+                                        ,EndDate:=OrderInfo.EndDate()
+                                        ,ExpectedQuantity:=OrderInfo.ExpectedQuantity()
+                                        ,FulfilledQuantity:=OrderInfo.FulfilledQuantity()
+                                        ,HasPostponedSalesDemand:=OrderInfo.HasPostponedSalesDemand()
+                                        ,HasValidConversionFactor:=OrderInfo.HasValidConversionFactor()
+                                        ,ID:=OrderInfo.ID()
+                                        ,IsEligibleForNetting:=OrderInfo.IsEligibleForNetting()
+                                        ,IsExcludedFromFulfillmentKPI:=OrderInfo.IsExcludedFromFulfillmentKPI()
+                                        ,IsExcludedFromFulfillmentKPIUser:=OrderInfo.IsExcludedFromFulfillmentKPIUser()
+                                        ,IsFirmed:=OrderInfo.IsFirmed()
+                                        ,IsLeaf := OrderInfo.IsLeaf()
+                                        ,IsLocked:=OrderInfo.IsLocked()
+                                        ,IsAvailable := OrderInfo.IsAvailable()
+                                        ,IsManuallyConfigured:=OrderInfo.IsManuallyConfigured()
+                                        ,IsPostponed:=OrderInfo.IsPostponed()
+                                        ,IsSoftDeleted:=OrderInfo.IsSoftDeleted()
+                                        ,IsValidData:=OrderInfo.IsValidData()
+                                        ,LastModify:=OrderInfo.LastModify()
+                                        ,LastModifyTime:=OrderInfo.LastModifyTime()
+                                        ,OrderID:=OrderInfo.OrderID()
+                                        ,OrderLineID:=OrderInfo.OrderLineID()
+                                        ,OrderTag:=OrderInfo.OrderTag()
+                                        ,OrderTime:=OrderInfo.OrderTime()
+                                        ,OrderType:=OrderInfo.OrderType()
+                                        ,OutsideOfPlanningHorizonQuantity:=OrderInfo.OutsideOfPlanningHorizonQuantity()
+                                        ,PISPConversionFactor:=OrderInfo.PISPConversionFactor()
+                                        ,Price:=OrderInfo.Price()
+                                        ,PriceUoM:=OrderInfo.PriceUoM()
+                                        ,PriorityName:=OrderInfo.PriorityName()
+                                        ,ProductGrade:=OrderInfo.ProductGrade()
+                                        ,ProductID:=OrderInfo.ProductID()
+                                        ,Quantity:=OrderInfo.Quantity()
+                                        ,QuantityInDefaultUoM:=OrderInfo.QuantityInDefaultUoM()
+                                        ,QuantityPerDay:=OrderInfo.QuantityPerDay()
+                                        ,SalesDemandConversionFactor:=OrderInfo.SalesDemandConversionFactor()
+                                        ,SalesSegmentName:=OrderInfo.SalesSegmentName()
+                                        ,SanityCheckDataMostSevere:=OrderInfo.SanityCheckDataMostSevere()
+                                        ,SanityCheckDataMostSevereCount:=OrderInfo.SanityCheckDataMostSevereCount()
+                                        ,SanityCheckDataTotalViolationCount:=OrderInfo.SanityCheckDataTotalViolationCount()
+                                        ,SegmentPriority:=OrderInfo.SegmentPriority()
+                                        ,SheetProfitability:=OrderInfo.SheetProfitability()
+                                        ,StartDate:=OrderInfo.StartDate()
+                                        ,StockingPointID:=OrderInfo.StockingPointID()
+                                        ,UnitOfMeasureName:=OrderInfo.UnitOfMeasureName()
+                                        ,SplitCount := SplitCount
+                                        ,SpliteRenmain := UnSpliteQty);
+        }
+        else
+        {
+          SCustomOrder.SplitCount(SplitCount);
+          SCustomOrder.SpliteRenmain(UnSpliteQty);
+        }
+        OId:=0;
+        NewID:="";
+        SpliteOrderInfo :=null( S_DT_CustomOrder,constcontent );
+        // 鐢熸垚瀛愯鍗�
+        traverse( Owner,S_DT_SpliteStruct,obj,obj.ID_S_DT_CustomOrder()=OrderInfo.ID())
+        {
+          OId:=OId+1;
+          // 寰楀埌瀵瑰簲鐨勫凡鎷嗗垎璁㈠崟
+          SpliteOrderInfo := select( Owner,S_DT_CustomOrder,objSO,objSO.ID_SpliteStruct()=obj.ID());
+          // 鎷嗗垎琚垹闄わ紝灏嗗凡缁忎繚鎸佺殑鎷嗗垎璁㈠崟璺熼殢鍒犻櫎
+          if(obj.Status()=0)
+          {
+            if(not isnull( SpliteOrderInfo))
+            {
+              SpliteOrderInfo.Delete();
+            }
+            obj.Delete();  
+          }
+          else
+          {
+            // 淇濆瓨鏂板鐨勬媶鍒�
+            if(isnull( SpliteOrderInfo))
+            {
+              NewID:=OrderInfo.ID()+"_"+OId.AsQUILL()+"_"+DateTime::ActualGMTTime().Format( "hms");
+              Owner.S_DT_CustomOrder(relnew,BusinessType:=OrderInfo.BusinessType()
+                                          ,CurrencyID:=OrderInfo.CurrencyID()
+                                          ,CustomerID:=OrderInfo.CustomerID()
+                                          ,CustomerName:=OrderInfo.CustomerName()
+                                          ,CustomerPolicy:=OrderInfo.CustomerPolicy()
+                                          ,DefaultUOMConversionFactor:=OrderInfo.DefaultUOMConversionFactor()
+                                          ,DemandUncertaintyPercentage:=OrderInfo.DemandUncertaintyPercentage()
+                                          ,DerivedPriorityName:=OrderInfo.DerivedPriorityName()
+                                          ,EndDate:=obj.ForecastDate()
+                                          ,ExpectedQuantity:=OrderInfo.ExpectedQuantity()
+                                          ,FulfilledQuantity:=OrderInfo.FulfilledQuantity()
+                                          ,HasPostponedSalesDemand:=OrderInfo.HasPostponedSalesDemand()
+                                          ,HasValidConversionFactor:=OrderInfo.HasValidConversionFactor()
+                                          ,ID:=NewID
+                                          ,IsEligibleForNetting:=OrderInfo.IsEligibleForNetting()
+                                          ,IsExcludedFromFulfillmentKPI:=OrderInfo.IsExcludedFromFulfillmentKPI()
+                                          ,IsExcludedFromFulfillmentKPIUser:=OrderInfo.IsExcludedFromFulfillmentKPIUser()
+                                          ,IsFirmed:=OrderInfo.IsFirmed()
+                                          ,IsLeaf := OrderInfo.IsLeaf()
+                                          ,IsLocked:=OrderInfo.IsLocked()
+                                          ,IsAvailable := OrderInfo.IsAvailable()
+                                          ,IsManuallyConfigured:=OrderInfo.IsManuallyConfigured()
+                                          ,IsPostponed:=OrderInfo.IsPostponed()
+                                          ,IsSoftDeleted:=OrderInfo.IsSoftDeleted()
+                                          ,IsValidData:=OrderInfo.IsValidData()
+                                          ,LastModify:=OrderInfo.LastModify()
+                                          ,LastModifyTime:=OrderInfo.LastModifyTime()
+                                          ,OrderID:=OrderInfo.OrderID()
+                                          ,OrderLineID:=OrderInfo.OrderLineID()
+                                          ,OrderTag:=OrderInfo.OrderTag()
+                                          ,OrderTime:=OrderInfo.OrderTime()
+                                          ,OrderType:=OrderInfo.OrderType()
+                                          ,OutsideOfPlanningHorizonQuantity:=OrderInfo.OutsideOfPlanningHorizonQuantity()
+                                          ,PISPConversionFactor:=OrderInfo.PISPConversionFactor()
+                                          ,Price:=OrderInfo.Price()
+                                          ,PriceUoM:=OrderInfo.PriceUoM()
+                                          ,PriorityName:=OrderInfo.PriorityName()
+                                          ,ProductGrade:=OrderInfo.ProductGrade()
+                                          ,ProductID:=OrderInfo.ProductID()
+                                          ,Quantity:=obj.Qty()
+                                          ,QuantityInDefaultUoM:=OrderInfo.QuantityInDefaultUoM()
+                                          ,QuantityPerDay:=OrderInfo.QuantityPerDay()
+                                          ,SalesDemandConversionFactor:=OrderInfo.SalesDemandConversionFactor()
+                                          ,SalesSegmentName:=OrderInfo.SalesSegmentName()
+                                          ,SanityCheckDataMostSevere:=OrderInfo.SanityCheckDataMostSevere()
+                                          ,SanityCheckDataMostSevereCount:=OrderInfo.SanityCheckDataMostSevereCount()
+                                          ,SanityCheckDataTotalViolationCount:=OrderInfo.SanityCheckDataTotalViolationCount()
+                                          ,SegmentPriority:=OrderInfo.SegmentPriority()
+                                          ,SheetProfitability:=OrderInfo.SheetProfitability()
+                                          ,StartDate:=OrderInfo.StartDate()
+                                          ,StockingPointID:=OrderInfo.StockingPointID()
+                                          ,UnitOfMeasureName:=OrderInfo.UnitOfMeasureName()
+                                          ,ParentID := OrderInfo.ID()
+                                          ,SpliteReason := obj.SpliteReason()
+                                          ,ID_SpliteStruct := obj.ID());
+            }
+          }
+        }
+        // 鍒犻櫎璁㈠崟
+        //Order:=select( Owner,SalesDemand.astype( CustomerOrder ),obj,obj.ID()=OrderInfo.ID());
+        //OrderInfo.Delete();
+        bStatus:=true;
+        strMsg:="璁㈠崟锛�"+OrderInfo.OrderID()+"宸茶浆鍏ラ鎷嗗垎璁板綍锛屽彲浣跨敤杩樺師鍔熻兘鎭㈠锛�";
+      }
+      else
+      {
+        strMsg:="鍦烘櫙鍒濆鍖栧け璐ワ紝璇烽�夋嫨鍦烘櫙鍚庝娇鐢ㄨ鍔熻兘銆�";
+      }
+    }
+    onerror
+    {
+      strMsg :="璁剧疆涓洪鎷嗗垎琛屽け璐ワ紝璇疯仈绯荤郴缁熺鐞嗗憳锛�";
+      // 璁板綍閿欒鏃ュ織
+      Owner.H_ErrorLogs(relnew,EClassName := "S_FunctionClass",EDateTime := DateTime::ActualGMTTime(),EFunctionName := "SM_OrderToSpliteOrder",
+                         DeveloperInformation :=  e.DeveloperInformation(),ErrorNr := e.ErrorNr(),DetailedInformation := e.DetailedInformation(),
+                         GeneralInformation := e.GeneralInformation());                
+    }
+    return JSON::Object().Add( "Status",bStatus)
+                         .Add( "VersionCode",VCode)
+                         .Add( "Msg",strMsg).Build();
+  *]
+}
diff --git a/_Main/BL/Type_S_FunctionClass/_ROOT_Type_S_FunctionClass.qbl b/_Main/BL/Type_S_FunctionClass/_ROOT_Type_S_FunctionClass.qbl
new file mode 100644
index 0000000..eb20166
--- /dev/null
+++ b/_Main/BL/Type_S_FunctionClass/_ROOT_Type_S_FunctionClass.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type S_FunctionClass
+{
+  #keys: '5[414724.0.288796771][414724.0.288796769][0.0.0][414724.0.288796770][414724.0.288796772]'
+  BaseType: Object
+  Description: '璁㈠崟鎷嗚鎿嶄綔绫�'
+  StructuredName: 'S_FunctionClasss'
+}
diff --git a/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateFromMapping.qbl b/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateFromMapping.qbl
new file mode 100644
index 0000000..f56738d
--- /dev/null
+++ b/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateFromMapping.qbl
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateFromMapping (
+  const GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan
+)
+{
+  Description: '浠巑apping琛ㄥ垱寤哄簱瀛樼偣'
+  TextBody:
+  [*
+    // Administrator Oct-31-2023 (created)
+    updates := construct( StockingPoint_MPs );
+    traverse( globalOTDTable, Global_MappingStockingPoint_MP, sp, true )
+    {
+      a := StockingPoint_MP::CreateStockingpoint( macroPlan, sp.ID(), sp.UnitID(), sp.Name() );
+      updates.Add( a );
+      }
+    origindataset := selectset( macroPlan, StockingPoint_MP, sp, true );
+    obsoletes := origindataset.Difference( updates );
+    // delete obsoleted
+    difflength := obsoletes.Size();
+    for( j:=0; j<difflength; j++ )
+    {
+      obsolete := obsoletes.Element( j );
+      obsolete.Delete();
+      }
+  *]
+}
diff --git a/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpoint.qbl b/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpoint.qbl
index 857199b..3e2a601 100644
--- a/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpoint.qbl
+++ b/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpoint.qbl
@@ -22,7 +22,7 @@
     isfromdb := true;
     
     //create new stockingpoint
-    result := StockingPoint_MP::FindStockingPointTypeIndex( id );
+    result := StockingPoint_MP::FindById( mp, id );
     
     if( isnull( result ) )
     {
diff --git a/_Main/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/Sys/ImgAttr/DataInterfaceLog.dme b/_Main/Sys/ImgAttr/DataInterfaceLog.dme
new file mode 100644
index 0000000..82ef720
--- /dev/null
+++ b/_Main/Sys/ImgAttr/DataInterfaceLog.dme
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#parent: #root
+TypeDataInterface DataInterfaceLog
+{
+  TypeKey: '[414702.1.240820043]'
+  ImageDataMember ImgExecuteStatus
+  {
+    #keys: '1[414702.1.241719046]'
+    ImageSpecifications:
+    [
+      ImageDataMemberImageSpecification
+      {
+        Image: 'MEDIA_PLAY_GREEN'
+        Quill: 'object.ExecuteStatus() = "Running"'
+        Value: 'Running'
+      }
+      ImageDataMemberImageSpecification
+      {
+        Image: 'CHECK'
+        Quill: 'object.ExecuteStatus() = "Success"'
+        Value: 'Success'
+      }
+      ImageDataMemberImageSpecification
+      {
+        Image: 'DELETE2'
+        Quill: 'object.ExecuteStatus() = "Error"'
+        Value: 'Error'
+      }
+    ]
+  }
+}
diff --git a/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def b/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
index 4ad9e84..07ca890 100644
--- a/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
+++ b/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
@@ -85,6 +85,7 @@
         Component MenuDoSync { #keys: '[414384.0.605664172]' BaseType: 'Menu' Properties: [ Image: 'CLOUD_DOWNLOAD' Text: 'DoSync' ] }
         Component menuSeparator506 { #keys: '[414702.0.137524309]' BaseType: 'Menu' Properties: [ Separator: true ] }
         Component ComponentMenuAnalysisGlobalOTDTable { #keys: '[414702.0.137524953]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'frmStandardAnalysisGlobalOTDTable' Text: '' ] }
+        Component ComponentMenu749 { #keys: '[414702.1.273394009]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'frmStandardAnalysis633' Text: '' ] }
       ]
       Properties:
       [
@@ -103,6 +104,7 @@
           c: MenuDoSync
           c: menuSeparator506
           c: ComponentMenuAnalysisGlobalOTDTable
+          c: ComponentMenu749
         }
       ]
     }
@@ -143,6 +145,8 @@
         Component ComponentMenu666 { #keys: '[414702.0.265704260]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'FormBrokerExecuteLog' Text: '' ] }
         Component menuSeparator822 { #keys: '[414702.0.340555024]' BaseType: 'Menu' Properties: [ Separator: true ] }
         Component ComponentMenu783 { #keys: '[414702.0.340555035]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'FormTestButtonCollection' Text: '' ] }
+        Component menuSeparator432 { #keys: '[414702.1.299084028]' BaseType: 'Menu' Properties: [ Separator: true ] }
+        Component ComponentMenu420 { #keys: '[414702.1.299224194]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'FormPeggingResult' Text: '' ] }
       ]
       Properties:
       [
@@ -163,6 +167,8 @@
           c: ComponentMenu666
           c: menuSeparator822
           c: ComponentMenu783
+          c: menuSeparator432
+          c: ComponentMenu420
         }
       ]
     }
diff --git a/_Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ColumnTitles552.def b/_Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ColumnTitles552.def
new file mode 100644
index 0000000..b2a7bab
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ColumnTitles552.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+Component ColumnTitles552
+{
+  #keys: '[414702.1.299084155]'
+  BaseType: 'ColumnTitles'
+  Children:
+  [
+    Component popupColumnTitles881
+    {
+      #keys: '[414702.1.299084158]'
+      BaseType: 'popupColumnTitles'
+    }
+  ]
+  Properties:
+  [
+    ContextMenu: 'popupColumnTitles881'
+  ]
+}
diff --git a/_Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def b/_Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def
new file mode 100644
index 0000000..7e94c7c
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def
@@ -0,0 +1,117 @@
+Quintiq file version 2.0
+Component ListPeggingProductInSalesDemandBase
+{
+  #keys: '[414702.1.299084152]'
+  BaseType: 'List'
+  Children:
+  [
+    #child: ColumnTitles552
+    Component popupList809
+    {
+      #keys: '[414702.1.299084184]'
+      BaseType: 'popupList'
+      Children:
+      [
+        Component PopupParent
+        {
+          #keys: '[514.0.129466]'
+          BaseType: 'PopupParent'
+          IsDerived: true
+          Children:
+          [
+            Component menuSeparator { #keys: '[414702.1.299084264]' BaseType: 'Menu' Properties: [ Separator: true ] }
+            Component MenuGeneratePeggingResult { #keys: '[414702.1.299084327]' BaseType: 'Menu' Properties: [ Image: 'BEER_GLASS' Text: 'GeneratePeggingResult' ] }
+          ]
+          Properties:
+          [
+            ModeledStringList ChildOrdering
+            {
+              c: MenuActions
+              c: MenuFilter
+              c: menuListQuintiqSetQuantor
+              c: menuSeparator
+              c: MenuGeneratePeggingResult
+            }
+          ]
+        }
+      ]
+      Properties:
+      [
+        PosX: 35
+        PosY: 60
+      ]
+    }
+    Component GUIDataExtractor968
+    {
+      #keys: '[414702.1.299084216]'
+      BaseType: 'GUIDataExtractor'
+      Properties:
+      [
+        DataSet: 'GlobalOTDSOP'
+        DataType: 'GlobalOTDSOP'
+        PosX: 5
+        PosY: 30
+        Transformation: 'PeggingProduct_MP.PeggingProductInSalesDemandBase'
+      ]
+    }
+    Component GUIDataSetLevel641
+    {
+      #keys: '[414702.1.299084219]'
+      BaseType: 'GUIDataSetLevel'
+      Properties:
+      [
+        DataExtractor: 'GUIDataExtractor968'
+        PosX: 35
+        PosY: 30
+      ]
+    }
+  ]
+  Properties:
+  [
+    AutoDrag: true
+    BackgroundColor: 'Window'
+    Border: true
+    ContextMenu: 'popupList809'
+    FullRowSelect: true
+    ModeledStringList ChildOrdering
+    {
+      c: ColumnTitles552
+      c: popupList809
+      c: GUIDataExtractor968
+      c: GUIDataSetLevel641
+    }
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingProductInSalesDemandBase_Menu_OnClick
+    {
+      #keys: '[414702.1.299084225]'
+      Initiator: 'Menu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[621.0.8331282]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingProductInSalesDemandBase_GUIButtonBase_OnClick
+    {
+      #keys: '[414702.1.299084226]'
+      Initiator: 'GUIButtonBase'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[621.0.8331327]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlanner/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuGeneratePeggingResult_OnCli.def b/_Main/UI/MacroPlanner/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuGeneratePeggingResult_OnCli.def
new file mode 100644
index 0000000..16ee6ba
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuGeneratePeggingResult_OnCli.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: ListPeggingProductInSalesDemandBase
+Response OnClick (
+  structured[PeggingProductInSalesDemandBase] selection
+) id:Response_ListPeggingProductInSalesDemandBase_MenuGeneratePeggingResult_OnClick
+{
+  #keys: '[414702.1.299224579]'
+  Body:
+  [*
+    PeggingResult::CreateData( selection, MacroPlan );
+  *]
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingProductInSalesDemandBase/Responsedef_ListPeggingProductInSalesDemandBase_Menu_OnClick
+  Initiator: 'MenuGeneratePeggingResult'
+}
diff --git a/_Main/UI/MacroPlanner/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def b/_Main/UI/MacroPlanner/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def
new file mode 100644
index 0000000..bebc147
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlanner
+OrphanComponent FormPeggingResult
+{
+  #keys: '[414702.1.299084054]'
+  BaseType: 'Form'
+  GBLayout
+  {
+    Type: 'internal[GBLayoutDefinition]'
+    Columns:
+    [
+      GBFlow.Column { grow: 128 id: 199 parent: 0 }
+    ]
+    Elements:
+    [
+      GBElement
+      {
+        Component => ListPeggingProductInSalesDemandBase
+        Position { startcolumn: 199 startrow: 785 endcolumn: 199 endrow: 785 }
+      }
+    ]
+    Gaps: [ left: 0 right: 0 top: 0 bottom: 0 inner: 5 ]
+    Rows:
+    [
+      GBFlow.Row { grow: 128 id: 785 parent: 0 }
+    ]
+  }
+  Children:
+  [
+    #child: ListPeggingProductInSalesDemandBase
+  ]
+  Properties:
+  [
+    Height: 270
+    Image: 'FISH_BOWL'
+    IncludeInView: true
+    Title: 'PeggingResult'
+    Width: 494
+  ]
+}
diff --git a/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def b/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def
index 4209271..1bd2418 100644
--- a/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def
+++ b/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def
@@ -9,7 +9,7 @@
     
     //CapacityAllocationResultsRuleConfiguration::AutomaticallyGenerateCapacityRules( GlobalOTDTable, MacroPlan );
     
-    CapacityAllocationResults::Test( MacroPlan, GlobalOTDTable );
+    //CapacityAllocationResults::Test( MacroPlan, GlobalOTDTable );
   *]
   CanBindMultiple: false
   DefinitionID: 'Responsedef_GUIButtonBase_OnClick'
diff --git a/_Main/UI/MacroPlanner/Component_frmStandardAnalysis633/Component_swTop.def b/_Main/UI/MacroPlanner/Component_frmStandardAnalysis633/Component_swTop.def
new file mode 100644
index 0000000..297a438
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_frmStandardAnalysis633/Component_swTop.def
@@ -0,0 +1,29 @@
+Quintiq file version 2.0
+Component swTop
+{
+  #keys: '[530.0.3531806]'
+  BaseType: 'swTop'
+  IsDerived: true
+  Children:
+  [
+    Component spTopLeft
+    {
+      #keys: '[530.0.3531807]'
+      BaseType: 'spTopLeft'
+      IsDerived: true
+      Children:
+      [
+        Component Analysis
+        {
+          #keys: '[530.0.3532065]'
+          BaseType: 'Analysis'
+          IsDerived: true
+          Properties:
+          [
+            GlobalInstance: 'GlobalOTDSOP'
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlanner/Component_frmStandardAnalysis633/Component_swTopMost.def b/_Main/UI/MacroPlanner/Component_frmStandardAnalysis633/Component_swTopMost.def
new file mode 100644
index 0000000..8a8fcd7
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_frmStandardAnalysis633/Component_swTopMost.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+Component swTopMost
+{
+  #keys: '[530.0.3531801]'
+  BaseType: 'swTopMost'
+  IsDerived: true
+  Children:
+  [
+    Component SplitterPane1
+    {
+      #keys: '[530.0.3531802]'
+      BaseType: 'SplitterPane1'
+      IsDerived: true
+      Children:
+      [
+        #child: swTop
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlanner/Component_frmStandardAnalysis633/_ROOT_Component_frmStandardAnalysis633.def b/_Main/UI/MacroPlanner/Component_frmStandardAnalysis633/_ROOT_Component_frmStandardAnalysis633.def
new file mode 100644
index 0000000..a7fd526
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_frmStandardAnalysis633/_ROOT_Component_frmStandardAnalysis633.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlanner
+OrphanComponent frmStandardAnalysis633
+{
+  #keys: '[414702.1.273394023]'
+  BaseType: 'frmStandardAnalysis'
+  Children:
+  [
+    #child: swTopMost
+  ]
+  Properties:
+  [
+    Height: 740
+    Image: 'BEER_GLASS'
+    Title: 'Analysis GlobalOTDSOP'
+    Width: 1300
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupScenarioComparisonViews\043859.def" "b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupScenarioComparisonViews\043859.def"
new file mode 100644
index 0000000..2f902b8
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupScenarioComparisonViews\043859.def"
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+Component ActionBarGroupScenarioComparisonViews #extension
+{
+  Children:
+  [
+    Component ButtonAnnualProductionAndSalesReview
+    {
+      #keys: '[414702.1.286513416]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'COCKTAIL'
+        Label: '骞村害浜ч攢澶嶇洏'
+        Taborder: 8
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioComparison.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioComparison.def
new file mode 100644
index 0000000..fb3b421
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioComparison.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component ActionBarPageScenarioComparison #extension
+{
+  Children:
+  [
+    #child: ActionBarGroupScenarioComparisonViews
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def
index 05a14f4..a5d6f33 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def
@@ -22,7 +22,7 @@
       BaseType: 'WebMenu'
       Properties:
       [
-        Image: 'PIG'
+        Image: 'LEMONADE_GLASS'
         Taborder: 6
         Title: '骞村害浜ч攢澶嶇洏'
       ]
@@ -49,7 +49,7 @@
         Title: '闈㈡澘鎷夋枡_闆嗗洟鎿嶄綔'
       ]
     }
-    Component mn224
+    Component mn222
     {
       #keys: '[414702.1.5593849]'
       BaseType: 'WebMenu'
@@ -81,6 +81,39 @@
         Title: '鏁版嵁鍒嗗彂'
       ]
     }
+    Component mn666
+    {
+      #keys: '[414702.1.293023106]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Separator: true
+        Taborder: 7
+      ]
+    }
+    Component mnPeggingAnalyse
+    {
+      #keys: '[414702.1.293023171]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Description: 'Pegging鍒嗘瀽'
+        Image: 'COCKTAIL'
+        Taborder: 8
+        Title: 'Pegging鍒嗘瀽'
+      ]
+    }
+    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
new file mode 100644
index 0000000..36968d6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupScenarioComparisonViews_ButtonAnnualPro.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupScenarioComparisonViews/ButtonAnnualProductionAndSalesReview
+Response OnClick () id:Response_TIANMA_JITUAN_ActionBarGroupScenarioComparisonViews_ButtonAnnualProductionAndSalesReview_OnClick
+{
+  #keys: '[414702.1.288075432]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "骞村害浜ч攢澶嶇洏", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_DataHolderAllScenario_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_DataHolderAllScenario_OnDataChanged.def
new file mode 100644
index 0000000..0470654
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_DataHolderAllScenario_OnDataChanged.def
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+#parent: DataHolderAllScenario
+Response OnDataChanged () id:Response_TIANMA_JITUAN_ApplicationMacroPlanner_DataHolderAllScenario_OnDataChanged
+{
+  #keys: '[414702.1.169517835]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      user := QuintiqUser::CurrentUser();
+      scenarionodes := construct( ScenarioNodes );
+      
+      if( user.IsAdministrator()
+          or not exists( ScenarioManager, ScenarioNode.ScenarioAuthorization, sa, true ) )
+      {
+        scenarionodes := selectset( ScenarioManager, ScenarioNode, scenarionode, true );
+      }
+      else
+      {
+        scenarionodes := selectset( ScenarioManager, ScenarioNode, scenarionode,
+                                    guard( scenarionode.astype( ScenarioFolder ).IsRecycleBin(), false )
+                                    or scenarionode.CreatedBy().ToUpper() = user.ShortName().ToUpper()
+                                    or exists( scenarionode, ScenarioAuthorization, sa,
+                                               user.IsMemberOfGroup( sa.Name() ) ) );
+      }
+      
+      DataHolderAvailableScenarios.Data( &scenarionodes );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_LibSOPImpExp_ContextMenuImport_MenuImportFromCommonIn.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_LibSOPImpExp_ContextMenuImport_MenuImportFromCommonIn.def
deleted file mode 100644
index d927b55..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_LibSOPImpExp_ContextMenuImport_MenuImportFromCommonIn.def
+++ /dev/null
@@ -1,21 +0,0 @@
-Quintiq file version 2.0
-#parent: LibSOPImpExp_ContextMenuImport/MenuImportFromCommonInformationModel
-Response OnClick () id:Response_TIANMA_JITUAN_LibSOPImpExp_ContextMenuImport_MenuImportFromCommonInformationModel_OnClick
-{
-  #keys: '[146140.2.683371355]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebMenu_OnClick'
-  Precondition:
-  [*
-    return MacroPlan::HasMacroPlan( MacroPlan, feedback );
-  *]
-  QuillAction
-  {
-    Body:
-    [*
-      dlg := construct( DialogImportCIM );
-      dlg.New();
-    *]
-    GroupServerCalls: false
-  }
-}
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_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPeggingAnalyse_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPeggingAnalyse_OnClick.def
new file mode 100644
index 0000000..eecfc42
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPeggingAnalyse_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: cmTestAttempt/mnPeggingAnalyse
+Response OnClick () id:Response_TIANMA_JITUAN_cmTestAttempt_mnPeggingAnalyse_OnClick
+{
+  #keys: '[414702.1.294401302]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Pegging鍒嗘瀽", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
index 49e8c72..c307f2a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
@@ -15,6 +15,7 @@
         #child: ActionBarPagePlan
         #child: ActionBarPageInventory
         #child: ActionBarPageScenarioSelection
+        #child: ActionBarPageScenarioComparison
       ]
     }
     Component DataHolderCapacityAndSaleBudgeFilterItem
@@ -80,5 +81,31 @@
     Component DataHolderCurrentUser #extension
     {
     }
+    Component DataHolderAllScenario
+    {
+      #keys: '[414702.1.169450613]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[ScenarioNode]*'
+      Children:
+      [
+        Component DataExtractorAllScenario
+        {
+          #keys: '[414702.1.166961408]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'ScenarioManager'
+            FixedFilter: 'not object.IsDeleted()'
+            Source: 'ScenarioManager'
+            Taborder: 0
+            Transformation: 'ScenarioNode'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 46
+      ]
+    }
   ]
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def"
index 687eea6..cfe3fcb 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def"
@@ -79,5 +79,15 @@
         Taborder: 4
       ]
     }
+    Component dsPlanningStart
+    {
+      #keys: '[414702.1.259278858]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Label: '璁″垝寮�濮嬫椂闂�'
+        Taborder: 8
+      ]
+    }
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
index d2aa450..fe1ca3b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
@@ -123,6 +123,8 @@
     macroPlanNew.IsKeyProduct( data.IsKeyProduct() );
     macroPlanNew.CreatePurchaseSupplyMaterial( data.CreatePurchaseSupplyMaterial() );
     
+    MacroPlan.UpdateStartOfPlanning( dsPlanningStart.Date().DateTime() );
+    
     this.Close();
   *]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_TIANMA_JITUAN_PanelGeneral_549_dsPlanningStart_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_TIANMA_JITUAN_PanelGeneral_549_dsPlanningStart_OnCreated.def
new file mode 100644
index 0000000..bb9a6b3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_TIANMA_JITUAN_PanelGeneral_549_dsPlanningStart_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelGeneral_549/dsPlanningStart
+Response OnCreated () id:Response_TIANMA_JITUAN_PanelGeneral_549_dsPlanningStart_OnCreated
+{
+  #keys: '[414702.1.259420402]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      this.Date( Date::ActualDate() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Component_pnlContent.def
index 5c05df7..a5e8867 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Component_pnlContent.def
@@ -5,18 +5,6 @@
   BaseType: 'WebPanel'
   Children:
   [
-    Component dropDownStringListGeneral id:dropDownStringListGeneral_549
-    {
-      #keys: '[414702.1.87540205]'
-      BaseType: 'WebDropDownStringList'
-      Properties:
-      [
-        AllowEmpty: true
-        DataBinding: 'DataHolderScenario.Data.ScenarioName'
-        Label: 'Scenario Name'
-        Taborder: 0
-      ]
-    }
     Component checkboxIsKeyProduct id:checkboxIsKeyProduct_593
     {
       #keys: '[414702.1.87540263]'
@@ -49,6 +37,33 @@
         Taborder: 3
       ]
     }
+    Component ddlBusinessType
+    {
+      #keys: '[414702.1.169614090]'
+      BaseType: 'WebDropDownList'
+      Databinding: 'BusinessType'
+      Children:
+      [
+        Component deContent
+        {
+          #keys: '[414702.1.169614092]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'GlobalOTDTable'
+            Source: 'GlobalOTDTable'
+            Taborder: 0
+            Transformation: 'BusinessType'
+          ]
+        }
+      ]
+      Properties:
+      [
+        DisplayField: 'ScenarioName'
+        Label: 'Scenario Name'
+        Taborder: 0
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Method_DataDistribution.def b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Method_DataDistribution.def
index c72dc11..08f0bf0 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Method_DataDistribution.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Method_DataDistribution.def
@@ -9,8 +9,6 @@
   [*
     DataHolderScenario.Data( scenario );
     
-    dropDownStringListGeneral.Strings( GlobalOTDTable::GetBusnessStrings( GlobalOTDTable ) );
-    
     ApplicationMacroPlanner.ShowFormModal( this );
   *]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Response_pnlActions_btnOk_OnClick.def
index fcba155..d4696a6 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Response_pnlActions_btnOk_OnClick.def
@@ -10,8 +10,9 @@
     
     activeScenario := DataHolderActiveScenario.Data();
     currentScenario := DataHolderScenario.Data();
+    businessType := ddlBusinessType.Data();
     
-    if ( activeScenario = currentScenario ) {
+    if ( activeScenario = currentScenario or isnull( businessType ) ) {
       flag := false;
       feedback := "鏃犳硶瀵瑰綋鍓嶉�変腑鍦烘櫙杩涜鍒嗗彂";
     }
@@ -30,15 +31,9 @@
     [*
       Form.ApplyChanges();
       
-      businessType := select( GlobalOTDTable, 
-                              BusinessType, 
-                              b, 
-                              b.ScenarioName() = dropDownStringListGeneral.Text()
-                             );
-      
       DataDistributionLog::Create( GlobalOTDLog, ApplicationMacroPlanner.GetUserName(), DataHolderScenario.Data().DatasetMDSID(), DataHolderScenario.Data().Name() );
       MacroPlan::DoASync( DataHolderScenario.Data(), 
-                          businessType.BusinessTypeName(),
+                          ddlBusinessType.Data(),
                           checkboxIsKeyProduct.Checked(), 
                           checkboxCreatePurchaseSupplyProduct.Checked(),
                           GlobalOTDTable );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_ClickBtnOK.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_ClickBtnOK.def
index cb1792b..71e7e33 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_ClickBtnOK.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_ClickBtnOK.def
@@ -5,7 +5,6 @@
   #keys: '[414382.0.464433014]'
   Body:
   [*
-    
     btnOk.Enabled(false,'');
     
     // OnOk
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlActions_btnOk_OnClick.def
index 8d24e23..1ee6b28 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlActions_btnOk_OnClick.def
@@ -7,7 +7,7 @@
   Precondition:
   [*
     feedback := Translations::FilllingCapacity_ValidateInput();
-    checkValue := not Coefficient.Text() = ''
+    checkValue := not Coefficient.Text() = '' and not PriorityFactorName.Text() = '';
     
     if(not checkValue )
     {
@@ -23,7 +23,12 @@
   {
     Body:
     [*
-      Form.ClickBtnOK();
+      priortyFactor := select( MacroPlan,PriorityFactor,pf,pf.Name() = PriorityFactorName.Text());
+      if( not isnull( priortyFactor )){
+        WebMessageBox::Error( "绯荤粺鍐呭凡瀛樺湪璇ヤ紭鍏堢骇鍥犲瓙");
+      }else {
+        Form.ClickBtnOK(); 
+      }
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Component_pnlContent.def
index 8f09095..1f2cbd2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Component_pnlContent.def
@@ -11,7 +11,7 @@
       BaseType: 'WebEditField'
       Properties:
       [
-        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.GradeTarget'
+        DataBinding: 'DataHolderEditPriorityFactorDetail.Data.GradeTarget'
         Label: '鍒嗙骇鐩爣鍊�'
         Taborder: 2
       ]
@@ -22,7 +22,7 @@
       BaseType: 'WebCheckbox'
       Properties:
       [
-        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.IsRange'
+        DataBinding: 'DataHolderEditPriorityFactorDetail.Data.IsRange'
         Label: '鍒嗙骇鑼冨洿:'
         Taborder: 3
       ]
@@ -33,7 +33,7 @@
       BaseType: 'WebEditField'
       Properties:
       [
-        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.RangeMax'
+        DataBinding: 'DataHolderEditPriorityFactorDetail.Data.RangeMax'
         Label: '鏈�澶у��'
         Taborder: 4
         Visible: false
@@ -45,7 +45,7 @@
       BaseType: 'WebEditField'
       Properties:
       [
-        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.RangeMin'
+        DataBinding: 'DataHolderEditPriorityFactorDetail.Data.RangeMin'
         Label: '鏈�灏忓��'
         ReadOnly: true
         Taborder: 6
@@ -57,7 +57,7 @@
       BaseType: 'WebEditField'
       Properties:
       [
-        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.GradeDesc'
+        DataBinding: 'DataHolderEditPriorityFactorDetail.Data.GradeDesc'
         FixedSize: false
         Label: '鎻忚堪'
         SizeRatio: 3
@@ -70,20 +70,9 @@
       BaseType: 'WebLabel'
       Properties:
       [
-        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.PriorityFactorName'
+        DataBinding: 'DataHolderEditPriorityFactorDetail.Data.PriorityFactor.Name'
         Label: '浼樺厛绾у洜瀛�'
         Taborder: 0
-      ]
-    }
-    Component PriorityFactorDetailsName
-    {
-      #keys: '[414382.0.486013052]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.GradingName'
-        Label: '缁嗗垎鍚嶇О'
-        Taborder: 1
       ]
     }
     Component RangeMaxTest
@@ -107,6 +96,17 @@
         Taborder: 7
       ]
     }
+    Component PriorityFactorDetailsName
+    {
+      #keys: '[414996.0.36000637]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderEditPriorityFactorDetail.Data.GradingName'
+        Label: '缁嗗垎鍚嶇О'
+        Taborder: 1
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_ClickBtnOK.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_ClickBtnOK.def
index 2fa33f1..be3b328 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_ClickBtnOK.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_ClickBtnOK.def
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
 #parent: #root
-Method ClickBtnOK () id:Method_DialogEditPriorityFactorDetails_ClickBtnOK
+Method ClickBtnOK () id:Method_DialogEditPriorityFactorDetail_ClickBtnOK
 {
   #keys: '[414382.0.482495783]'
   Body:
@@ -9,7 +9,9 @@
     
     // OnOk
     this.ApplyChanges();
-    DataHolderEditPriorityFactorDetails.Data().Commit();
+    
+    //DataHolderEditPriorityFactorDetails.Data( ).Commit();
+    
     this.Close();
   *]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_Edit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_Edit.def
index 512f652..60e9b25 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_Edit.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_Edit.def
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
 Method Edit (
-  PriorityFactorDetails selection
-) id:Method_DialogEditPriorityFactorDetails_Edit
+  PriorityFactorDetail selection
+) id:Method_DialogEditPriorityFactorDetail_Edit
 {
   #keys: '[414382.0.482495781]'
   Body:
@@ -13,8 +13,8 @@
     {
         isRange.Checked(true);
     }
-    
-    DataHolderEditPriorityFactorDetails.Data( &data);
+    PriorityFactorDetailsName.Enabled( false,"" );
+    DataHolderEditPriorityFactorDetail.Data( selection );
     ApplicationMacroPlanner.ShowFormModal( this );
   *]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_New.def
new file mode 100644
index 0000000..3a62a74
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_New.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+Method New (
+  PriorityFactor owner
+) id:Method_DialogEditPriorityFactorDetail_New
+{
+  #keys: '[414996.0.35320212]'
+  Body:
+  [*
+    data := owner.PriorityFactorDetail(relnew);
+    
+    info( isnull( owner ));
+    info( isnull( data ));
+    
+    DataHolderEditPriorityFactorDetail.Data( data );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlActions_btnOk_OnClick.def
index 09b6252..bad89eb 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlActions_btnOk_OnClick.def
@@ -21,7 +21,7 @@
   {
     Body:
     [*
-      Form.ClickBtnOK();
+      DialogEditPriorityFactorDetail.ClickBtnOK();
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnChanged.def
index 06616ab..93d57eb 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnChanged.def
@@ -20,9 +20,9 @@
           RangeMax.Visible(false);
           RangeMin.Visible(false);
           RangeMaxTest.Visible(true) 
-          RangeMaxTest.Text([String]DataHolderEditPriorityFactorDetails.Data().RangeMax());
+          RangeMaxTest.Text([String]DataHolderEditPriorityFactorDetail.Data().RangeMax());
           RangeMinText.Visible(true) 
-          RangeMinText.Text([String]DataHolderEditPriorityFactorDetails.Data().RangeMin());
+          RangeMinText.Text([String]DataHolderEditPriorityFactorDetail.Data().RangeMin());
       }
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnCreated.def
index ad0f874..76e527b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnCreated.def
@@ -20,9 +20,9 @@
           RangeMax.Visible(false);
           RangeMin.Visible(false);
           RangeMaxTest.Visible(true) 
-          RangeMaxTest.Text([String]DataHolderEditPriorityFactorDetails.Data().RangeMax());
+          RangeMaxTest.Text([String]DataHolderEditPriorityFactorDetail.Data().RangeMax());
           RangeMinText.Visible(true) 
-          RangeMinText.Text([String]DataHolderEditPriorityFactorDetails.Data().RangeMin());
+          RangeMinText.Text([String]DataHolderEditPriorityFactorDetail.Data().RangeMin());
       }
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/_ROOT_Component_DialogEditPriorityFactorDetail.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/_ROOT_Component_DialogEditPriorityFactorDetail.def
new file mode 100644
index 0000000..aca42a1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/_ROOT_Component_DialogEditPriorityFactorDetail.def
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogEditPriorityFactorDetail
+{
+  #keys: '[414382.0.482374517]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+    Component DataHolderEditPriorityFactorDetail
+    {
+      #keys: '[414996.0.38864386]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'PriorityFactorDetail'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+    Title: '缂栬緫浼樺厛绾у洜瀛愮粏鍒�'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/_ROOT_Component_DialogEditPriorityFactorDetails.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/_ROOT_Component_DialogEditPriorityFactorDetails.def
deleted file mode 100644
index 3668b68..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/_ROOT_Component_DialogEditPriorityFactorDetails.def
+++ /dev/null
@@ -1,32 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: MacroPlannerWebApp
-OrphanComponent DialogEditPriorityFactorDetails
-{
-  #keys: '[414382.0.482374517]'
-  BaseType: 'WebForm'
-  Children:
-  [
-    #child: pnlContent
-    #child: pnlActions
-    Component DataHolderEditPriorityFactorDetails
-    {
-      #keys: '[414382.0.482495927]'
-      BaseType: 'WebDataHolder'
-      Databinding: 'shadow[PriorityFactorDetails]*'
-      Properties:
-      [
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    Alignment: 'trailing'
-    EnterButton: 'btnOk'
-    EscapeButton: 'btnCancel'
-    ExcludeFromActiveComponent: true
-    Padding: 'false'
-    Title: '缂栬緫浼樺厛绾у洜瀛愮粏鍒�'
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlActions.def
new file mode 100644
index 0000000..aa8f552
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[412960.0.370310585]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[412960.0.370310589]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[412960.0.370310591]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Cancel'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Border: true
+    ExcludeFromActiveComponent: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Padding: 'true'
+    Style: 'footer'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlContent.def
new file mode 100644
index 0000000..8474857
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlContent.def
@@ -0,0 +1,83 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[412960.0.370310583]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component editAttributeName
+    {
+      #keys: '[412960.0.370311392]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderGlobalParameters.Data.AttributeName'
+        Label: '鍙傛暟鍚嶇О'
+        Taborder: 1
+      ]
+    }
+    Component editAttributeValue
+    {
+      #keys: '[412960.0.370311429]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderGlobalParameters.Data.AttributeValue'
+        Label: '鍙傛暟鍊�'
+        Taborder: 2
+      ]
+    }
+    Component editAddress
+    {
+      #keys: '[412960.0.370311489]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderGlobalParameters.Data.Address'
+        Label: 'Api鍦板潃'
+        Taborder: 3
+        Visible: false
+      ]
+    }
+    Component editPort
+    {
+      #keys: '[412960.0.370311527]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderGlobalParameters.Data.Port'
+        Label: 'Api绔彛鍙�'
+        Taborder: 4
+        Visible: false
+      ]
+    }
+    Component editPostRequestBody
+    {
+      #keys: '[412960.0.370311577]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderGlobalParameters.Data.PostRequestBody'
+        Label: 'Api璇锋眰涓讳綋'
+        Taborder: 5
+        Visible: false
+      ]
+    }
+    Component IsApi
+    {
+      #keys: '[412960.0.370311617]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Description: '鏄惁涓篈PI鐩稿叧鍙傛暟'
+        Label: 'API閰嶇疆'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_ClickBtnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_ClickBtnOk.def
new file mode 100644
index 0000000..afdf6c4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_ClickBtnOk.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+Method ClickBtnOk () id:Method_DialogGlobalParameters_ClickBtnOk
+{
+  #keys: '[412960.0.370310978]'
+  Body:
+  [*
+    // Disabled button to prevent the possibility of multiple firing
+    
+    btnOk.Enabled(false,'');
+    
+    // OnOk
+    this.ApplyChanges();
+    
+    DataHolderGlobalParameters.Data().Commit();
+    
+    this.Close();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_Edit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_Edit.def
new file mode 100644
index 0000000..338ca9c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_Edit.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method Edit (
+  GlobalParameters selection
+) id:Method_DialogGlobalParameters_Edit
+{
+  #keys: '[412960.0.370310979]'
+  Body:
+  [*
+    // Edits assumption
+    data := shadow( selection );
+    
+    DataHolderGlobalParameters.Data( &data );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_New.def
new file mode 100644
index 0000000..047b889
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_New.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method New (
+  GlobalOTDTable owner
+) id:Method_DialogGlobalParameters_New
+{
+  #keys: '[412960.0.370310981]'
+  Body:
+  [*
+    data := owner.GlobalParameters(relshadow);
+    DataHolderGlobalParameters.Data( &data);
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..ee5b753
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnCancel_OnClick.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnCancel
+Response OnClick () id:Response_pnlActions_btnCancel_OnClick
+{
+  #keys: '[412960.0.370310595]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..235dbb5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[412960.0.370310594]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ClickBtnOk()
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlContent_IsApi_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlContent_IsApi_OnChanged.def
new file mode 100644
index 0000000..20929e5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlContent_IsApi_OnChanged.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: pnlContent/IsApi
+Response OnChanged () id:Response_pnlContent_IsApi_OnChanged
+{
+  #keys: '[412960.0.370311653]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      editAddress.Visible( this.Checked() );
+      editPort.Visible( this.Checked() );
+      editPostRequestBody.Visible( this.Checked() );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/_ROOT_Component_DialogGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/_ROOT_Component_DialogGlobalParameters.def
new file mode 100644
index 0000000..a898ae5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/_ROOT_Component_DialogGlobalParameters.def
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogGlobalParameters
+{
+  #keys: '[412960.0.370310581]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+    Component DataHolderGlobalParameters
+    {
+      #keys: '[412960.0.370311111]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[GlobalParameters]*'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNew_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNew_OnClick.def
index f81f38b..7c48b5a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNew_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNew_OnClick.def
@@ -2,7 +2,7 @@
 #parent: ListBusinessType
 Response OnClick () id:Response_ListBusinessType_MenuNew_OnClick
 {
-  #keys: '[414382.0.377975353]'
+  #keys: '[412960.0.373110863]'
   CanBindMultiple: false
   DefinitionID => /ListBusinessType/Responsedef_ListBusinessType_WebMenu_OnClick
   GroupServerCalls: true
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def b/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def
index e0f9eb6..e5b380b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def
@@ -41,6 +41,8 @@
   ]
   Properties:
   [
+    FixedSize: true
+    Orientation: 'horizontal'
     Taborder: 0
   ]
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_DataHolderChecked_OnDataChanged\043774.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_DataHolderChecked_OnDataChanged\043774.def"
deleted file mode 100644
index 2e992ec..0000000
--- "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_DataHolderChecked_OnDataChanged\043774.def"
+++ /dev/null
@@ -1,18 +0,0 @@
-Quintiq file version 2.0
-#parent: DataHolderChecked_187
-Response OnDataChanged () id:Response_ListPRData_844_DataHolderChecked_OnDataChanged_774
-{
-  #keys: '[414384.0.799231412]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
-  QuillAction
-  {
-    Body:
-    [*
-      //traverse ( this.Data(), Elements, e ) {
-      //  info( "閫変腑鐨勭墿鏂欏彿锛�", e.MatCode() );
-      //}
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged\043613.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged\043613.def"
index 20e3571..b844e5a 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged\043613.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged\043613.def"
@@ -5,13 +5,12 @@
   #keys: '[414384.0.798051611]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebList_OnUserCheckedChanged'
-  GroupServerCalls: true
   QuillAction
   {
     Body:
     [*
-      info( "checked 0 PRs" );
       DataHolderChecked.Data().Flush();
     *]
+    GroupServerCalls: false
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged.def b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged.def
index 5783a47..4988e05 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged.def
@@ -7,13 +7,12 @@
   #keys: '[414384.0.798051163]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebList_OnUserCheckedChanged'
-  GroupServerCalls: true
   QuillAction
   {
     Body:
     [*
-      info( "checked " + [String]checkeditems.Size() + " PRs" );
       DataHolderChecked.Data( checkeditems.Copy() );
     *]
+    GroupServerCalls: false
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def
index b9d8b6e..d189e36 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def
@@ -13,7 +13,7 @@
   {
     Body:
     [*
-      Application.Download( "PRData.xlsx", PRData::Export( MacroPlan ) );
+      Application.Download( "PRData.xlsx", PRData::ExportTheFileStream( DataHolderChecked.Data() ).AsBinaryData() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def
index 4428575..fd5f58b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def
@@ -5,11 +5,15 @@
   #keys: '[414702.0.391791234]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( GlobalOTDSOP );
+  *]
   QuillAction
   {
     Body:
     [*
-      Application.Download( "浜ц兘鍒嗛厤缁撴灉.xlsx", CapacityAllocationResults::Export( GlobalOTDTable ).AsBinaryData() );
+      Application.Download( "浜ц兘鍒嗛厤缁撴灉.xlsx", CapacityAllocationResults::Export( GlobalOTDSOP ).AsBinaryData() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
index 4af954a..1cb79bb 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
@@ -12,7 +12,6 @@
       Properties:
       [
         DataType: 'GlobalOTDTable'
-        FixedFilter: '[Number]object.YearNo() = Date::ActualDate().Year()'
         Source: 'GlobalOTDTable'
         Taborder: 0
         Transformation: 'Global_MappingAnnualBudgetData'
@@ -29,7 +28,7 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"YearNo","title":"YearNo","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"YearNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayTechSort","title":"DisplayTechSort","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DisplayTechSort"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessSort","title":"BusinessSort","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessSort"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductLineAndSpecification","title":"ProductLineAndSpecification","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductLineAndSpecification"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrgCodeFromBom","title":"OrgCodeFromBom","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrgCodeFromBom"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ResolutionRatio","title":"ResolutionRatio","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ResolutionRatio"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ShippingForm","title":"ShippingForm","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ShippingForm"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CutsNumber","title":"CutsNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CutsNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityEquivalent","title":"CapacityEquivalent","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityEquivalent"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaskNumber","title":"MaskNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaskNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity1","title":"MonthlyModCapacity1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity2","title":"MonthlyModCapacity2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity3","title":"MonthlyModCapacity3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity4","title":"MonthlyModCapacity4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity5","title":"MonthlyModCapacity5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity6","title":"MonthlyModCapacity6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity7","title":"MonthlyModCapacity7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity8","title":"MonthlyModCapacity8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity9","title":"MonthlyModCapacity9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity10","title":"MonthlyModCapacity10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity11","title":"MonthlyModCapacity11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity12","title":"MonthlyModCapacity12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity1","title":"MonthlySheetCapacity1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity2","title":"MonthlySheetCapacity2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity3","title":"MonthlySheetCapacity3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity4","title":"MonthlySheetCapacity4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity5","title":"MonthlySheetCapacity5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity6","title":"MonthlySheetCapacity6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity7","title":"MonthlySheetCapacity7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity8","title":"MonthlySheetCapacity8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity9","title":"MonthlySheetCapacity9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity10","title":"MonthlySheetCapacity10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity11","title":"MonthlySheetCapacity11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity12","title":"MonthlySheetCapacity12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales1","title":"MonthlySales1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales2","title":"MonthlySales2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales3","title":"MonthlySales3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales4","title":"MonthlySales4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales5","title":"MonthlySales5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales6","title":"MonthlySales6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales7","title":"MonthlySales7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales8","title":"MonthlySales8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales9","title":"MonthlySales9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales10","title":"MonthlySales10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales11","title":"MonthlySales11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales12","title":"MonthlySales12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales12"}}]'
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"YearNo","title":"YearNo","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"YearNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayTechSort","title":"DisplayTechSort","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DisplayTechSort"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessSort","title":"BusinessSort","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessSort"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductLineAndSpecification","title":"ProductLineAndSpecification","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductLineAndSpecification"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrgCodeFromBom","title":"OrgCodeFromBom","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrgCodeFromBom"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ResolutionRatio","title":"ResolutionRatio","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ResolutionRatio"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ShippingForm","title":"ShippingForm","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ShippingForm"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CutsNumber","title":"CutsNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CutsNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityEquivalent","title":"CapacityEquivalent","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityEquivalent"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaskNumber","title":"MaskNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaskNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity1","title":"MonthlyModCapacity1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity2","title":"MonthlyModCapacity2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity3","title":"MonthlyModCapacity3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity4","title":"MonthlyModCapacity4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity5","title":"MonthlyModCapacity5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity6","title":"MonthlyModCapacity6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity7","title":"MonthlyModCapacity7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity8","title":"MonthlyModCapacity8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity9","title":"MonthlyModCapacity9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity10","title":"MonthlyModCapacity10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity11","title":"MonthlyModCapacity11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity12","title":"MonthlyModCapacity12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity1","title":"MonthlySheetCapacity1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity2","title":"MonthlySheetCapacity2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity3","title":"MonthlySheetCapacity3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity4","title":"MonthlySheetCapacity4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity5","title":"MonthlySheetCapacity5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity6","title":"MonthlySheetCapacity6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity7","title":"MonthlySheetCapacity7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity8","title":"MonthlySheetCapacity8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity9","title":"MonthlySheetCapacity9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity10","title":"MonthlySheetCapacity10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity11","title":"MonthlySheetCapacity11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity12","title":"MonthlySheetCapacity12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales1","title":"MonthlySales1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales2","title":"MonthlySales2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales3","title":"MonthlySales3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales4","title":"MonthlySales4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales5","title":"MonthlySales5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales6","title":"MonthlySales6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales7","title":"MonthlySales7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales8","title":"MonthlySales8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales9","title":"MonthlySales9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales10","title":"MonthlySales10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales11","title":"MonthlySales11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales12","title":"MonthlySales12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrganCode","title":"OrganCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrganCode"}}]'
         ContextMenu: 'listContextMenuCapacityAndSaleBudge'
         SortCriteria: 'BusinessSort;OrganCode;ProductID'
         Taborder: 2
@@ -38,6 +37,6 @@
   ]
   Properties:
   [
-    Taborder: 2
+    Taborder: 1
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_pButton.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_pButton.def
new file mode 100644
index 0000000..427fcd9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_pButton.def
@@ -0,0 +1,48 @@
+Quintiq file version 2.0
+Component pButton
+{
+  #keys: '[414702.1.268476564]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonGenerateTestData id:ButtonGenerateTestData_136
+    {
+      #keys: '[414702.1.266041306]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'ARROW_CIRCLE2'
+        Label: '鍒锋柊绛涢�夋暟鎹�'
+        Taborder: 0
+      ]
+    }
+    Component ButtonExportDetail id:ButtonExportDetail_97
+    {
+      #keys: '[414702.1.266041310]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Label: '瀵煎嚭'
+        Taborder: 2
+      ]
+    }
+    Component ButtonCreateData
+    {
+      #keys: '[414702.1.266042204]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'ICE_CREAM'
+        Label: '鐢熸垚鏁版嵁'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def
deleted file mode 100644
index e09f8c8..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: ButtonExportDetail
-Response OnClick () id:Response_FormCapacityAndSaleBudge_ButtonExportDetail_OnClick
-{
-  #keys: '[414384.0.887310502]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  Precondition:
-  [*
-    return not isnull( GlobalOTDTable );
-  *]
-  QuillAction
-  {
-    Body:
-    [*
-      //Application.Download( "骞村害浜ч攢棰勭畻璇︽儏.xlsx", MPSync.CapacityAndSaleBudgeExport().AsBinaryData() );
-      
-      base64 := Global_MappingAnnualBudgetData::Export( GlobalOTDTable );
-      Application.Download( "骞村害浜ч攢棰勭畻璇︽儏.xlsx", base64 );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonGenerateTestData_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonGenerateTestData_OnClick.def
deleted file mode 100644
index 7b8522f..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonGenerateTestData_OnClick.def
+++ /dev/null
@@ -1,25 +0,0 @@
-Quintiq file version 2.0
-#parent: ButtonGenerateTestData
-Response OnClick () id:Response_FormCapacityAndSaleBudge_ButtonGenerateTestData_OnClick
-{
-  #keys: '[414384.0.971540692]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  Precondition:
-  [*
-    return not isnull( MacroPlan );
-  *]
-  QuillAction
-  {
-    Body:
-    [*
-      GlobalOTDTable.InitTestDataByYear( MacroPlan, DataHolderCapacityAndSaleBudgeFilterYear.Data() );
-      Global_MappingAnnualBudgetData::SetOrgCodeFromForecast( GlobalOTDTable );
-      GlobalOTDSOP::RefreshCapacityAndSaleBudgeFilter( true, GlobalOTDTable, GlobalOTDSOP );
-      CapacityAndSaleBudgeFilterItem::Initial( GlobalOTDSOP );
-      CapacityAndSaleBudgeFilterYear::Initial( GlobalOTDSOP );
-      CapacityAndSaleBudgeFilterMonth::Initial( GlobalOTDSOP );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonCreateData_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonCreateData_OnClick.def
new file mode 100644
index 0000000..7b3ca1a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonCreateData_OnClick.def
@@ -0,0 +1,34 @@
+Quintiq file version 2.0
+#parent: pButton/ButtonCreateData
+Response OnClick () id:Response_pButton_ButtonCreateData_OnClick
+{
+  #keys: '[414702.1.266042218]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( GlobalOTDSOP ) and not isnull( GlobalOTDTable );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      option := WebMessageBox::Question( "璇烽�夋嫨鏁版嵁婧�", "鏁版嵁婀東娴嬭瘯鏁版嵁|鍙栨秷" );
+      
+      if ( option = 0 ) {
+        WebMessageBox::Success( "寮�濮嬫媺鍙栦腑锛岃鏌ョ湅鎷夊彇鏃ュ織", true );
+        Global_MappingAnnualBudgetData::CreateData( GlobalOTDTable, ApplicationMacroPlanner.GetUserName() );
+      } else if ( option = 1 ) {
+        if ( DataHolderCheckedProduct.Data().Size() = 0 ) {
+          WebMessageBox::Error( "璇峰厛鍦ㄥ乏渚у鑸爮閫夋嫨瑕佺敓鎴愭祴璇曟暟鎹殑浜у搧锛�", true );
+        } else {
+          GlobalOTDTable.CreateCapacityAndSaleBudgeTestData( GlobalOTDSOP,
+                                                             GlobalOTDTable,
+                                                             DataHolderCapacityAndSaleBudgeFilterYear.Data(),
+                                                             DataHolderCheckedProduct.Data() );
+        }
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonExportDetail_OnClick\043971.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonExportDetail_OnClick\043971.def"
new file mode 100644
index 0000000..faf0bf7
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonExportDetail_OnClick\043971.def"
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: pButton/ButtonExportDetail_97
+Response OnClick () id:Response_FormCapacityAndSaleBudge_ButtonExportDetail_OnClick_971
+{
+  #keys: '[414702.1.266041309]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( GlobalOTDTable );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      //Application.Download( "骞村害浜ч攢棰勭畻璇︽儏.xlsx", MPSync.CapacityAndSaleBudgeExport().AsBinaryData() );
+      
+      base64 := Global_MappingAnnualBudgetData::Export( GlobalOTDTable );
+      Application.Download( "骞村害浜ч攢棰勭畻璇︽儏.xlsx", base64 );
+    *]
+    GroupServerCalls: false
+  }
+}
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"
new file mode 100644
index 0000000..c2f17ad
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonGenerateTestData_OnClick\04319.def"
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: pButton/ButtonGenerateTestData_136
+Response OnClick () id:Response_FormCapacityAndSaleBudge_ButtonGenerateTestData_OnClick_19
+{
+  #keys: '[414702.1.266041305]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan ) and not isnull( GlobalOTDSOP ) and not isnull( GlobalOTDTable );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      CapacityAndSaleBudgeFilterBusinessType::InitializedData( GlobalOTDSOP, GlobalOTDTable );
+      CapacityAndSaleBudgeFilterPlaceOfProductionOfArray::InitializedData( GlobalOTDSOP, GlobalOTDTable );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
index 7c799db..95e899e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
@@ -8,28 +8,7 @@
   Children:
   [
     #child: ListCapacityAndSaleBudge
-    Component ButtonExportDetail
-    {
-      #keys: '[414384.0.887310503]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Image: 'EXPORT1'
-        Label: '瀵煎嚭'
-        Taborder: 1
-      ]
-    }
-    Component ButtonGenerateTestData
-    {
-      #keys: '[414384.0.971540693]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Image: 'IMPORT1'
-        Label: '鏍规嵁绛涢�夊勾浠界敓鎴愭祴璇曟暟鎹�'
-        Taborder: 0
-      ]
-    }
+    #child: pButton
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def
index 8c71c5c..09249e2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def
@@ -80,6 +80,7 @@
   Properties:
   [
     ContextMenu: 'chartContextMenuCapacityAndSaleBudge'
-    Taborder: 7
+    Taborder: 4
+    Title: '骞村害浜ч攢棰勭畻澶嶇洏'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_pFilterCriteria.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_pFilterCriteria.def
new file mode 100644
index 0000000..4ab0d20
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_pFilterCriteria.def
@@ -0,0 +1,60 @@
+Quintiq file version 2.0
+Component pFilterCriteria
+{
+  #keys: '[414702.1.277336951]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component DropDownByBusinessTypeOrByOrgCode id:DropDownByBusinessTypeOrByOrgCode_549
+    {
+      #keys: '[414702.1.277808126]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: '鏍规嵁闈㈡澘鍩哄湴/浜嬩笟閮ㄥ垎缁�'
+        Strings: '闈㈡澘鍩哄湴;浜嬩笟閮�'
+        Taborder: 1
+      ]
+    }
+    Component DropDownTimeGroup id:DropDownTimeGroup_593
+    {
+      #keys: '[414702.1.277808195]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: '鏃堕棿鍒嗙粍'
+        Strings: '鏈�;瀛e害;鍗婂勾;骞�'
+        Taborder: 2
+      ]
+    }
+    Component DropDownSaleOrCapacity id:DropDownSaleOrCapacity_715
+    {
+      #keys: '[414702.1.277808264]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: '浜ц兘/閿�鍞'
+        Strings: '浜ц兘;閿�鍞'
+        Taborder: 3
+      ]
+    }
+    Component ButtonCapacityAndSaleBudgeChartTest id:ButtonCapacityAndSaleBudgeChartTest_844
+    {
+      #keys: '[414702.1.277808330]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'PRESENTATION_CHART'
+        Label: '鐢熸垚鍥捐〃'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Border: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
deleted file mode 100644
index cbd7ff2..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
+++ /dev/null
@@ -1,26 +0,0 @@
-Quintiq file version 2.0
-#parent: ButtonCapacityAndSaleBudgeChartTest
-Response OnClick () id:Response_FormCapacityAndSaleBudgeChart_ButtonCapacityAndSaleBudgeChartTest_OnClick
-{
-  #keys: '[414384.0.857443403]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  GroupServerCalls: true
-  QuillAction
-  {
-    Body:
-    [*
-      //CapacityAndSaleBudgeChartElement::TestData( GlobalOTDTable );
-      
-      GlobalOTDSOP.CapacityAndSaleBudgeChart( DataHolderMacroPlansForScenarioComparison.Data(), 
-                                              DropDownSaleOrCapacity.Text(),
-                                              DropDownTimeGroup.Text(),
-                                              DropDownByBusinessTypeOrByOrgCode.Text(),
-                                              DataHolderCapacityAndSaleBudgeFilterBusinessType.Data(),
-                                              DataHolderCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.Data(),
-                                              DataHolderCapacityAndSaleBudgeFilterYear.Data(),
-                                              DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
-                                              GlobalOTDTable );
-    *]
-  }
-}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_pFilterCriteria_ButtonCapacityAndSaleBudgeChartTest_OnClick\043603.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_pFilterCriteria_ButtonCapacityAndSaleBudgeChartTest_OnClick\043603.def"
new file mode 100644
index 0000000..8ff52d7
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_pFilterCriteria_ButtonCapacityAndSaleBudgeChartTest_OnClick\043603.def"
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: pFilterCriteria/ButtonCapacityAndSaleBudgeChartTest_844
+Response OnClick () id:Response_FormCapacityAndSaleBudgeChart_ButtonCapacityAndSaleBudgeChartTest_OnClick_603
+{
+  #keys: '[414702.1.277808329]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    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.CapacityAndSaleBudgeChart( DataHolderMacroPlansForScenarioComparison.Data(), 
+                                              DropDownSaleOrCapacity.Text(),
+                                              DropDownTimeGroup.Text(),
+                                              DropDownByBusinessTypeOrByOrgCode.Text(),
+                                              &targetCapacityAndSaleBudgeFilterItem,
+                                              &targetCapacityAndSaleBudgeFilterPlaceOfProductionOfArray,
+                                              &targetCapacityAndSaleBudgeFilterBusinessType,
+                                              &targetCapacityAndSaleBudgeFilterYear,
+                                              &targetCapacityAndSaleBudgeFilterMonth,
+                                              GlobalOTDTable 
+                                             );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def
index 237e0c6..56d70aa 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def
@@ -8,16 +8,6 @@
   Children:
   [
     #child: ChartCapacityAndSaleBudgeChart
-    Component ButtonCapacityAndSaleBudgeChartTest
-    {
-      #keys: '[414384.0.857443217]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Label: '鐢熸垚'
-        Taborder: 6
-      ]
-    }
     Component DropDownYears
     {
       #keys: '[414384.0.857740648]'
@@ -25,7 +15,7 @@
       Properties:
       [
         Label: '骞翠唤'
-        Taborder: 2
+        Taborder: 0
         Visible: false
       ]
     }
@@ -37,7 +27,7 @@
       [
         AllowEmpty: true
         Label: '浜嬩笟閮�'
-        Taborder: 3
+        Taborder: 1
         Visible: false
       ]
     }
@@ -49,46 +39,11 @@
       [
         AllowEmpty: true
         Label: '闈㈡澘鍩哄湴'
-        Taborder: 4
+        Taborder: 2
         Visible: false
       ]
     }
-    Component DropDownTimeGroup
-    {
-      #keys: '[414384.0.857771238]'
-      BaseType: 'WebDropDownStringList'
-      Properties:
-      [
-        InitialValue: '鏈�'
-        Label: '鏃堕棿鍒嗙粍'
-        Strings: '鏈�;瀛e害;鍗婂勾;骞�'
-        Taborder: 1
-      ]
-    }
-    Component DropDownByBusinessTypeOrByOrgCode
-    {
-      #keys: '[414384.0.857702904]'
-      BaseType: 'WebDropDownStringList'
-      Properties:
-      [
-        InitialValue: '浜嬩笟閮�'
-        Label: '鏍规嵁闈㈡澘鍩哄湴/浜嬩笟閮ㄥ垎缁�'
-        Strings: '闈㈡澘鍩哄湴;浜嬩笟閮�'
-        Taborder: 0
-      ]
-    }
-    Component DropDownSaleOrCapacity
-    {
-      #keys: '[414384.0.886240556]'
-      BaseType: 'WebDropDownStringList'
-      Properties:
-      [
-        InitialValue: '閿�鍞'
-        Label: '閿�鍞/浜ц兘'
-        Strings: '閿�鍞;浜ц兘'
-        Taborder: 5
-      ]
-    }
+    #child: pFilterCriteria
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def
index d59a144..2666de7 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def
@@ -93,6 +93,6 @@
     ContextMenu: 'matrixeditorContextMenuCapacityAndSaleBudgeCompare'
     Editable: false
     Rows: 'MatrixEditorRowsCapacityAndSaleBudgeCompare'
-    Taborder: 2
+    Taborder: 1
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_pButton.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_pButton.def
new file mode 100644
index 0000000..9c37840
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_pButton.def
@@ -0,0 +1,47 @@
+Quintiq file version 2.0
+Component pButton
+{
+  #keys: '[414702.1.272379026]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonCapacityAndSaleBudgeCompare id:ButtonCapacityAndSaleBudgeCompare_956
+    {
+      #keys: '[414702.1.272313474]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'COCKTAIL'
+        Label: '鍒锋柊'
+        Taborder: 0
+      ]
+    }
+    Component ButtonExportCompare id:ButtonExportCompare_364
+    {
+      #keys: '[414702.1.269961255]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Label: '瀵煎嚭'
+        Taborder: 1
+      ]
+    }
+    Component Image116
+    {
+      #keys: '[414702.1.375948796]'
+      BaseType: 'WebImage'
+      Properties:
+      [
+        Image: 'CHECK'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
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_ButtonCapacityAndSaleBudgeCompare_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def
deleted file mode 100644
index 7f559d2..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def
+++ /dev/null
@@ -1,24 +0,0 @@
-Quintiq file version 2.0
-#parent: ButtonCapacityAndSaleBudgeCompare
-Response OnClick () id:Response_FormCapacityAndSaleBudgeCompare_ButtonCapacityAndSaleBudgeCompare_OnClick
-{
-  #keys: '[414384.0.818241703]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  GroupServerCalls: true
-  QuillAction
-  {
-    Body:
-    [*
-      info( DataHolderMacroPlansForScenarioComparison.Data().Size() );
-      info( DataHolderCapacityAndSaleBudgeFilterItem.Data().Size() );
-      info( DataHolderCapacityAndSaleBudgeFilterYear.Data().Size() );
-      info( DataHolderCapacityAndSaleBudgeFilterMonth.Data().Size() );
-      GlobalOTDSOP.CapacityAndSaleBudgeCompare( DataHolderMacroPlansForScenarioComparison.Data(), 
-                                                DataHolderCapacityAndSaleBudgeFilterItem.Data(), 
-                                                DataHolderCapacityAndSaleBudgeFilterYear.Data(), 
-                                                DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
-                                                GlobalOTDTable );
-    *]
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def
deleted file mode 100644
index f98be27..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: ButtonExportCompare
-Response OnClick () id:Response_FormCapacityAndSaleBudgeCompare_ButtonExportCompare_OnClick
-{
-  #keys: '[414384.0.881345276]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  Precondition:
-  [*
-    return not isnull( GlobalOTDTable );
-  *]
-  QuillAction
-  {
-    Body:
-    [*
-      Application.Download( "骞村害浜ч攢棰勭畻瀵规瘮.xlsx", GlobalOTDSOP.CapacityAndSaleBudgeCompareExport().AsBinaryData() );
-    *]
-    GroupServerCalls: false
-  }
-}
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"
new file mode 100644
index 0000000..3e8cd8f
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_pButton_ButtonCapacityAndSaleBudgeCompare_OnClick\043231.def"
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: pButton/ButtonCapacityAndSaleBudgeCompare_956
+Response OnClick () id:Response_FormCapacityAndSaleBudgeCompare_ButtonCapacityAndSaleBudgeCompare_OnClick_231
+{
+  #keys: '[414702.1.272313473]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      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/Response_pButton_ButtonExportCompare_OnClick\043325.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_pButton_ButtonExportCompare_OnClick\043325.def"
new file mode 100644
index 0000000..1dbc159
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_pButton_ButtonExportCompare_OnClick\043325.def"
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: pButton/ButtonExportCompare_364
+Response OnClick () id:Response_FormCapacityAndSaleBudgeCompare_ButtonExportCompare_OnClick_325
+{
+  #keys: '[414702.1.269961254]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( GlobalOTDTable );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      Application.Download( "骞村害浜ч攢棰勭畻瀵规瘮.xlsx", GlobalOTDSOP.CapacityAndSaleBudgeCompareExport().AsBinaryData() );
+    *]
+    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 d44643f..fd88e20 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def
@@ -8,25 +8,30 @@
   Children:
   [
     #child: MatrixEditorCapacityAndSaleBudgeCompare
-    Component ButtonCapacityAndSaleBudgeCompare
+    #child: pButton
+    Component dhStatus
     {
-      #keys: '[414384.0.818241675]'
-      BaseType: 'WebButton'
-      Properties:
+      #keys: '[414702.1.386200525]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'CapacityAndSaleBudgeRunStatus'
+      Children:
       [
-        Label: '鍒锋柊'
-        Taborder: 0
+        Component deStatus
+        {
+          #keys: '[414702.1.386200546]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'GlobalOTDSOP'
+            Source: 'GlobalOTDSOP'
+            Taborder: 0
+            Transformation: 'CapacityAndSaleBudgeRunStatus'
+          ]
+        }
       ]
-    }
-    Component ButtonExportCompare
-    {
-      #keys: '[414384.0.881345277]'
-      BaseType: 'WebButton'
       Properties:
       [
-        Image: 'EXPORT1'
-        Label: '瀵煎嚭'
-        Taborder: 1
+        Taborder: 2
       ]
     }
   ]
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_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserCh\043171.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserCh\043171.def"
index f254f69..9e21db8 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserCh\043171.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserCh\043171.def"
@@ -5,12 +5,12 @@
   #keys: '[414384.0.875704514]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebList_OnUserCheckedChanged'
-  GroupServerCalls: true
   QuillAction
   {
     Body:
     [*
-      DataHolderCapacityAndSaleBudgeFilterYear.Data().Flush();
+      DataHolderCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.Data().Flush();
     *]
+    GroupServerCalls: false
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserChecke.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserChecke.def
index 5d9bdf7..86b3523 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserChecke.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserChecke.def
@@ -1,18 +1,18 @@
 Quintiq file version 2.0
 #parent: ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
 Response OnUserCheckedChanged (
-  structured[CapacityAndSaleBudgeFilterYear] checkeditems
+  structured[CapacityAndSaleBudgeFilterPlaceOfProductionOfArray] checkeditems
 ) id:Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserCheckedChanged
 {
   #keys: '[414384.0.875704513]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebList_OnUserCheckedChanged'
-  GroupServerCalls: true
   QuillAction
   {
     Body:
     [*
-      DataHolderCapacityAndSaleBudgeFilterYear.Data( checkeditems.Copy() );
+      DataHolderCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.Data( checkeditems.Copy() );
     *]
+    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_FormCustomerOrders/Component_ListSDIP.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_ListSDIP.def
new file mode 100644
index 0000000..6d09b78
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_ListSDIP.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component ListSDIP #extension
+{
+  Children:
+  [
+    Component DataExtractorSDIP #extension
+    {
+      Properties:
+      [
+        FixedFilter: 'object.ProductInStockingPoint_MP().Product_MP().IsLeaf()and isnull( object.OriginalSalesDemand() )'
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_PanelSDIP.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_PanelSDIP.def
new file mode 100644
index 0000000..3d7315d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_PanelSDIP.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component PanelSDIP #extension
+{
+  Children:
+  [
+    #child: ListSDIP
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_PanelSalesDemands.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_PanelSalesDemands.def
index 14acdde..15028ad 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_PanelSalesDemands.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_PanelSalesDemands.def
@@ -4,5 +4,6 @@
   Children:
   [
     #child: PanelAllSalesDemands
+    #child: PanelSDIP
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_listContextMenuSD.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_listContextMenuSD.def
index 4d52db8..c543e5d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_listContextMenuSD.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_listContextMenuSD.def
@@ -9,7 +9,7 @@
       BaseType: 'WebMenu'
       Properties:
       [
-        Taborder: 10
+        Taborder: 11
         Title: '浜嬩笟閮ㄤ紭鍏堢骇璁$畻'
       ]
     }
@@ -19,9 +19,41 @@
       BaseType: 'WebMenu'
       Properties:
       [
-        Taborder: 11
+        Taborder: 12
         Title: '淇敼瀹㈡埛璁㈠崟浼樺厛绾у洜瀛愪俊鎭�'
       ]
     }
+    Component MenuSpliteOrder
+    {
+      #keys: '[414724.0.284248096]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Description: '璁㈠崟鎷嗚'
+        Image: 'ARROW_FORK'
+        Taborder: 14
+        Title: '鎷嗚'
+      ]
+    }
+    Component Menu189
+    {
+      #keys: '[414724.0.314997570]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Separator: true
+        Taborder: 13
+      ]
+    }
+    Component MenuSyncInterfaceData
+    {
+      #keys: '[414996.0.32330708]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Taborder: 10
+        Title: '鍚屾鎺ュ彛鏁版嵁鍒癈ustomer orders'
+      ]
+    }
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Response_TIANMA_JITUAN_ListSalesDemands_MenuSpliteOrder_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Response_TIANMA_JITUAN_ListSalesDemands_MenuSpliteOrder_OnClick.def
new file mode 100644
index 0000000..3274d3e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Response_TIANMA_JITUAN_ListSalesDemands_MenuSpliteOrder_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: ListSalesDemands
+Response OnClick (
+  SalesDemandBase selection
+) id:Response_ListSalesDemands_MenuSpliteOrder_OnClick
+{
+  #keys: '[414724.0.284211940]'
+  CanBindMultiple: false
+  DefinitionID => //FormSalesDemands/ListSalesDemands/Responsedef_ListSalesDemands_WebMenu_OnClick
+  Initiator: 'MenuSpliteOrder'
+  QuillAction
+  {
+    Body:
+    [*
+      data := selection.astype( CustomerOrder );
+      frmOrderSplite := construct( FrmCustomOrderSpliteRow );
+      frmOrderSplite.dh_Paramer_FCOS().Data( data);
+      frmOrderSplite.ShowModal();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Response_TIANMA_JITUAN_listContextMenuSD_MenuSyncInterfaceData_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Response_TIANMA_JITUAN_listContextMenuSD_MenuSyncInterfaceData_OnClick.def
new file mode 100644
index 0000000..2a411b7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Response_TIANMA_JITUAN_listContextMenuSD_MenuSyncInterfaceData_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: listContextMenuSD/MenuSyncInterfaceData
+Response OnClick () id:Response_TIANMA_JITUAN_listContextMenuSD_MenuSyncInterfaceData_OnClick
+{
+  #keys: '[414996.0.32370756]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Global_MappingCustomOrder::CreateCustomOrder( GlobalOTDTable,MacroPlan );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_ListDataInterfaceLog.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_ListDataInterfaceLog.def
new file mode 100644
index 0000000..86db130
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_ListDataInterfaceLog.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListDataInterfaceLog
+{
+  #keys: '[414702.1.239680981]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorDataInterfaceLog
+    {
+      #keys: '[414702.1.239680982]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDLog'
+        Source: 'GlobalOTDLog'
+        Taborder: 0
+        Transformation: 'DataInterfaceLog'
+      ]
+    }
+    #child: listActionBarPageDataInterfaceLog
+    Component DataSetLevelDataInterfaceLog
+    {
+      #keys: '[414702.1.239680987]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuDataInterfaceLog
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgExecuteStatus","title":"ImgExecuteStatus","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgExecuteStatus"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Message","title":"鏃ュ織淇℃伅","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Message"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CreateDate","title":"鍒涘缓鏃堕棿","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CreateDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ErrorNo","title":"閿欒鍙�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ErrorNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ErrorMessage","title":"閿欒娑堟伅","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ErrorMessage"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ExecuteUser","title":"鎵ц鐢ㄦ埛","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ExecuteUser"}}]'
+        ContextMenu: 'listContextMenuDataInterfaceLog'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 3
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListDataInterfaceLog_WebMenu_OnClick
+    {
+      #keys: '[414702.1.241608270]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[517.0.24916696]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel1.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel1.def
new file mode 100644
index 0000000..fddea3f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel1.def
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+Component Panel1
+{
+  #keys: '[414702.1.241718154]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonGenerateProductCategory id:ButtonGenerateProductCategory_943
+    {
+      #keys: '[414702.1.245048887]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'TELEPHONE2'
+        Label: '鏍规嵁浜嬩笟閮ㄧ敓鎴愪骇鍝佸垎绫�'
+        Taborder: 0
+      ]
+    }
+    Component Button1 id:Button1_838
+    {
+      #keys: '[414702.1.247625600]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'BRUSH2'
+        Label: '鏍规嵁浜у搧ID鐢熸垚ProductInLine鍒嗙被'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel3.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel3.def
new file mode 100644
index 0000000..41ba37e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel3.def
@@ -0,0 +1,48 @@
+Quintiq file version 2.0
+Component Panel3
+{
+  #keys: '[414702.1.247664260]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component Button2 id:Button2_925
+    {
+      #keys: '[414702.1.242541029]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'INDUSTRIAL_ROBOT'
+        Label: '鏍规嵁浜у搧ID鐢熸垚StockingPoingCost鍒嗙被'
+        Taborder: 0
+      ]
+    }
+    Component Button3 id:Button3_414
+    {
+      #keys: '[414702.1.247559425]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'BANANA'
+        Label: '鏍规嵁浜у搧ID鐢熸垚MAPISPIP鍒嗙被'
+        Taborder: 1
+      ]
+    }
+    Component Button4 id:Button4_433
+    {
+      #keys: '[414702.1.247870242]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'BEER_GLASS'
+        Label: '鏍规嵁浜у搧ID鐢熸垚InventorySupply鍒嗙被'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel4\0432.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel4\0432.def"
new file mode 100644
index 0000000..17b69a8
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel4\0432.def"
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+Component Panel4
+{
+  #keys: '[414702.1.246784986]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component Button5 id:Button5_56
+    {
+      #keys: '[414702.1.247191910]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'BROOM'
+        Label: '娓呯┖鍒嗙被'
+        Taborder: 1
+      ]
+    }
+    Component ButtonDeleteMappingData id:ButtonDeleteMappingData_928
+    {
+      #keys: '[414702.1.247703528]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'GARBAGE'
+        Label: '鍒犻櫎鎵�鏈変腑闂磋〃鏁版嵁'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_listActionBarPageDataInterfaceLog.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_listActionBarPageDataInterfaceLog.def
new file mode 100644
index 0000000..99182f0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_listActionBarPageDataInterfaceLog.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageDataInterfaceLog
+{
+  #keys: '[414702.1.239680984]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_listContextMenuDataInterfaceLog.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_listContextMenuDataInterfaceLog.def
new file mode 100644
index 0000000..e774933
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_listContextMenuDataInterfaceLog.def
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+Component listContextMenuDataInterfaceLog
+{
+  #keys: '[414702.1.239680989]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuDelete
+    {
+      #keys: '[414702.1.241377626]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 3
+        Title: '鍒犻櫎'
+      ]
+    }
+    Component MenuSelectionAll
+    {
+      #keys: '[414702.1.239663154]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 4
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_ListDataInterfaceLog_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_ListDataInterfaceLog_MenuDelete_OnClick.def
new file mode 100644
index 0000000..852a007
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_ListDataInterfaceLog_MenuDelete_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListDataInterfaceLog
+Response OnClick (
+  DataInterfaceLog selection
+) id:Response_ListDataInterfaceLog_MenuDelete_OnClick
+{
+  #keys: '[414702.1.239692167]'
+  DefinitionID => /ListDataInterfaceLog/Responsedef_ListDataInterfaceLog_WebMenu_OnClick
+  Initiator: 'MenuDelete'
+  QuillAction
+  {
+    Body:
+    [*
+      selection.Delete();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_ListDataInterfaceLog_MenuSelectionAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_ListDataInterfaceLog_MenuSelectionAll_OnClick.def
new file mode 100644
index 0000000..e10569b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_ListDataInterfaceLog_MenuSelectionAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListDataInterfaceLog
+Response OnClick () id:Response_ListDataInterfaceLog_MenuSelectionAll_OnClick
+{
+  #keys: '[414702.1.241718079]'
+  CanBindMultiple: false
+  DefinitionID => /ListDataInterfaceLog/Responsedef_ListDataInterfaceLog_WebMenu_OnClick
+  Initiator: 'MenuSelectionAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_Button1_OnClick\043673.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_Button1_OnClick\043673.def"
new file mode 100644
index 0000000..12c6088
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_Button1_OnClick\043673.def"
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: Panel1/Button1_838
+Response OnClick () id:Response_FormInterfaceTest_Button1_OnClick_673
+{
+  #keys: '[414702.1.247625599]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      WebMessageBox::Information( "浠诲姟寮�濮嬫墽琛岋紝浠呴檺涓�浜烘搷浣滐紒", true );
+      
+      id := DataInterfaceLog::Create( GlobalOTDLog, guard( ApplicationMacroPlanner.GetUserName(), "璐﹀彿寮傚父" ), "鐢熸垚浜у搧鍦ㄨ溅閬撳垎绫�" );
+      
+      Global_ProductInLineCategory::Create( GlobalOTDTable, id );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_ButtonGenerateProductCategory_OnClick\043902.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_ButtonGenerateProductCategory_OnClick\043902.def"
new file mode 100644
index 0000000..0cd4107
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_ButtonGenerateProductCategory_OnClick\043902.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: Panel1/ButtonGenerateProductCategory_943
+Response OnClick () id:Response_Panel1_ButtonGenerateProductCategory_OnClick_902
+{
+  #keys: '[414702.1.245048886]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( GlobalOTDTable );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      WebMessageBox::Information( "浠诲姟寮�濮嬫墽琛岋紝浠呴檺涓�浜烘搷浣滐紒", true );
+      
+      id := DataInterfaceLog::Create( GlobalOTDLog, guard( ApplicationMacroPlanner.GetUserName(), "璐﹀彿寮傚父" ), "鐢熸垚浜у搧鍒嗙被" );
+      
+      Global_ProductCategory::Create( GlobalOTDTable, id );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button2_OnClick\043836.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button2_OnClick\043836.def"
new file mode 100644
index 0000000..624401b
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button2_OnClick\043836.def"
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: Panel3/Button2_925
+Response OnClick () id:Response_FormInterfaceTest_Button2_OnClick_836
+{
+  #keys: '[414702.1.242541028]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      WebMessageBox::Information( "浠诲姟寮�濮嬫墽琛岋紝浠呴檺涓�浜烘搷浣滐紒", true );
+      
+      id := DataInterfaceLog::Create( GlobalOTDLog, guard( ApplicationMacroPlanner.GetUserName(), "璐﹀彿寮傚父" ), "鐢熸垚搴撳瓨鎴愭湰鍒嗙被" );
+      
+      Global_StockingPointCostCategory::Create( GlobalOTDTable, id );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button3_OnClick\043918.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button3_OnClick\043918.def"
new file mode 100644
index 0000000..b1d0783
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button3_OnClick\043918.def"
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: Panel3/Button3_414
+Response OnClick () id:Response_FormInterfaceTest_Button3_OnClick_918
+{
+  #keys: '[414702.1.247559424]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      WebMessageBox::Information( "浠诲姟寮�濮嬫墽琛岋紝浠呴檺涓�浜烘搷浣滐紒", true );
+      
+      id := DataInterfaceLog::Create( GlobalOTDLog, guard( ApplicationMacroPlanner.GetUserName(), "璐﹀彿寮傚父" ), "鐢熸垚瀹為檯搴撳瓨鍒嗙被" );
+      
+      Global_MAPISPIPCategory::Create( GlobalOTDTable, id );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button4_OnClick\043249.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button4_OnClick\043249.def"
new file mode 100644
index 0000000..9bfb3dd
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button4_OnClick\043249.def"
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: Panel3/Button4_433
+Response OnClick () id:Response_FormInterfaceTest_Button4_OnClick_249
+{
+  #keys: '[414702.1.247870241]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      WebMessageBox::Information( "浠诲姟寮�濮嬫墽琛岋紝浠呴檺涓�浜烘搷浣滐紒", true );
+      
+      id := DataInterfaceLog::Create( GlobalOTDLog, guard( ApplicationMacroPlanner.GetUserName(), "璐﹀彿寮傚父" ), "鐢熸垚澶栭儴搴撳瓨鍒嗙被" );
+      
+      Global_InventorySupplyCategory::Create( GlobalOTDTable, id );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_Button5_OnClick\043605.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_Button5_OnClick\043605.def"
new file mode 100644
index 0000000..7800712
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_Button5_OnClick\043605.def"
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: Panel4/Button5_56
+Response OnClick () id:Response_Panel4_Button5_OnClick_605
+{
+  #keys: '[414702.1.247191909]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      WebMessageBox::Information( "浠诲姟寮�濮嬫墽琛岋紝浠呴檺涓�浜烘搷浣滐紒", true )
+      
+      id := DataInterfaceLog::Create( GlobalOTDLog, guard( ApplicationMacroPlanner.GetUserName(), "璐﹀彿寮傚父" ), "娓呯┖鍒嗙被鏁版嵁" );
+      
+      GlobalOTDTable::DeleteAllCategoryData( GlobalOTDTable, id );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_ButtonDeleteMappingData_OnClick\043608.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_ButtonDeleteMappingData_OnClick\043608.def"
new file mode 100644
index 0000000..8a5a671
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_ButtonDeleteMappingData_OnClick\043608.def"
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: Panel4/ButtonDeleteMappingData_928
+Response OnClick () id:Response_Panel1_ButtonDeleteMappingData_OnClick_608
+{
+  #keys: '[414702.1.247703527]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    isExists := exists( GlobalOTDLog, DataInterfaceLog, tempDIL, tempDIL.Message() = "娓呯┖涓棿琛ㄦ暟鎹�" and tempDIL.ExecuteStatus() = "Running" );
+    
+    if ( isExists ) {
+      feedback := "宸叉湁姝e湪杩愯鐨勪换鍔★紒";
+    }
+    
+    return not isnull( GlobalOTDTable ) and not isnull( GlobalOTDLog ) and not isExists;
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      WebMessageBox::Information( "浠诲姟寮�濮嬫墽琛岋紝浠呴檺涓�浜烘搷浣滐紒", true )
+      
+      id := DataInterfaceLog::Create( GlobalOTDLog, guard( ApplicationMacroPlanner.GetUserName(), "璐﹀彿寮傚父" ), "鍒犻櫎鎵�鏈変腑闂磋〃鏁版嵁" );
+      
+      GlobalOTDTable::DeleteAllMappingData( GlobalOTDTable, id );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/_ROOT_Component_FormDataInterfaceLog.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/_ROOT_Component_FormDataInterfaceLog.def
new file mode 100644
index 0000000..46b02ae
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/_ROOT_Component_FormDataInterfaceLog.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormDataInterfaceLog
+{
+  #keys: '[414702.1.239641060]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: ListDataInterfaceLog
+    #child: Panel1
+    #child: Panel4
+    #child: Panel3
+  ]
+  Properties:
+  [
+    Image: 'MUSHROOM'
+    Title: '鏁版嵁鎺ュ彛鏃ュ織'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_ListGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_ListGlobalParameters.def
new file mode 100644
index 0000000..18364b4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_ListGlobalParameters.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListGlobalParameters
+{
+  #keys: '[412960.0.370311764]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorGlobalParameters
+    {
+      #keys: '[412960.0.370311765]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'GlobalParameters'
+      ]
+    }
+    #child: listActionBarPageGlobalParameters
+    Component DataSetLevelGlobalParameters
+    {
+      #keys: '[412960.0.370311770]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuGlobalParameters
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AttributeName","title":"AttributeName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"AttributeName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AttributeValue","title":"AttributeValue","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"AttributeValue"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Address","title":"Address","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Address"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Port","title":"Port","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Port"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PostRequestBody","title":"PostRequestBody","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PostRequestBody"}}]'
+        ContextMenu: 'listContextMenuGlobalParameters'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListGlobalParameters_WebMenu_OnClick
+    {
+      #keys: '[412960.0.373111120]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[693.0.13162755]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_PanelGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_PanelGlobalParameters.def
new file mode 100644
index 0000000..dd6186c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_PanelGlobalParameters.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelGlobalParameters
+{
+  #keys: '[412960.0.370311750]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListGlobalParameters
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listActionBarPageGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listActionBarPageGlobalParameters.def
new file mode 100644
index 0000000..5d480f6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listActionBarPageGlobalParameters.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageGlobalParameters
+{
+  #keys: '[412960.0.370311767]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listContextMenuGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listContextMenuGlobalParameters.def
new file mode 100644
index 0000000..e031569
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listContextMenuGlobalParameters.def
@@ -0,0 +1,57 @@
+Quintiq file version 2.0
+Component listContextMenuGlobalParameters
+{
+  #keys: '[412960.0.370311772]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuNew id:MenuNew_21
+    {
+      #keys: '[412960.0.370312224]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'ADD2'
+        Taborder: 3
+        Title: 'New'
+      ]
+    }
+    Component MenuEdit id:MenuEdit_368
+    {
+      #keys: '[412960.0.370312277]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PENCIL'
+        Taborder: 4
+        Title: 'Edit'
+      ]
+    }
+    Component MenuDelete id:MenuDelete_832
+    {
+      #keys: '[412960.0.370312355]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 5
+        Title: 'Delete'
+      ]
+    }
+    Component MenuInitial
+    {
+      #keys: '[412960.0.376011203]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'ARROW_LOOP3'
+        Taborder: 6
+        Title: 'Init Api'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuDelete_OnClick.def
new file mode 100644
index 0000000..f68b43c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuDelete_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListGlobalParameters
+Response OnClick (
+  GlobalParameters selection
+) id:Response_ListGlobalParameters_MenuDelete_OnClick
+{
+  #keys: '[412960.0.373113087]'
+  CanBindMultiple: false
+  DefinitionID => /ListGlobalParameters/Responsedef_ListGlobalParameters_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuDelete'
+  QuillAction
+  {
+    Body:
+    [*
+      selection.Delete();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuEdit_OnClick.def
new file mode 100644
index 0000000..6094065
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuEdit_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListGlobalParameters
+Response OnClick (
+  GlobalParameters selection
+) id:Response_ListGlobalParameters_MenuEdit_OnClick
+{
+  #keys: '[412960.0.373112994]'
+  CanBindMultiple: false
+  DefinitionID => /ListGlobalParameters/Responsedef_ListGlobalParameters_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuEdit'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogGlobalParameters );
+      dlg.Edit( selection );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuNew_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuNew_OnClick.def
new file mode 100644
index 0000000..a222fe1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuNew_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListGlobalParameters
+Response OnClick () id:Response_ListGlobalParameters_MenuNew_OnClick
+{
+  #keys: '[412960.0.373111139]'
+  CanBindMultiple: false
+  DefinitionID => /ListGlobalParameters/Responsedef_ListGlobalParameters_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuNew'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogGlobalParameters );
+      dlg.New( GlobalOTDTable );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_listContextMenuGlobalParameters_MenuInitial_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_listContextMenuGlobalParameters_MenuInitial_OnClick.def
new file mode 100644
index 0000000..c2c4dd2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_listContextMenuGlobalParameters_MenuInitial_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: listContextMenuGlobalParameters/MenuInitial
+Response OnClick () id:Response_listContextMenuGlobalParameters_MenuInitial_OnClick
+{
+  #keys: '[412960.0.376011242]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      GlobalParameters::TestForApiRequest( GlobalOTDTable );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/_ROOT_Component_FormGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/_ROOT_Component_FormGlobalParameters.def
new file mode 100644
index 0000000..a193e5c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/_ROOT_Component_FormGlobalParameters.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormGlobalParameters
+{
+  #keys: '[412960.0.367611841]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelGlobalParameters
+  ]
+  Properties:
+  [
+    Description: '瀛樻斁鍚勭被鍏ㄥ眬鍙傛暟锛岀洰鍓嶄粎鍖呭惈API鐩稿叧'
+    Image: 'EARTH2'
+    Title: 'Global Parameters'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_ListHistoricalSalesOrders.def b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_ListHistoricalSalesOrders.def
deleted file mode 100644
index 5c5ae1b..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_ListHistoricalSalesOrders.def
+++ /dev/null
@@ -1,59 +0,0 @@
-Quintiq file version 2.0
-Component ListHistoricalSalesOrders
-{
-  #keys: '[414382.0.388210753]'
-  BaseType: 'WebList'
-  Children:
-  [
-    Component DataExtractorHistoricalSalesOrders
-    {
-      #keys: '[414382.0.388210754]'
-      BaseType: 'WebDataExtractor'
-      Properties:
-      [
-        DataType: 'MacroPlan'
-        Source: 'MacroPlan'
-        Taborder: 0
-        Transformation: 'HistoricalSalesOrder'
-      ]
-    }
-    #child: listActionBarPageHistoricalSalesOrders
-    Component DataSetLevelHistoricalSalesOrders
-    {
-      #keys: '[414382.0.388210759]'
-      BaseType: 'WebDataSetLevel'
-      Children:
-      [
-        #child: listContextMenuHistoricalSalesOrders
-      ]
-      Properties:
-      [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"VerNo","title":"鐗堟湰鍙�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"VerNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"濉骇鍘嗗彶鍟嗗搧缂栫爜","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Customer","title":"瀹㈡埛鍚嶇О","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Customer"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"鏁伴噺鍗曚綅","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderDate","title":"璁㈠崟鏃ユ湡","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderDate"}}]'
-        ContextMenu: 'listContextMenuHistoricalSalesOrders'
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    Taborder: 0
-  ]
-  ResponseDefinitions:
-  [
-    DelegatedResponseDefinition OnClick id:Responsedef_ListHistoricalSalesOrders_WebMenu_OnClick
-    {
-      #keys: '[414382.0.394390402]'
-      Initiator: 'WebMenu'
-      IsInherited: false
-      ResponseType: 'OnClick'
-      Arguments:
-      [
-        ResponseDefinitionArgument selection
-        {
-          #keys: '[1083.0.17043214]'
-          Binding: 'this.Selection()'
-        }
-      ]
-    }
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_listActionBarPageHistoricalSalesOrders.def b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_listActionBarPageHistoricalSalesOrders.def
deleted file mode 100644
index 8597dfe..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_listActionBarPageHistoricalSalesOrders.def
+++ /dev/null
@@ -1,10 +0,0 @@
-Quintiq file version 2.0
-Component listActionBarPageHistoricalSalesOrders
-{
-  #keys: '[414382.0.388210756]'
-  BaseType: 'listActionBarPage'
-  Properties:
-  [
-    Taborder: 1
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_listContextMenuHistoricalSalesOrders.def b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_listContextMenuHistoricalSalesOrders.def
deleted file mode 100644
index 08bafce..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_listContextMenuHistoricalSalesOrders.def
+++ /dev/null
@@ -1,46 +0,0 @@
-Quintiq file version 2.0
-Component listContextMenuHistoricalSalesOrders
-{
-  #keys: '[414382.0.388210761]'
-  BaseType: 'listContextMenu'
-  Children:
-  [
-    Component MenuNew id:MenuNew_603
-    {
-      #keys: '[414382.0.394390227]'
-      BaseType: 'WebMenu'
-      Properties:
-      [
-        Image: 'ADD2'
-        Taborder: 3
-        Title: 'New'
-      ]
-    }
-    Component MenuEdit id:MenuEdit_847
-    {
-      #keys: '[414382.0.394390242]'
-      BaseType: 'WebMenu'
-      Properties:
-      [
-        Image: 'PENCIL'
-        Taborder: 4
-        Title: 'Edit'
-      ]
-    }
-    Component MenuDelete id:MenuDelete_646
-    {
-      #keys: '[414382.0.394390257]'
-      BaseType: 'WebMenu'
-      Properties:
-      [
-        Image: 'DELETE'
-        Taborder: 5
-        Title: 'Delete'
-      ]
-    }
-  ]
-  Properties:
-  [
-    Taborder: 0
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuDelete_OnClick.def
deleted file mode 100644
index c59123e..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuDelete_OnClick.def
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: ListHistoricalSalesOrders
-Response OnClick (
-  HistoricalSalesOrder selection
-) id:Response_ListHistoricalSalesOrders_MenuDelete_OnClick
-{
-  #keys: '[414382.0.402500799]'
-  CanBindMultiple: false
-  DefinitionID => /ListHistoricalSalesOrders/Responsedef_ListHistoricalSalesOrders_WebMenu_OnClick
-  GroupServerCalls: true
-  Initiator: 'MenuDelete'
-  QuillAction
-  {
-    Body:
-    [*
-      selection.Delete();
-    *]
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuEdit_OnClick.def
deleted file mode 100644
index 6ad44a8..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuEdit_OnClick.def
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: ListHistoricalSalesOrders
-Response OnClick (
-  FillingCapacityOrder selection
-) id:Response_ListHistoricalSalesOrders_MenuEdit_OnClick
-{
-  #keys: '[414382.0.402531567]'
-  CanBindMultiple: false
-  DefinitionID => /ListHistoricalSalesOrders/Responsedef_ListHistoricalSalesOrders_WebMenu_OnClick
-  GroupServerCalls: true
-  Initiator: 'MenuEdit'
-  QuillAction
-  {
-    Body:
-    [*
-      dlg := construct( DialogHistoricalSalesOrders );
-      dlg.Edit(  selection );
-    *]
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuNew_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuNew_OnClick.def
deleted file mode 100644
index d151663..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuNew_OnClick.def
+++ /dev/null
@@ -1,26 +0,0 @@
-Quintiq file version 2.0
-#parent: ListHistoricalSalesOrders
-Response OnClick () id:Response_ListHistoricalSalesOrders_MenuNew_OnClick
-{
-  #keys: '[414382.0.394390488]'
-  CanBindMultiple: false
-  DefinitionID => /ListHistoricalSalesOrders/Responsedef_ListHistoricalSalesOrders_WebMenu_OnClick
-  Initiator: 'MenuNew'
-  QuillAction
-  {
-    Body:
-    [*
-      dlg := construct( DialogHistoricalSalesOrders );
-      
-      dlg.dropDownStringListProductID().Strings(  HistoricalSalesOrder::GetProductIdString(  MacroPlan,"") );
-      info( HistoricalSalesOrder::GetProductIdString(  MacroPlan,"") );
-      dlg.dropDownStringListCustomer().Strings( HistoricalSalesOrder::GetCustomerString( MacroPlan,""));
-      dlg.dropDownStringListSalesSegmentName().Strings( HistoricalSalesOrder::GetSalesSegmentString(  MacroPlan,""));
-      dlg.dropDownStringListStockPointID().Strings( HistoricalSalesOrder::GetStockingPointString(  MacroPlan,""));
-      dlg.dropDownStringListUnitOfMeasureName().Strings( HistoricalSalesOrder::GetUnitOfMeasuresString(   MacroPlan,""));
-      
-      dlg.New( MacroPlan );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/_ROOT_Component_FormHistoricalSalesOrders.def b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/_ROOT_Component_FormHistoricalSalesOrders.def
index 2bddaac..366fb53 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/_ROOT_Component_FormHistoricalSalesOrders.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/_ROOT_Component_FormHistoricalSalesOrders.def
@@ -5,10 +5,6 @@
 {
   #keys: '[414382.0.386940324]'
   BaseType: 'WebForm'
-  Children:
-  [
-    #child: ListHistoricalSalesOrders
-  ]
   Properties:
   [
     Title: '澶栧崠CELL鍘嗗彶璁㈠崟'
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 5c28e5e..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: 5
+    Taborder: 7
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def
index 5cc2c95..a635d39 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def
@@ -60,6 +60,6 @@
   [
     FixedSize: true
     Orientation: 'horizontal'
-    Taborder: 0
+    Taborder: 1
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2.def
index b767aa5..d1bb88d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2.def
@@ -60,6 +60,6 @@
   [
     FixedSize: true
     Orientation: 'horizontal'
-    Taborder: 1
+    Taborder: 2
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def
index 2ad0d40..b29c642 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def
@@ -60,6 +60,6 @@
   [
     FixedSize: true
     Orientation: 'horizontal'
-    Taborder: 2
+    Taborder: 3
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def
index 1c15894..2b436da 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def
@@ -60,6 +60,6 @@
   [
     FixedSize: true
     Orientation: 'horizontal'
-    Taborder: 3
+    Taborder: 4
   ]
 }
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 b8719b3..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: 4
+    Taborder: 6
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_CheckSelectAll_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_CheckSelectAll_OnChanged.def
new file mode 100644
index 0000000..2f9615b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_CheckSelectAll_OnChanged.def
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+#parent: CheckSelectAll
+Response OnChanged () id:Response_FormInterfaceTest_CheckSelectAll_OnChanged
+{
+  #keys: '[414702.1.245944876]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      CheckboxCustomOrder.Checked( this.Checked() );
+      CheckboxForecast.Checked( this.Checked() );
+      CheckboxUnitOfMeasure_MP.Checked( this.Checked() );
+      CheckboxSalesSegment_MP.Checked( this.Checked() );
+      CheckboxProduct_MP.Checked( this.Checked() );
+      CheckboxConversionFactor.Checked( this.Checked() );
+      CheckboxOperation.Checked( this.Checked() );
+      CheckboxOperationBOM.Checked( this.Checked() );
+      CheckboxProductInLane.Checked( this.Checked() );
+      CheckboxAIPISPIP.Checked( this.Checked() );
+      CheckboxInventorySupply.Checked( this.Checked() );
+      CheckboxStockingPointCost.Checked( this.Checked() );
+      CheckboxOperationCost.Checked( this.Checked() );
+      CheckboxDOI_DSI.Checked( this.Checked() );
+      CheckboxCustomerGrade.Checked( this.Checked() );
+      CheckboxStockingPoint_MP.Checked( this.Checked() );
+      CheckboxCurrency_MP.Checked( this.Checked() );
+      CheckboxCurrencyRate_MP.Checked( this.Checked() );
+      CheckboxLane.Checked( this.Checked() );
+      CheckboxLaneLeg.Checked( this.Checked() );
+    *]
+    GroupServerCalls: false
+  }
+}
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 94fce67..03e2d62 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def
@@ -19,6 +19,8 @@
   {
     Body:
     [*
+      WebMessageBox::Information( "鏁版嵁寮�濮嬫媺鍙栦腑锛侊紙浠呴檺涓�浜烘搷浣滐級", true );
+      
       GlobalOTDTable.SynchronizationAllMappingBrokerAndAPIByOption( ApplicationMacroPlanner.GetUserName(),
                                                                     CheckboxCustomOrder.Checked(),
                                                                     CheckboxForecast.Checked(),
@@ -39,9 +41,9 @@
                                                                     CheckboxCurrency_MP.Checked(),
                                                                     CheckboxCurrencyRate_MP.Checked(),
                                                                     CheckboxLane.Checked(),
-                                                                    CheckboxLaneLeg.Checked() );
-      
-      WebMessageBox::Information( "鏁版嵁寮�濮嬫媺鍙栦腑锛侊紙浠呴檺涓�浜烘搷浣滐級", true );
+                                                                    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 91a9af4..b3a5a50 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
@@ -13,6 +13,27 @@
     #child: PanelInterfaceOption3
     #child: PanelInterfaceOption2
     #child: PanelInterfaceOption1
+    Component CheckSelectAll
+    {
+      #keys: '[414702.1.245944647]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: '鍏ㄩ��'
+        Taborder: 0
+      ]
+    }
+    Component DataHolderInterfaceTest
+    {
+      #keys: '[414502.0.443241895]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'Scenario'
+      Properties:
+      [
+        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
new file mode 100644
index 0000000..3fba853
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_ListPeggingAllResult.def
@@ -0,0 +1,60 @@
+Quintiq file version 2.0
+Component ListPeggingAllResult
+{
+  #keys: '[414702.1.306657922]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPeggingAllResult
+    {
+      #keys: '[414702.1.306657923]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'PeggingResult'
+        ExtractionMode: 'Selected'
+        Source: 'FormPeggingResult.ListPeggingResult'
+        Taborder: 0
+        Transformation: 'AllChild'
+      ]
+    }
+    #child: listActionBarPagePeggingAllResult
+    Component DataSetLevelPeggingAllResult
+    {
+      #keys: '[414702.1.306657928]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPeggingAllResult
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PeggingProductInSalesDemandBase.SalesDemandBaseID","title":"璁㈠崟ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PeggingProductInSalesDemandBase.SalesDemandBaseID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"浜у搧ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"搴撳瓨鐐笽D","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"寮�濮嬫椂闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SupplyQuantity","title":"渚涘簲鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SupplyQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"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_WebMenu_OnClick
+    {
+      #keys: '[414702.1.305581888]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[639.0.20605876]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listActionBarPagePeggingAllResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listActionBarPagePeggingAllResult.def
new file mode 100644
index 0000000..73bb8e7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listActionBarPagePeggingAllResult.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePeggingAllResult
+{
+  #keys: '[414702.1.306657925]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listContextMenuPeggingAllResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listContextMenuPeggingAllResult.def
new file mode 100644
index 0000000..261fbc7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listContextMenuPeggingAllResult.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component listContextMenuPeggingAllResult
+{
+  #keys: '[414702.1.306657930]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuSelectAll
+    {
+      #keys: '[414702.1.305511008]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DOCUMENT_SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 3
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Response_ListPeggingAllResult_MenuSelectAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Response_ListPeggingAllResult_MenuSelectAll_OnClick.def
new file mode 100644
index 0000000..9f80468
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Response_ListPeggingAllResult_MenuSelectAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListPeggingAllResult
+Response OnClick () id:Response_ListPeggingAllResult_MenuSelectAll_OnClick
+{
+  #keys: '[414702.1.306792785]'
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingAllResult/Responsedef_ListPeggingAllResult_WebMenu_OnClick
+  Initiator: 'MenuSelectAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/_ROOT_Component_FormPeggingAllResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/_ROOT_Component_FormPeggingAllResult.def
new file mode 100644
index 0000000..7fd5a9c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/_ROOT_Component_FormPeggingAllResult.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormPeggingAllResult
+{
+  #keys: '[414702.1.305404879]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: ListPeggingAllResult
+  ]
+  Properties:
+  [
+    Image: 'DIAMOND'
+    Title: 'Pegging鎵�鏈夊瓙缁撴灉'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase\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_ListStockingPoint.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListStockingPoint.def
new file mode 100644
index 0000000..f311e9d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListStockingPoint.def
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+Component ListStockingPoint
+{
+  #keys: '[414702.1.361033206]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorStockingPoint
+    {
+      #keys: '[414702.1.361033207]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'PeggingProduct_MP'
+        ExtractionMode: 'Selected'
+        Source: 'FormPeggingProduct_MP.ListPeggingProduct_MP'
+        Taborder: 0
+        Transformation: 'PeggingProductInStockingPoint_MP'
+      ]
+    }
+    #child: listActionBarPageStockingPoint
+    Component DataSetLevelStockingPoint
+    {
+      #keys: '[414702.1.361033212]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuStockingPoint
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"浜у搧ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"搴撳瓨鐐�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"寮�濮嬫椂闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}}]'
+        ContextMenu: 'listContextMenuStockingPoint'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelContent.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelContent.def
new file mode 100644
index 0000000..048d9ff
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelContent.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelContent
+{
+  #keys: '[414702.1.361001581]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelSalesDemand
+    #child: PanelStockingPoint
+  ]
+  Properties:
+  [
+    Orientation: 'tab'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelSalesDemand.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelSalesDemand.def
new file mode 100644
index 0000000..4bd57ae
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelSalesDemand.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelSalesDemand
+{
+  #keys: '[414702.1.361001594]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListPeggingProductInSalesDemandBase_886
+  ]
+  Properties:
+  [
+    Taborder: 0
+    Title: '璁㈠崟'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelStockingPoint.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelStockingPoint.def
new file mode 100644
index 0000000..8cc9f76
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelStockingPoint.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelStockingPoint
+{
+  #keys: '[414702.1.361001613]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListStockingPoint
+  ]
+  Properties:
+  [
+    Taborder: 1
+    Title: '搴撳瓨鐐�'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase\0431.def"
new file mode 100644
index 0000000..258747b
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePeggingProductInSalesDemandBase id:listActionBarPagePeggingProductInSalesDemandBase_1
+{
+  #keys: '[414702.1.361001749]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPageStockingPoint.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPageStockingPoint.def
new file mode 100644
index 0000000..2cb4b65
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPageStockingPoint.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageStockingPoint
+{
+  #keys: '[414702.1.361033209]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase\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_listContextMenuStockingPoint.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuStockingPoint.def
new file mode 100644
index 0000000..0e32704
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuStockingPoint.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuStockingPoint
+{
+  #keys: '[414702.1.361033214]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_886_MenuSelectionAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_886_MenuSelectionAll_OnClick.def
new file mode 100644
index 0000000..e759b98
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_886_MenuSelectionAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListPeggingProductInSalesDemandBase_886
+Response OnClick () id:Response_ListPeggingProductInSalesDemandBase_886_MenuSelectionAll_OnClick
+{
+  #keys: '[414702.1.361001745]'
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingProductInSalesDemandBase_886/Responsedef_ListPeggingProductInSalesDemandBase_886_WebMenu_OnClick
+  Initiator: 'MenuSelectionAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_886_mGeneratePeggingResult_OnCl.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_886_mGeneratePeggingResult_OnCl.def
new file mode 100644
index 0000000..a3e741d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_886_mGeneratePeggingResult_OnCl.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: ListPeggingProductInSalesDemandBase_886
+Response OnClick (
+  structured[PeggingProductInSalesDemandBase] selection
+) id:Response_ListPeggingProductInSalesDemandBase_886_mGeneratePeggingResult_OnClick
+{
+  #keys: '[414702.1.361001744]'
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingProductInSalesDemandBase_886/Responsedef_ListPeggingProductInSalesDemandBase_886_WebMenu_OnClick
+  Initiator: 'mGeneratePeggingResult'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      PeggingResult::CreateData( selection, MacroPlan );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/_ROOT_Component_FormPeggingProductInSalesDemandBase.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/_ROOT_Component_FormPeggingProductInSalesDemandBase.def
new file mode 100644
index 0000000..23460c0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/_ROOT_Component_FormPeggingProductInSalesDemandBase.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormPeggingProductInSalesDemandBase
+{
+  #keys: '[414702.1.291680100]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelContent
+  ]
+  Properties:
+  [
+    Image: 'BANANA'
+    Title: 'Pegging浜у搧鐨勮鍗�'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_ListPeggingProduct_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_ListPeggingProduct_MP.def
new file mode 100644
index 0000000..6cd63a5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_ListPeggingProduct_MP.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListPeggingProduct_MP
+{
+  #keys: '[414702.1.291408736]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPeggingProduct_MP
+    {
+      #keys: '[414702.1.291408737]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
+        Taborder: 0
+        Transformation: 'PeggingProduct_MP'
+      ]
+    }
+    #child: listActionBarPagePeggingProduct_MP
+    Component DataSetLevelPeggingProduct_MP
+    {
+      #keys: '[414702.1.291408742]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPeggingProduct_MP
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"浜у搧ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"搴撳瓨鐐笽D","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}}]'
+        ContextMenu: 'listContextMenuPeggingProduct_MP'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingProduct_MP_WebMenu_OnClick
+    {
+      #keys: '[414702.1.309521164]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[645.0.18569723]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listActionBarPagePeggingProduct_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listActionBarPagePeggingProduct_MP.def
new file mode 100644
index 0000000..66424ec
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listActionBarPagePeggingProduct_MP.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePeggingProduct_MP
+{
+  #keys: '[414702.1.291408739]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listContextMenuPeggingProduct_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listContextMenuPeggingProduct_MP.def
new file mode 100644
index 0000000..2a8c05a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listContextMenuPeggingProduct_MP.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component listContextMenuPeggingProduct_MP
+{
+  #keys: '[414702.1.291408744]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuSelectionAll
+    {
+      #keys: '[414702.1.308101396]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 3
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_pButton.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_pButton.def
new file mode 100644
index 0000000..ff6359c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_pButton.def
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+Component pButton
+{
+  #keys: '[414702.1.288412503]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component bCreate
+    {
+      #keys: '[414702.1.288443069]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'BOMB'
+        Label: '鍒涘缓Pegging浜у搧'
+        Taborder: 1
+      ]
+    }
+    Component bRunPeggingAlgorithm
+    {
+      #keys: '[414702.1.302382530]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'TREE'
+        Label: '杩愯Pegging绠楁硶'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_ListPeggingProduct_MP_MenuSelectionAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_ListPeggingProduct_MP_MenuSelectionAll_OnClick.def
new file mode 100644
index 0000000..e9aae6b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_ListPeggingProduct_MP_MenuSelectionAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListPeggingProduct_MP
+Response OnClick () id:Response_ListPeggingProduct_MP_MenuSelectionAll_OnClick
+{
+  #keys: '[414702.1.309596514]'
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingProduct_MP/Responsedef_ListPeggingProduct_MP_WebMenu_OnClick
+  Initiator: 'MenuSelectionAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bCreate_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bCreate_OnClick.def
new file mode 100644
index 0000000..c88c351
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bCreate_OnClick.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: pButton/bCreate
+Response OnClick () id:Response_pButton_bCreate_OnClick
+{
+  #keys: '[414702.1.288443717]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( GlobalOTDSOP ) and not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      form := construct( FormNavigationPanel );
+      form.ShowDockLeft();
+      
+      PeggingProduct_MP::CreateData( GlobalOTDSOP, DataHolderCheckedProduct.Data() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bRunPeggingAlgorithm_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bRunPeggingAlgorithm_OnClick.def
new file mode 100644
index 0000000..6218f0f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bRunPeggingAlgorithm_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: pButton/bRunPeggingAlgorithm
+Response OnClick () id:Response_pButton_bRunPeggingAlgorithm_OnClick
+{
+  #keys: '[414702.1.304801095]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      MacroPlan.RunPeggingAlgorithm();
+      
+      WebMessageBox::Success( "杩愯鎴愬姛锛�", true );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/_ROOT_Component_FormPeggingProduct_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/_ROOT_Component_FormPeggingProduct_MP.def
new file mode 100644
index 0000000..0cbaf23
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/_ROOT_Component_FormPeggingProduct_MP.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormPeggingProduct_MP
+{
+  #keys: '[414702.1.290901529]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: ListPeggingProduct_MP
+    #child: pButton
+  ]
+  Properties:
+  [
+    Image: 'ORANGE'
+    Title: 'Pegging浜у搧鍒嗘瀽'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_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
new file mode 100644
index 0000000..3dc3dec
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResult.def
@@ -0,0 +1,63 @@
+Quintiq file version 2.0
+Component ListPeggingResult
+{
+  #keys: '[414702.1.367969368]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPeggingResult
+    {
+      #keys: '[414702.1.367969369]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'PeggingProductInSalesDemandBase'
+        ExtractionMode: 'Selected'
+        FixedFilter: 'object.NumberOfPlies() = 0'
+        Source: 'ListPeggingProductInSalesDemandBase'
+        Taborder: 0
+        Transformation: 'PeggingResult'
+      ]
+    }
+    #child: listActionBarPagePeggingResult
+    Component DataSetLevelPeggingResult
+    {
+      #keys: '[414702.1.367969371]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPeggingResult
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PeggingProductInSalesDemandBase.SalesDemandBaseID","title":"璁㈠崟ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PeggingProductInSalesDemandBase.SalesDemandBaseID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"浜у搧ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"搴撳瓨鐐笽D","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"寮�濮嬫椂闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SupplyQuantity","title":"渚涘簲鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SupplyQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ActualFulfillmentQuantity","title":"瀹為檯闇�瑕佹暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ActualFulfillmentQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FulfillmentQuantity","title":"璁㈠崟闇�瑕佹暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FulfillmentQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SupplyType","title":"渚涘簲绫诲瀷","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SupplyType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasurementName","title":"鍗曚綅","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasurementName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NumberOfPlies","title":"灞傛暟","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NumberOfPlies"}}]'
+        ContextMenu: 'listContextMenuPeggingResult'
+        RelationFromParent: 'Child'
+        RelationRepeating: 'Child'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingResult_WebMenu_OnClick
+    {
+      #keys: '[414702.1.367969363]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[627.0.29218476]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_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
new file mode 100644
index 0000000..33f19b2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingResult.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePeggingResult
+{
+  #keys: '[414702.1.367969370]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
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
new file mode 100644
index 0000000..968020c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingResult.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component listContextMenuPeggingResult
+{
+  #keys: '[414702.1.367969372]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuSelectionAll
+    {
+      #keys: '[414702.1.367969373]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 3
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
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
new file mode 100644
index 0000000..bf29879
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResult_MenuSelectionAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListPeggingResult
+Response OnClick () id:Response_ListPeggingResult_MenuSelectionAll_OnClick
+{
+  #keys: '[414702.1.367969365]'
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingResult/Responsedef_ListPeggingResult_WebMenu_OnClick
+  Initiator: 'MenuSelectionAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
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
new file mode 100644
index 0000000..39af8e4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormPeggingResult
+{
+  #keys: '[414702.1.295031324]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelAbove
+    #child: PanelBelow
+  ]
+  Properties:
+  [
+    Image: 'CUP'
+    SizeableChildren: true
+    Title: 'Pegging缁撴灉'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_ListPriorityFactor.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_ListPriorityFactor.def
index 73da706..5241681 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_ListPriorityFactor.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_ListPriorityFactor.def
@@ -11,10 +11,10 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'structured[PriorityFactor]'
-        Source: 'DataHolderPriorityFactorSelect'
+        DataType: 'MacroPlan'
+        Source: 'MacroPlan'
         Taborder: 0
-        Transformation: 'Elements'
+        Transformation: 'PriorityFactor'
       ]
     }
     #child: listActionBarPagePriorityFactor
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def
index 7d29277..f0daed3 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def
@@ -16,6 +16,39 @@
         Title: '鍒濆鍖�'
       ]
     }
+    Component MenuNewPriorityFactor
+    {
+      #keys: '[414996.0.32331011]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'GEAR_ADD'
+        Taborder: 4
+        Title: 'New'
+      ]
+    }
+    Component MenuEditPriorityFactor
+    {
+      #keys: '[414996.0.32331061]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'GEAR_EDIT'
+        Taborder: 5
+        Title: 'Edit'
+      ]
+    }
+    Component MenuDeletePriorityFactor
+    {
+      #keys: '[414996.0.32331135]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'GEAR_DELETE'
+        Taborder: 6
+        Title: 'Delete'
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def
deleted file mode 100644
index e005ec6..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def
+++ /dev/null
@@ -1,17 +0,0 @@
-Quintiq file version 2.0
-#parent: DataHolderPriorityFactorSelect
-Response OnDataChanged () id:Response_FormPriorityFactor_DataHolderPriorityFactorSelect_OnDataChanged
-{
-  #keys: '[414382.0.593010798]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
-  QuillAction
-  {
-    Body:
-    [*
-      //data := selectset( MacroPlan,PriorityFactor,p,true);
-      //this.Data(&data);
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuDeletePriorityFactor_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuDeletePriorityFactor_OnClick.def
new file mode 100644
index 0000000..e344003
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuDeletePriorityFactor_OnClick.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: ListPriorityFactor
+Response OnClick (
+  structured[PriorityFactor] selection
+) id:Response_ListPriorityFactor_MenuDeletePriorityFactor_OnClick
+{
+  #keys: '[414996.0.35089240]'
+  CanBindMultiple: false
+  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuDeletePriorityFactor'
+  QuillAction
+  {
+    Body:
+    [*
+      number := WebMessageBox::Question( "Are you sure delete this priority factor?","Yes|No" );
+      if( number = 0 ){
+        traverse( selection,Elements,element){
+          element.Delete(); 
+        } 
+      }
+    *]
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuEditPriorityFactor_OnClick\043325.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuEditPriorityFactor_OnClick\043325.def"
new file mode 100644
index 0000000..e285f6a
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuEditPriorityFactor_OnClick\043325.def"
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListPriorityFactor
+Response OnClick (
+  PriorityFactor selection
+) id:Response_ListPriorityFactor_MenuEditPriorityFactor_OnClick_325
+{
+  #keys: '[414996.0.34858367]'
+  CanBindMultiple: false
+  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuEditPriorityFactor'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogEditPriorityFactor );
+      dlg.Edit( selection);
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuNewPriorityFactor_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuNewPriorityFactor_OnClick.def
new file mode 100644
index 0000000..0e5667a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuNewPriorityFactor_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListPriorityFactor
+Response OnClick (
+  PriorityFactor selection
+) id:Response_ListPriorityFactor_MenuNewPriorityFactor_OnClick
+{
+  #keys: '[414996.0.39511535]'
+  CanBindMultiple: false
+  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuNewPriorityFactor'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogEditPriorityFactorDetail );
+      dlg.New( selection );
+    *]
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnClick\043106.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnClick\043106.def"
index 071de46..a6fccd7 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnClick\043106.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnClick\043106.def"
@@ -11,8 +11,8 @@
   {
     Body:
     [*
-      detaisls := PriorityFactorDetails::GetDataByPriorityFactor( selection, MacroPlan);
-      DataHolderPriorityFactorDetailsSelect.Data(&detaisls);
+      //detaisls := PriorityFactorDetails::GetDataByPriorityFactor( selection, MacroPlan);
+      //DataHolderPriorityFactorDetailsSelect.Data(&detaisls);
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnSelectionChanged.def
index 235a322..3826228 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnSelectionChanged.def
@@ -11,9 +11,7 @@
   {
     Body:
     [*
-      info( "selecion change" );
-      detaisls := PriorityFactorDetails::GetDataByPriorityFactor( selection, MacroPlan);
-      DataHolderPriorityFactorDetailsSelect.Data(&detaisls);
+      DataHolderPriorityFactorSelect.Data(selection);
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_listContextMenuPriorityFactor_MenuNewPriorityFactor_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_listContextMenuPriorityFactor_MenuNewPriorityFactor_OnClick.def
new file mode 100644
index 0000000..564a038
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_listContextMenuPriorityFactor_MenuNewPriorityFactor_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: listContextMenuPriorityFactor/MenuNewPriorityFactor
+Response OnClick () id:Response_listContextMenuPriorityFactor_MenuNewPriorityFactor_OnClick
+{
+  #keys: '[414996.0.32331254]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogEditPriorityFactor );
+      dlg.New( MacroPlan,"");
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def
index 7c5dda8..5cd684b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def
@@ -11,22 +11,7 @@
     {
       #keys: '[414382.0.453562359]'
       BaseType: 'WebDataHolder'
-      Databinding: 'structured[PriorityFactor]*'
-      Children:
-      [
-        Component DataExtractorPriorityFactorSelect
-        {
-          #keys: '[414382.0.608512605]'
-          BaseType: 'WebDataExtractor'
-          Properties:
-          [
-            DataType: 'MacroPlan'
-            Source: 'MacroPlan'
-            Taborder: 0
-            Transformation: 'PriorityFactor'
-          ]
-        }
-      ]
+      Databinding: 'PriorityFactor'
       Properties:
       [
         Taborder: 1
@@ -48,7 +33,7 @@
     {
       #keys: '[414382.0.482103344]'
       BaseType: 'WebDataHolder'
-      Databinding: 'structured[PriorityFactorDetails]*'
+      Databinding: 'structured[PriorityFactorDetail]*'
       Properties:
       [
         Taborder: 3
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_ListPriorityFactorGrading.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_ListPriorityFactorGrading.def
index a28ed5d..4fed986 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_ListPriorityFactorGrading.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_ListPriorityFactorGrading.def
@@ -36,7 +36,7 @@
   ]
   Properties:
   [
-    Taborder: 1
+    Taborder: 2
   ]
   ResponseDefinitions:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listContextMenuPriorityFactorGrading.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listContextMenuPriorityFactorGrading.def
index 33b6aa3..dce2b3d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listContextMenuPriorityFactorGrading.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listContextMenuPriorityFactorGrading.def
@@ -3,6 +3,42 @@
 {
   #keys: '[414382.0.479530873]'
   BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuEditPriorityFactorGrading
+    {
+      #keys: '[414996.0.32342387]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'GEAR_EDIT'
+        Taborder: 4
+        Title: 'Edit'
+      ]
+    }
+    Component MenuDeletePriorityFactorGrading
+    {
+      #keys: '[414996.0.32342398]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'GEAR_DELETE'
+        Taborder: 5
+        Title: 'Delete'
+      ]
+    }
+    Component MenuNewPriorityFactorGrading
+    {
+      #keys: '[414996.0.40230778]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'GEAR_ADD'
+        Taborder: 3
+        Title: 'New'
+      ]
+    }
+  ]
   Properties:
   [
     Taborder: 0
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_DataHolderPriorityFactor_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_DataHolderPriorityFactor_OnDataChanged.def
new file mode 100644
index 0000000..1812bbc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_DataHolderPriorityFactor_OnDataChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: DataHolderPriorityFactor
+Response OnDataChanged () id:Response_FormPriorityFactorGrading_DataHolderPriorityFactor_OnDataChanged
+{
+  #keys: '[414996.0.32302660]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      if( not isnull( this.Data( ) )){
+        detaisls := PriorityFactorDetail::GetDataByPriorityFactor( this.Data( ), MacroPlan);
+        DataHolderPriorityFactorGrading.Data( &detaisls );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuDeletePriorityFactorGrading_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuDeletePriorityFactorGrading_OnClick.def
new file mode 100644
index 0000000..9470f26
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuDeletePriorityFactorGrading_OnClick.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: ListPriorityFactorGrading
+Response OnClick (
+  structured[PriorityFactorDetail] selction
+) id:Response_ListPriorityFactorGrading_MenuDeletePriorityFactorGrading_OnClick
+{
+  #keys: '[414996.0.36022233]'
+  CanBindMultiple: false
+  DefinitionID => /ListPriorityFactorGrading/Responsedef_ListPriorityFactorGrading_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuDeletePriorityFactorGrading'
+  QuillAction
+  {
+    Body:
+    [*
+      number := WebMessageBox::Question( "Are you sure delete this priority factor?","Yes|No" );
+      if( number = 0 ){
+        traverse( selction,Elements,element){
+          element.Delete(); 
+        } 
+      }
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuEditPriorityFactorGrading_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuEditPriorityFactorGrading_OnClick.def
new file mode 100644
index 0000000..8128f71
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuEditPriorityFactorGrading_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListPriorityFactorGrading
+Response OnClick (
+  PriorityFactorDetail selction
+) id:Response_ListPriorityFactorGrading_MenuEditPriorityFactorGrading_OnClick
+{
+  #keys: '[414996.0.32393877]'
+  CanBindMultiple: false
+  DefinitionID => /ListPriorityFactorGrading/Responsedef_ListPriorityFactorGrading_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuEditPriorityFactorGrading'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogEditPriorityFactorDetail );
+      dlg.Edit( selction );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuNewPriorityFactorGrading_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuNewPriorityFactorGrading_OnClick.def
new file mode 100644
index 0000000..2a27308
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuNewPriorityFactorGrading_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListPriorityFactorGrading
+Response OnClick () id:Response_ListPriorityFactorGrading_MenuNewPriorityFactorGrading_OnClick
+{
+  #keys: '[414996.0.42410722]'
+  CanBindMultiple: false
+  DefinitionID => /ListPriorityFactorGrading/Responsedef_ListPriorityFactorGrading_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuNewPriorityFactorGrading'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogEditPriorityFactorDetail );
+      dlg.New( DataHolderPriorityFactor.Data( ));
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/_ROOT_Component_FormPriorityFactorGrading.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/_ROOT_Component_FormPriorityFactorGrading.def
index b9ab15b..69c19f3 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/_ROOT_Component_FormPriorityFactorGrading.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/_ROOT_Component_FormPriorityFactorGrading.def
@@ -11,17 +11,28 @@
     {
       #keys: '[414382.0.478480902]'
       BaseType: 'WebDataHolder'
-      Databinding: 'structured[PriorityFactorDetails]*'
+      Databinding: 'structured[PriorityFactorDetail]*'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+    #child: ListPriorityFactorGrading
+    Component DataHolderPriorityFactor
+    {
+      #keys: '[414996.0.35059952]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'PriorityFactor'
       Children:
       [
-        Component DataExtractorPriorityFactorGrading
+        Component DataExtractorPriorityFactor
         {
-          #keys: '[414382.0.478480916]'
+          #keys: '[414996.0.35059968]'
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'structured[PriorityFactorDetails]'
-            Source: 'FormPriorityFactor.DataHolderPriorityFactorDetailsSelect'
+            DataType: 'PriorityFactor'
+            Source: 'FormPriorityFactor.DataHolderPriorityFactorSelect'
             Taborder: 0
           ]
         }
@@ -31,7 +42,6 @@
         Taborder: 0
       ]
     }
-    #child: ListPriorityFactorGrading
   ]
   Properties:
   [
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/Component_FrmCustomOrderSpliteRow/Component_Panel700.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_Panel700.def
new file mode 100644
index 0000000..48e7fae
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_Panel700.def
@@ -0,0 +1,39 @@
+Quintiq file version 2.0
+Component Panel700
+{
+  #keys: '[414724.0.286088539]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btn_OK_FCOS
+    {
+      #keys: '[414724.0.286088604]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Image: 'CHECKS'
+        Label: '纭畾'
+        Taborder: 0
+      ]
+    }
+    Component btn_Cancel_FCOS
+    {
+      #keys: '[414724.0.286088615]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Image: 'NAVIGATE_CROSS_ORANGE'
+        Label: '鍙栨秷'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_listActionBarPage229\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_listActionBarPage229\0431.def"
new file mode 100644
index 0000000..f67ee63
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_listActionBarPage229\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPage229 id:listActionBarPage229_1
+{
+  #keys: '[414724.0.290316538]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_listContextMenu950\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_listContextMenu950\0431.def"
new file mode 100644
index 0000000..434b4de
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_listContextMenu950\0431.def"
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component listContextMenu950 id:listContextMenu950_1
+{
+  #keys: '[414724.0.290316540]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component m_delete_list_SD
+    {
+      #keys: '[414724.0.312760935]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Description: '鍒犻櫎-鎷嗗垎鏄庣粏琛�'
+        Image: 'GARBAGE'
+        Taborder: 3
+        Title: '鍒犻櫎'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_list_SpliteDetails\043136.def" "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_list_SpliteDetails\043136.def"
new file mode 100644
index 0000000..5d0dd72
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_list_SpliteDetails\043136.def"
@@ -0,0 +1,61 @@
+Quintiq file version 2.0
+Component list_SpliteDetails id:list_SpliteDetails_136
+{
+  #keys: '[414724.0.290316536]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component de_splisteDetailsFCOS
+    {
+      #keys: '[414724.0.290316537]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'MacroPlan'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'S_DT_SpliteStruct'
+      ]
+    }
+    #child: listActionBarPage229_1
+    Component DataSetLevel583
+    {
+      #keys: '[414724.0.290316539]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenu950_1
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecastDate","title":"闇�姹傛棩鏈�","subtotals":"","tooltip":"","width":10,"display":"shown","editable":false,"attribute":"ForecastDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Qty","title":"鏁伴噺","subtotals":"","tooltip":"","width":8,"display":"shown","editable":true,"attribute":"Qty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SpliteReason","title":"鎷嗗垎鍘熷洜","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SpliteReason"}}]'
+        ContextMenu: 'listContextMenu950'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Description: '鎷嗗垎鏄庣粏'
+    MinimumRows: 6
+    Taborder: 1
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_list_SpliteDetails_136_WebMenu_OnClick
+    {
+      #keys: '[414724.0.312731020]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[593.0.13413230]'
+          Binding: 'list_SpliteDetails.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_pl_OperateBtns_FCOS.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_pl_OperateBtns_FCOS.def
new file mode 100644
index 0000000..9f635c7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_pl_OperateBtns_FCOS.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component pl_OperateBtns_FCOS
+{
+  #keys: '[414724.0.286058675]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: Panel700
+  ]
+  Properties:
+  [
+    Border: true
+    FixedSize: true
+    Taborder: 6
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_pl_function_FCOS.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_pl_function_FCOS.def
new file mode 100644
index 0000000..a59ba5b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_pl_function_FCOS.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component pl_function_FCOS
+{
+  #keys: '[414724.0.285282557]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btn_add_FCOS
+    {
+      #keys: '[414724.0.290316633]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Image: 'LINK_ADD'
+        Label: '棰勬媶琛�'
+        Taborder: 1
+        Visible: false
+      ]
+    }
+    Component lb_OrderID_FCOS id:lb_OrderID_FCOS_652
+    {
+      #keys: '[414724.0.290316653]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Description: '璁㈠崟ID'
+        Label: '璁㈠崟鍙凤細'
+        Taborder: 0
+        Text: '2021564445'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Border: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_pl_spliteDetails.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_pl_spliteDetails.def
new file mode 100644
index 0000000..8537261
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_pl_spliteDetails.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+Component pl_spliteDetails
+{
+  #keys: '[414724.0.294615998]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: list_SpliteDetails_136
+    Component Label130
+    {
+      #keys: '[414724.0.290316544]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '鎷嗚鏄庣粏锛�'
+        NumberOfColumns: 0
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 5
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_pl_splite_info.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_pl_splite_info.def
new file mode 100644
index 0000000..ed01ff6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Component_pl_splite_info.def
@@ -0,0 +1,50 @@
+Quintiq file version 2.0
+Component pl_splite_info
+{
+  #keys: '[414724.0.289968198]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ds_ForcastDate_FCOS id:ds_ForcastDate_FCOS_675
+    {
+      #keys: '[414724.0.289968265]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Label: '闇�姹傛椂闂达細'
+        Taborder: 0
+      ]
+    }
+    Component np_Qty_FCOS id:np_Qty_FCOS_656
+    {
+      #keys: '[414724.0.289968285]'
+      BaseType: 'WebNumberPicker'
+      Properties:
+      [
+        Label: '鏁伴噺锛�'
+        Min: '0'
+        PlaceHolder: '鏁伴噺涓嶅ぇ浜庤鍗曢噸閲�'
+        Step: 200
+        Taborder: 1
+      ]
+    }
+    Component btn_splite_add
+    {
+      #keys: '[414724.0.289968313]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Image: 'DOWN_PLUS'
+        Label: '鎷�'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_Panel700_btn_Cancel_FCOS_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_Panel700_btn_Cancel_FCOS_OnClick.def
new file mode 100644
index 0000000..a9de0e2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_Panel700_btn_Cancel_FCOS_OnClick.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: Panel700/btn_Cancel_FCOS
+Response OnClick () id:Response_Panel700_btn_Cancel_FCOS_OnClick
+{
+  #keys: '[414724.0.294294721]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      // 鎿嶄綔鎭㈠锛氬垹闄ゆ柊澧炵殑鎷嗗垎鎿嶄綔锛岃繕鍘熷垹闄ょ殑鎷嗗垎鎿嶄綔
+      OrderInfo:=dh_Paramer_FCOS.Data();
+      if( not isnull( OrderInfo))
+      {
+        SOrder:=null( S_DT_CustomOrder,constcontent );
+        // 寰楀埌鎵�鏈夋媶鍒嗘搷浣滆褰�
+        traverse( MacroPlan,S_DT_SpliteStruct,obj,obj.ID_S_DT_CustomOrder() = OrderInfo.ID())
+        {
+          SOrder:=select( MacroPlan,S_DT_CustomOrder,objSO,objSO.ID_SpliteStruct() = obj.ID());
+          // 鏃犲搴旂殑鎷嗗垎璁㈠崟锛岃涓烘柊澧炵殑鎿嶄綔锛岃繘琛岀Щ闄�
+          if( isnull( SOrder))
+          {
+              obj.Delete();
+          }
+          else
+          {
+            // 濡傛灉鐘舵�佷负鍒犻櫎鐘舵�侊紝鍒欐仮澶嶅垹闄�
+            if( obj.Status()=0)
+            {
+              obj.Status(1);
+            }
+          }
+        }  
+      }
+      
+      FrmCustomOrderSpliteRow.Close();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_Panel700_btn_OK_FCOS_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_Panel700_btn_OK_FCOS_OnClick.def
new file mode 100644
index 0000000..7106975
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_Panel700_btn_OK_FCOS_OnClick.def
@@ -0,0 +1,38 @@
+Quintiq file version 2.0
+#parent: Panel700/btn_OK_FCOS
+Response OnClick () id:Response_Panel700_btn_OK_FCOS_OnClick
+{
+  #keys: '[414724.0.294747709]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      // 浠庤鍗曡繘鍏ユ媶琛�
+      if( not isnull( dh_Paramer_FCOS.Data()))
+      {
+        // 灏嗚鍗曠Щ闄ゅ苟娣诲姞鍒伴鎷嗚璁㈠崟涓�
+        JResult := S_FunctionClass::SM_OrderToSpliteOrder( MacroPlan,dh_Paramer_FCOS.Data(),ef_SpliteReason_FCOS.Text());
+        if( JResult.Get( "Status").GetBoolean())
+        {
+          // 鐢熸垚鎷嗚璁㈠崟
+          FrmCustomOrderSpliteRow.Close();
+          if( JResult.Get( "Msg").GetString().Length()>0)
+          {
+            WebMessageBox::Information(JResult.Get( "Msg").GetString());
+          }
+        }
+        else
+        {
+          WebMessageBox::Warning(JResult.Get( "Msg").GetString());
+        }
+      }
+      else
+      {
+        // 鐢熸垚鎷嗚璁㈠崟  
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_dh_Paramer_FCOS_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_dh_Paramer_FCOS_OnDataChanged.def
new file mode 100644
index 0000000..adb671f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_dh_Paramer_FCOS_OnDataChanged.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: dh_Paramer_FCOS
+Response OnDataChanged () id:Response_FrmCustomOrderSpliteRow_dh_Paramer_FCOS_OnDataChanged
+{
+  #keys: '[414724.0.285614685]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      Form.lb_OrderID_FCOS().Text(this.Data().OrderID());
+      Form.lb_CustomName_FCOS().Text(this.Data().CustomerName());
+      Form.lb_OrderRowNum_FCOS().Text(this.Data().OrderLineID());
+      Form.ds_ForcastDate_FCOS().Date(this.Data().EndDate());
+      Form.de_splisteDetailsFCOS().FixedFilter( "object.ID_S_DT_CustomOrder() = " + this.Data().ID().AsQUILL() + "and object.Status()=1");
+      HQty:=sum( MacroPlan,S_DT_SpliteStruct,Obj,Obj.ID_S_DT_CustomOrder()=this.Data().ID() and Obj.Status()=1,Obj.Qty());
+      Form.np_Qty_FCOS().Max(this.Data().Quantity()-HQty);
+      Form.np_Qty_FCOS().Number(this.Data().Quantity()-HQty);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_dh_Paramer_SCustomOrder_FCOS_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_dh_Paramer_SCustomOrder_FCOS_OnDataChanged.def
new file mode 100644
index 0000000..613258e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_dh_Paramer_SCustomOrder_FCOS_OnDataChanged.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: dh_Paramer_SCustomOrder_FCOS
+Response OnDataChanged () id:Response_FrmCustomOrderSpliteRow_dh_Paramer_SCustomOrder_FCOS_OnDataChanged
+{
+  #keys: '[414724.0.303295647]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.lb_OrderID_FCOS().Text(this.Data().OrderID());
+      Form.lb_CustomName_FCOS().Text(this.Data().CustomerName());
+      Form.lb_OrderRowNum_FCOS().Text(this.Data().OrderLineID());
+      //Form.np_Qty_FCOS().Max(this.Data().Quantity());
+      //Form.np_Qty_FCOS().Number(this.Data().Quantity());
+      Form.ds_ForcastDate_FCOS().Date(this.Data().EndDate());
+      Form.de_splisteDetailsFCOS().FixedFilter( "object.OrderID() = " + this.Data().OrderID().AsQUILL());
+      HQty:=sum( MacroPlan,S_DT_SpliteStruct,Obj,Obj.OrderID()=this.Data().OrderID(),Obj.Qty());
+      Form.np_Qty_FCOS().Max(this.Data().Quantity()-HQty);
+      Form.np_Qty_FCOS().Number(this.Data().Quantity()-HQty);
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_list_SpliteDetails_136_m_delete_list_SD_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_list_SpliteDetails_136_m_delete_list_SD_OnClick.def
new file mode 100644
index 0000000..c28bb18
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_list_SpliteDetails_136_m_delete_list_SD_OnClick.def
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+#parent: list_SpliteDetails_136
+Response OnClick (
+  S_DT_SpliteStruct selection
+) id:Response_list_SpliteDetails_136_m_delete_list_SD_OnClick
+{
+  #keys: '[414724.0.314884983]'
+  CanBindMultiple: false
+  DefinitionID => /list_SpliteDetails_136/Responsedef_list_SpliteDetails_136_WebMenu_OnClick
+  Initiator: 'm_delete_list_SD'
+  Precondition:
+  [*
+    return not isnull( selection);
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      OrderInfo:=dh_Paramer_FCOS.Data();
+      if( isnull( OrderInfo))
+      {
+        WebMessageBox::Warning( "鎿嶄綔澶辫触锛岃閲嶆柊閫夋嫨璁㈠崟杩涜鎷嗚锛�");  
+      }
+      else
+      {
+        selection.Status(0);
+        Qty_Rows:=sum( MacroPlan,S_DT_SpliteStruct,obj,obj.ID_S_DT_CustomOrder()=OrderInfo.ID() and obj.Status()=1,obj.Qty());
+        Qty_Max:=0.0;
+        Qty_Max:= OrderInfo.Quantity()-Qty_Rows;      
+      
+        np_Qty_FCOS.Max(Qty_Max);
+        np_Qty_FCOS.Number(Qty_Max);
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_pl_function_FCOS_btn_add_FCOS_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_pl_function_FCOS_btn_add_FCOS_OnClick.def
new file mode 100644
index 0000000..7a88594
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_pl_function_FCOS_btn_add_FCOS_OnClick.def
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: pl_function_FCOS/btn_add_FCOS
+Response OnClick () id:Response_FrmCustomOrderSpliteRow_btn_add_FCOS_OnClick
+{
+  #keys: '[414724.0.290316632]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( dh_Paramer_FCOS.Data());
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      JResult := S_FunctionClass::SM_OrderToSpliteOrder( MacroPlan,dh_Paramer_FCOS.Data(),ef_SpliteReason_FCOS.Text());
+      if( JResult.Get( "Status").GetBoolean())
+      {
+        FrmCustomOrderSpliteRow.Close();
+        if( JResult.Get( "Msg").GetString().Length()>0)
+        {
+         WebMessageBox::Information(JResult.Get( "Msg").GetString());
+        }
+      }
+      else
+      {
+        WebMessageBox::Warning(JResult.Get( "Msg").GetString());
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_pl_splite_info_btn_splite_add_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_pl_splite_info_btn_splite_add_OnClick.def
new file mode 100644
index 0000000..906fd8b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/Response_pl_splite_info_btn_splite_add_OnClick.def
@@ -0,0 +1,51 @@
+Quintiq file version 2.0
+#parent: pl_splite_info/btn_splite_add
+Response OnClick () id:Response_pl_splite_info_btn_splite_add_OnClick
+{
+  #keys: '[414724.0.292801656]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( dh_Paramer_FCOS.Data());
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      // 鎷嗗垎涓�涓鍗�
+      SQty:=[Number]np_Qty_FCOS.Number().Round( 0);
+      if(SQty>0)
+      {
+        OrderInfo :=dh_Paramer_FCOS.Data();
+        MacroPlan.S_DT_SpliteStruct(relnew,ID := H_FunctionClass::SM_GenerateID( "OSR")
+                                            ,OrderID := OrderInfo.OrderID()
+                                            ,ID_S_DT_CustomOrder := OrderInfo.ID()
+                                            ,SpliteReason := ef_SpliteReason_FCOS.Text()
+                                            ,Qty :=SQty
+                                            ,Status := 1
+                                            ,ForecastDate:= ds_ForcastDate_FCOS.Date());
+        // 璁$畻鍓╀綑鎷嗗垎
+        LQty:= OrderInfo.Quantity()-sum(MacroPlan,S_DT_SpliteStruct,obj,obj.ID_S_DT_CustomOrder()=OrderInfo.ID() and obj.Status()=1,obj.Qty()) ;
+        np_Qty_FCOS.Max(LQty);
+        np_Qty_FCOS.Number(LQty);
+        if( np_Qty_FCOS.Max()=0)
+        {
+         WebMessageBox::Information( "璁㈠崟宸茬粡鍏ㄩ儴鎷嗗畬锛�");  
+        }
+      }
+      else
+      {
+        if( np_Qty_FCOS.Max()=0)
+        {
+         WebMessageBox::Information( "璁㈠崟宸茬粡鍏ㄩ儴鎷嗗畬锛�");  
+        }
+        else
+        {
+          WebMessageBox::Information( "璇疯皟鏁� 璁㈠崟鏁伴噺");  
+        }
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/_ROOT_Component_FrmCustomOrderSpliteRow.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/_ROOT_Component_FrmCustomOrderSpliteRow.def
new file mode 100644
index 0000000..770a0fc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderSpliteRow/_ROOT_Component_FrmCustomOrderSpliteRow.def
@@ -0,0 +1,102 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FrmCustomOrderSpliteRow
+{
+  #keys: '[414724.0.285177352]'
+  Accessibility: 'Extensible'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pl_function_FCOS
+    Component lb_OrderRowNum_FCOS
+    {
+      #keys: '[414724.0.285570507]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '璁㈠崟琛屽彿锛�'
+        Taborder: 1
+        Text: '1.1'
+      ]
+    }
+    Component lb_CustomName_FCOS
+    {
+      #keys: '[414724.0.284201013]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '瀹㈡埛鍚嶇О锛�'
+        Taborder: 2
+        Text: '--灏忕背'
+      ]
+    }
+    Component ef_SpliteReason_FCOS
+    {
+      #keys: '[414724.0.285687770]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        Label: '鎷嗚鍘熷洜锛�'
+        MaxRows: 3
+        Multiline: true
+        PlaceHolder: '璇峰綍鍏�'
+        Taborder: 3
+      ]
+    }
+    Component dh_Paramer_FCOS
+    {
+      #keys: '[414724.0.285920379]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'CustomerOrder'
+      Properties:
+      [
+        Taborder: 8
+      ]
+    }
+    #child: pl_OperateBtns_FCOS
+    #child: pl_splite_info
+    Component dh_splitestruct
+    {
+      #keys: '[414724.0.294099522]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[S_DT_SpliteStruct]*'
+      Children:
+      [
+        Component DataExtractor645
+        {
+          #keys: '[414724.0.293956350]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'S_DT_SpliteStruct'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 7
+      ]
+    }
+    #child: pl_spliteDetails
+    Component dh_Paramer_SCustomOrder_FCOS
+    {
+      #keys: '[414724.0.303602526]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'S_DT_CustomOrder'
+      Properties:
+      [
+        Taborder: 9
+      ]
+    }
+  ]
+  Properties:
+  [
+    Description: '璁㈠崟鎷嗚琛ㄥ崟'
+    Image: 'ARROW_FORK'
+    Title: '璁㈠崟鎷嗚'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_Panel651.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_Panel651.def
new file mode 100644
index 0000000..1b691ad
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_Panel651.def
@@ -0,0 +1,44 @@
+Quintiq file version 2.0
+Component Panel651
+{
+  #keys: '[414724.0.302810875]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btn_delete_FCOV id:btn_delete_FCOV_902
+    {
+      #keys: '[414724.0.302810937]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'GARBAGE'
+        Label: '鍒犻櫎'
+        Taborder: 0
+      ]
+      ResponseDefinitions:
+      [
+        ResponseDefinition OnClick id:Responsedef_Panel651_btn_delete_FCOV_902_OnClick
+        {
+          #keys: '[414724.0.303035901]'
+          IsInherited: false
+          ResponseType: 'OnClick'
+          Arguments:
+          [
+            ResponseDefinitionArgument selection
+            {
+              #keys: '[575.0.41049375]'
+              Binding: 'lisplitedetails.Selection()'
+            }
+          ]
+        }
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_Panel713.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_Panel713.def
new file mode 100644
index 0000000..79251c2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_Panel713.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+Component Panel713
+{
+  #keys: '[414724.0.302735923]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: lisplitedetails_450
+    #child: Panel651
+    Component Label963
+    {
+      #keys: '[414724.0.302811066]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '鎷嗚鏄庣粏锛�'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+    Visible: false
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_lisplitedetails\043450.def" "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_lisplitedetails\043450.def"
new file mode 100644
index 0000000..97938b2
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_lisplitedetails\043450.def"
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+Component lisplitedetails id:lisplitedetails_450
+{
+  #keys: '[414724.0.302735971]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component de_liSpliteDetails
+    {
+      #keys: '[414724.0.302735972]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'MacroPlan'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'S_DT_SpliteStruct'
+      ]
+    }
+    #child: listActionBarPage243_1
+    Component DataSetLevel404
+    {
+      #keys: '[414724.0.302735974]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenu199_1
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderID","title":"鍘熻鍗旾D","subtotals":"","tooltip":"","width":10,"display":"shown","editable":false,"attribute":"OrderID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecastDate","title":"闇�姹傛棩鏈�","subtotals":"","tooltip":"","width":8,"display":"shown","editable":false,"attribute":"ForecastDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Qty","title":"鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Qty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Status","title":"鐘舵��","subtotals":"","tooltip":"","width":6,"display":"shown","editable":false,"attribute":"Status"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SDateTime","title":"鍙戦�佽嚦ERP鏃堕棿","subtotals":"","tooltip":"","width":8,"display":"shown","editable":false,"attribute":"SDateTime"}}]'
+        ContextMenu: 'listContextMenu199'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    MinimumColumns: 5
+    Taborder: 2
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listActionBarPage243\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listActionBarPage243\0431.def"
new file mode 100644
index 0000000..abde5ea
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listActionBarPage243\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPage243 id:listActionBarPage243_1
+{
+  #keys: '[414724.0.302735973]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listActionBarPage978\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listActionBarPage978\0431.def"
new file mode 100644
index 0000000..2251089
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listActionBarPage978\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPage978 id:listActionBarPage978_1
+{
+  #keys: '[414724.0.300320629]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listContextMenu199\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listContextMenu199\0431.def"
new file mode 100644
index 0000000..48d83e2
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listContextMenu199\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenu199 id:listContextMenu199_1
+{
+  #keys: '[414724.0.302735975]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listContextMenu655\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listContextMenu655\0431.def"
new file mode 100644
index 0000000..89f84d3
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listContextMenu655\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenu655 id:listContextMenu655_1
+{
+  #keys: '[414724.0.300320631]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listOrders\043635.def" "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listOrders\043635.def"
new file mode 100644
index 0000000..d533832
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_listOrders\043635.def"
@@ -0,0 +1,54 @@
+Quintiq file version 2.0
+Component listOrders id:listOrders_635
+{
+  #keys: '[414724.0.300320627]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractor726
+    {
+      #keys: '[414724.0.300320628]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'MacroPlan'
+        FixedFilter: 'object.ParentID()=""'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'S_DT_CustomOrder'
+      ]
+    }
+    #child: listActionBarPage978_1
+    Component DataSetLevel439
+    {
+      #keys: '[414724.0.300320630]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenu655_1
+        Component DataSetLevel422
+        {
+          #keys: '[414724.0.315209998]'
+          BaseType: 'WebDataSetLevel'
+          Properties:
+          [
+            Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeAllConstraint","columnid":"All constraints","title":"All constraints","subtotals":"","tooltip":"","width":-1,"display":"shown"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"閿�鍞儴闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"搴撳瓨鐐�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"浜у搧","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"闇�姹傛棩鏈�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerID","title":"CustomerID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderID","title":"OrderID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderLineID","title":"OrderLineID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderLineID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"鍗曚綅","subtotals":"","tooltip":"","width":2,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SplitCount","title":"宸叉媶琛屾暟","subtotals":"","tooltip":"","width":3,"display":"shown","editable":false,"attribute":"SplitCount"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SpliteRenmain","title":"鍓╀綑鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SpliteRenmain"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SpliteReason","title":"鎷嗚鍘熷洜","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SpliteReason"}}]'
+            RelationFromParent: 'Parent'
+            RelationRepeating: 'Parent'
+            Taborder: 1
+          ]
+        }
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeAllConstraint","columnid":"All constraints","title":"All constraints","subtotals":"","tooltip":"","width":-1,"display":"shown"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"閿�鍞儴闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"搴撳瓨鐐�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"浜у搧","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"闇�姹傛棩鏈�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerID","title":"CustomerID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderID","title":"OrderID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderLineID","title":"OrderLineID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderLineID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"鍗曚綅","subtotals":"","tooltip":"","width":2,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SplitCount","title":"宸叉媶琛屾暟","subtotals":"","tooltip":"","width":3,"display":"shown","editable":false,"attribute":"SplitCount"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SpliteRenmain","title":"鍓╀綑鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SpliteRenmain"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SpliteReason","title":"鎷嗚鍘熷洜","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SpliteReason"}}]'
+        ContextMenu: 'listContextMenu655'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_pl_DataView.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_pl_DataView.def
new file mode 100644
index 0000000..60d10c1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_pl_DataView.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component pl_DataView
+{
+  #keys: '[414724.0.300320579]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: listOrders_635
+    #child: Panel713
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_pl_Function_FCOV.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_pl_Function_FCOV.def
new file mode 100644
index 0000000..9ebb689
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Component_pl_Function_FCOV.def
@@ -0,0 +1,114 @@
+Quintiq file version 2.0
+Component pl_Function_FCOV
+{
+  #keys: '[414724.0.295131518]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btn_sendERP_FCOV
+    {
+      #keys: '[414724.0.295131536]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Label: '鍙戦�佽嚦ERP'
+        Taborder: 0
+      ]
+    }
+    Component btn_huanyuan_FCOV
+    {
+      #keys: '[414724.0.295131559]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'ARROW_INTO'
+        Label: '杩樺師'
+        Taborder: 1
+      ]
+      ResponseDefinitions:
+      [
+        ResponseDefinition OnClick id:Responsedef_pl_Function_FCOV_btn_huanyuan_FCOV_OnClick
+        {
+          #keys: '[414724.0.303365423]'
+          IsInherited: false
+          ResponseType: 'OnClick'
+          Arguments:
+          [
+            ResponseDefinitionArgument selection
+            {
+              #keys: '[575.0.65737681]'
+              Binding: 'listOrders.Selection()'
+            }
+          ]
+        }
+      ]
+    }
+    Component btn_splitRow_FCOV
+    {
+      #keys: '[414724.0.295131572]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'GRAPH_FORK'
+        Label: '鎷嗚'
+        Taborder: 2
+      ]
+      ResponseDefinitions:
+      [
+        ResponseDefinition OnClick id:Responsedef_pl_Function_FCOV_btn_splitRow_FCOV_OnClick
+        {
+          #keys: '[414724.0.303295769]'
+          IsInherited: false
+          ResponseType: 'OnClick'
+          Arguments:
+          [
+            ResponseDefinitionArgument selection
+            {
+              #keys: '[575.0.74590107]'
+              Binding: 'listOrders.Selection()'
+            }
+          ]
+        }
+      ]
+    }
+    Component btn_deleteOrder_FCOV
+    {
+      #keys: '[414724.0.323807222]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Description: '鍒犻櫎瀛愯鍗曟寜閽�'
+        Image: 'GARBAGE'
+        Label: '鍒犻櫎'
+        Taborder: 3
+      ]
+      ResponseDefinitions:
+      [
+        ResponseDefinition OnClick id:Responsedef_pl_Function_FCOV_btn_deleteOrder_FCOV_OnClick
+        {
+          #keys: '[414724.0.323889224]'
+          IsInherited: false
+          ResponseType: 'OnClick'
+          Arguments:
+          [
+            ResponseDefinitionArgument selection
+            {
+              #keys: '[607.0.62176891]'
+              Binding: 'listOrders.Selection()'
+            }
+          ]
+        }
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Border: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_Panel651_btn_delete_FCOV_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_Panel651_btn_delete_FCOV_OnClick.def
new file mode 100644
index 0000000..9600271
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_Panel651_btn_delete_FCOV_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: Panel651/btn_delete_FCOV_902
+Response OnClick (
+  S_DT_SpliteStruct selection
+) id:Response_Panel651_btn_delete_FCOV_OnClick
+{
+  #keys: '[414724.0.302931548]'
+  CanBindMultiple: false
+  DefinitionID => /Panel651/Responsedef_Panel651_btn_delete_FCOV_902_OnClick
+  Precondition:
+  [*
+    return not isnull( selection);
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      selection.Delete();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_listOrders_635_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_listOrders_635_OnSelectionChanged.def
new file mode 100644
index 0000000..c1b8878
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_listOrders_635_OnSelectionChanged.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: listOrders_635
+Response OnSelectionChanged (
+  S_DT_CustomOrder selection
+) id:Response_listOrders_635_OnSelectionChanged
+{
+  #keys: '[414724.0.302697813]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      Form.de_liSpliteDetails().FixedFilter( "object.OrderID() = " + selection.OrderID().AsQUILL());
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_pl_Function_FCOV_btn_deleteOrder_FCOV_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_pl_Function_FCOV_btn_deleteOrder_FCOV_OnClick.def
new file mode 100644
index 0000000..db3389b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_pl_Function_FCOV_btn_deleteOrder_FCOV_OnClick.def
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+#parent: pl_Function_FCOV/btn_deleteOrder_FCOV
+Response OnClick (
+  S_DT_CustomOrder selection
+) id:Response_pl_Function_FCOV_btn_deleteOrder_FCOV_OnClick
+{
+  #keys: '[414724.0.321284302]'
+  CanBindMultiple: false
+  DefinitionID => /pl_Function_FCOV/Responsedef_pl_Function_FCOV_btn_deleteOrder_FCOV_OnClick
+  Precondition:
+  [*
+    return not isnull( selection) and selection.ParentID()<>"";
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      Num:=WebMessageBox::Question("纭鍒犻櫎锛�",true);
+      if( Num=0)
+      {
+        OrderInfo:=select( MacroPlan,SalesDemand.astype( CustomerOrder ),obj,obj.ID()=selection.ParentID());
+        SSI := select(MacroPlan,S_DT_SpliteStruct,obj,obj.ID() = selection.ID_SpliteStruct());
+        if( not isnull( SSI))
+        {
+          SSI.Status(0);
+        }
+        S_FunctionClass::SM_OrderToSpliteOrder( MacroPlan,OrderInfo,"");
+        if( not isnull( selection))
+        {
+          selection.Delete();
+        }
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_pl_Function_FCOV_btn_huanyuan_FCOV_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_pl_Function_FCOV_btn_huanyuan_FCOV_OnClick.def
new file mode 100644
index 0000000..73cacfd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_pl_Function_FCOV_btn_huanyuan_FCOV_OnClick.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+#parent: pl_Function_FCOV/btn_huanyuan_FCOV
+Response OnClick (
+  S_DT_CustomOrder selection
+) id:Response_pl_Function_FCOV_btn_huanyuan_FCOV_OnClick
+{
+  #keys: '[414724.0.303365693]'
+  CanBindMultiple: false
+  DefinitionID => /pl_Function_FCOV/Responsedef_pl_Function_FCOV_btn_huanyuan_FCOV_OnClick
+  Precondition:
+  [*
+    return not isnull( selection) and selection.ParentID()="";
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      Num:=WebMessageBox::Question(  "纭瑕佽繕鍘熸媶鍒嗚鍗曞悧锛�
+                                     
+                                     娉ㄦ剰锛氳繕鍘熷悗宸叉媶鍒嗙粨鏋滃皢琚竻绌�",true);
+      if(Num=0)
+      {
+        // 娓呯悊鎷嗗垎璁板綍琛�
+        traverse( MacroPlan,S_DT_SpliteStruct,obj,obj.ID_S_DT_CustomOrder()=selection.ID())
+        {
+          obj.Delete();  
+        }
+        // 娓呯悊鎷嗗垎璁㈠崟
+        traverse( MacroPlan,S_DT_CustomOrder,obj,obj.ParentID()=selection.ID())
+        {
+            obj.Delete();
+        }
+        // 娓呯悊璁㈠崟
+        selection.Delete();
+        WebMessageBox::Information( "璁㈠崟宸茬粡杩樺師");
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_pl_Function_FCOV_btn_sendERP_FCOV_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_pl_Function_FCOV_btn_sendERP_FCOV_OnClick.def
new file mode 100644
index 0000000..07696c8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_pl_Function_FCOV_btn_sendERP_FCOV_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: pl_Function_FCOV/btn_sendERP_FCOV
+Response OnClick () id:Response_pl_Function_FCOV_btn_sendERP_FCOV_OnClick
+{
+  #keys: '[414724.0.295170066]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      WebMessageBox::Information( "鍔熻兘灏氭湭瀹炵幇锛屼簨浠舵墽琛屾垚鍔燂紒");
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_pl_Function_FCOV_btn_splitRow_FCOV_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_pl_Function_FCOV_btn_splitRow_FCOV_OnClick.def
new file mode 100644
index 0000000..1f1e7af
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/Response_pl_Function_FCOV_btn_splitRow_FCOV_OnClick.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: pl_Function_FCOV/btn_splitRow_FCOV
+Response OnClick (
+  S_DT_CustomOrder selection
+) id:Response_pl_Function_FCOV_btn_splitRow_FCOV_OnClick
+{
+  #keys: '[414724.0.303198250]'
+  CanBindMultiple: false
+  DefinitionID => /pl_Function_FCOV/Responsedef_pl_Function_FCOV_btn_splitRow_FCOV_OnClick
+  Precondition:
+  [*
+    return not isnull( selection) and selection.ParentID()="";
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      frmOrderSplite := construct( FrmCustomOrderSpliteRow );
+      orderInfo:= select( MacroPlan,SalesDemand.astype(CustomerOrder ),obj,obj.ID()=selection.ID());
+      frmOrderSplite.dh_Paramer_FCOS().Data(orderInfo);
+      frmOrderSplite.ShowModal();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/_ROOT_Component_FrmCustomOrderView.def b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/_ROOT_Component_FrmCustomOrderView.def
new file mode 100644
index 0000000..466ad03
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmCustomOrderView/_ROOT_Component_FrmCustomOrderView.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FrmCustomOrderView
+{
+  #keys: '[414724.0.294851286]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pl_Function_FCOV
+    #child: pl_DataView
+  ]
+  Properties:
+  [
+    Description: '棰勬媶琛岀獥浣�'
+    Image: 'ARROW_FORK'
+    Title: '鎷嗚璁㈠崟'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Capacity___sale_budge.vw b/_Main/UI/MacroPlannerWebApp/Views/Capacity___sale_budge.vw
deleted file mode 100644
index 901e27f..0000000
--- a/_Main/UI/MacroPlannerWebApp/Views/Capacity___sale_budge.vw
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-{
-  viewcontents
-  {
-    image: 'CHART_HI_LO'
-    page: 'ActionBarPageScenarioComparison'
-    group: ''
-    index: 0
-    description: ''
-  }
-  formatversion: 2
-  id: 'Capacity___sale_budge'
-  name: 'Capacity & sale budge'
-  isglobal: false
-  isroot: true
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/PR_DATA.vw b/_Main/UI/MacroPlannerWebApp/Views/PR_DATA.vw
new file mode 100644
index 0000000..8a1455b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/PR_DATA.vw
@@ -0,0 +1,204 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormPRHistoryData
+      {
+        title: 'QTIANMA_JITUAN::FormPRHistoryData'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPRHistoryData'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 5
+          columnSpan: 8
+        }
+        components
+        {
+          FormPRHistoryData_PanelPRHistoryButton
+          {
+            sizeRatio: 1
+          }
+          FormPRHistoryData_ListPRHistoryData
+          {
+          }
+          FormPRHistoryData_DataSetLevelPRHistoryData
+          {
+            groupDepth: -1
+            column_BusinessType
+            {
+              columnId: 'BusinessType'
+              dataPath: 'BusinessType'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_MRPCalverNo
+            {
+              columnId: 'MRPCalverNo'
+              dataPath: 'MRPCalverNo'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_OrganCode
+            {
+              columnId: 'OrganCode'
+              dataPath: 'OrganCode'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'real'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_SendStatus
+            {
+              columnId: 'SendStatus'
+              dataPath: 'SendStatus'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_ReleaseBy
+            {
+              columnId: 'ReleaseBy'
+              dataPath: 'ReleaseBy'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_ReceiveStatus
+            {
+              columnId: 'ReceiveStatus'
+              dataPath: 'ReceiveStatus'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_ReceiveError
+            {
+              columnId: 'ReceiveError'
+              dataPath: 'ReceiveError'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPRData
+      {
+        title: 'QTIANMA_JITUAN::FormPRData'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPRData'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 1
+          columnSpan: 4
+        }
+        components
+        {
+          FormPRData_PanelPRDataButton
+          {
+            sizeRatio: 1
+          }
+          FormPRData_ListPRData
+          {
+          }
+          FormPRData_DataSetLevelPRData
+          {
+            groupDepth: -1
+            column_MRPCalverNo
+            {
+              columnId: 'MRPCalverNo'
+              dataPath: 'MRPCalverNo'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'real'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: 'ActionBarPageData'
+    group: ''
+    index: 0
+    image: 'BEAR'
+    description: 'PR鐢宠'
+  }
+  formatversion: 2
+  id: 'PR_DATA'
+  name: 'PR_DATA'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/Pegging\345\210\206\346\236\220.vw" "b/_Main/UI/MacroPlannerWebApp/Views/Pegging\345\210\206\346\236\220.vw"
new file mode 100644
index 0000000..7311b81
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/Pegging\345\210\206\346\236\220.vw"
@@ -0,0 +1,519 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormPeggingResult
+      {
+        title: 'QTIANMA_JITUAN::FormPeggingResult'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPeggingResult'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 26
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormPeggingResult_PanelAbove
+          {
+            sizeRatio: 0.956634174600973
+          }
+          FormPeggingResult_PanelLeft
+          {
+            sizeRatio: 0.432843330645635
+          }
+          FormPeggingResult_PanelPeggingResult570
+          {
+            sizeRatio: 1
+          }
+          FormPeggingResult_pButton
+          {
+            sizeRatio: 1
+          }
+          FormPeggingResult_ListPeggingProduct_MP
+          {
+          }
+          FormPeggingResult_DataSetLevelPeggingProduct_MP
+          {
+            groupDepth: -1
+            sort: 'ProductID'
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+          }
+          FormPeggingResult_PanelContent
+          {
+            sizeRatio: 1
+            activeChild: 'PanelSalesDemand'
+          }
+          FormPeggingResult_PanelSalesDemand
+          {
+            sizeRatio: 1
+          }
+          FormPeggingResult_ListPeggingProductInSalesDemandBase
+          {
+          }
+          FormPeggingResult_DataSetLevelPeggingProductInSalesDemandBase
+          {
+            groupDepth: -1
+            sort: 'StartDate'
+            column_SalesDemandBaseID
+            {
+              columnId: 'SalesDemandBaseID'
+              dataPath: 'SalesDemandBaseID'
+              dataType: 'string'
+              index: 0
+              subtotals: 'count'
+              width: 62
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 74
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'real'
+              index: 2
+              subtotals: 'sum'
+              width: 50
+            }
+            column_StartDate
+            {
+              columnId: 'StartDate'
+              dataPath: 'StartDate'
+              dataType: 'date'
+              index: 3
+              subtotals: ''
+              width: 83
+            }
+          }
+          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
+          {
+          }
+          FormPeggingResult_DataSetLevelPeggingResult
+          {
+            groupDepth: -1
+            sort: 'ProductID'
+            column_PeggingProductInSalesDemandBase_SalesDemandBaseID
+            {
+              columnId: 'PeggingProductInSalesDemandBase.SalesDemandBaseID'
+              dataPath: 'PeggingProductInSalesDemandBase.SalesDemandBaseID'
+              dataType: 'string'
+              index: 0
+              subtotals: 'count'
+              width: 122
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 164
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 92
+            }
+            column_StartDate
+            {
+              columnId: 'StartDate'
+              dataPath: 'StartDate'
+              dataType: 'date'
+              index: 3
+              subtotals: ''
+              width: 82
+            }
+            column_SupplyQuantity
+            {
+              columnId: 'SupplyQuantity'
+              dataPath: 'SupplyQuantity'
+              dataType: 'real'
+              index: 4
+              subtotals: ''
+              width: 86
+            }
+            column_ActualFulfillmentQuantity
+            {
+              columnId: 'ActualFulfillmentQuantity'
+              dataPath: 'ActualFulfillmentQuantity'
+              dataType: 'real'
+              index: 5
+              subtotals: ''
+              width: 97
+            }
+            column_FulfillmentQuantity
+            {
+              columnId: 'FulfillmentQuantity'
+              dataPath: 'FulfillmentQuantity'
+              dataType: 'real'
+              index: 6
+              subtotals: 'sum'
+              width: 108
+            }
+            column_SupplyType
+            {
+              columnId: 'SupplyType'
+              dataPath: 'SupplyType'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 78
+            }
+            column_UnitOfMeasurementName
+            {
+              columnId: 'UnitOfMeasurementName'
+              dataPath: 'UnitOfMeasurementName'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 50
+            }
+            column_NumberOfPlies
+            {
+              columnId: 'NumberOfPlies'
+              dataPath: 'NumberOfPlies'
+              dataType: 'number'
+              index: 9
+              subtotals: ''
+              width: 56
+            }
+          }
+          FormPeggingResult_ListPeggingResultProductInStockingPoint_MP
+          {
+          }
+          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'
+            column_PeggingProductInSalesDemandBase_SalesDemandBaseID
+            {
+              columnId: 'PeggingProductInSalesDemandBase.SalesDemandBaseID'
+              dataPath: 'PeggingProductInSalesDemandBase.SalesDemandBaseID'
+              dataType: 'string'
+              index: 0
+              subtotals: 'count'
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_StartDate
+            {
+              columnId: 'StartDate'
+              dataPath: 'StartDate'
+              dataType: 'date'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_SupplyQuantity
+            {
+              columnId: 'SupplyQuantity'
+              dataPath: 'SupplyQuantity'
+              dataType: 'real'
+              index: 4
+              subtotals: '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
+            }
+            column_FulfillmentQuantity
+            {
+              columnId: 'FulfillmentQuantity'
+              dataPath: 'FulfillmentQuantity'
+              dataType: 'real'
+              index: 5
+              subtotals: 'sum'
+              width: 150
+            }
+            column_SupplyType
+            {
+              columnId: 'SupplyType'
+              dataPath: 'SupplyType'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasurementName
+            {
+              columnId: 'UnitOfMeasurementName'
+              dataPath: 'UnitOfMeasurementName'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 0
+    image: 'VIEW'
+    description: ''
+  }
+  formatversion: 2
+  id: 'Pegging鍒嗘瀽'
+  name: '鍒嗘瀽Pegging'
+  isglobal: false
+  isroot: true
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/PriorityTest.vw b/_Main/UI/MacroPlannerWebApp/Views/PriorityTest.vw
index 68006ad..f338cc4 100644
--- a/_Main/UI/MacroPlannerWebApp/Views/PriorityTest.vw
+++ b/_Main/UI/MacroPlannerWebApp/Views/PriorityTest.vw
@@ -35,6 +35,26 @@
               width: 150
             }
           }
+          FormBusinessType_PanelBusinessType
+          {
+            sizeRatio: 1
+          }
+          FormBusinessType_ListOrganCode
+          {
+          }
+          FormBusinessType_DataSetLevelOrganCode
+          {
+            groupDepth: -1
+            column_OrganCodeName
+            {
+              columnId: 'OrganCodeName'
+              dataPath: 'OrganCodeName'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+          }
         }
       }
       form_FormPriorityResult
@@ -417,7 +437,7 @@
               dataType: 'real'
               index: 1
               subtotals: ''
-              width: 496
+              width: 71
             }
             column_Desc
             {
@@ -554,2187 +574,14 @@
           }
         }
       }
-      form_FormOptimizerPuzzles
-      {
-        title: 'Optimizer Puzzles'
-        shown: false
-        componentID: 'FormOptimizerPuzzles'
-        layout
-        {
-          mode: 'dockright'
-          index: 0
-        }
-        components
-        {
-          FormOptimizerPuzzles_ListOptimizerPuzzles
-          {
-          }
-          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 109
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              title: '鎻忚堪'
-              index: 2
-              subtotals: ''
-              width: 207
-            }
-          }
-        }
-      }
-      form_FormKPI
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 1
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormOptimizerPuzzles_1
-      {
-        title: 'Optimizer Puzzles'
-        shown: false
-        componentID: 'FormOptimizerPuzzles'
-        layout
-        {
-          mode: 'dockright'
-          index: 2
-        }
-        components
-        {
-          FormOptimizerPuzzles_ListOptimizerPuzzles
-          {
-          }
-          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 109
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              title: '鎻忚堪'
-              index: 2
-              subtotals: ''
-              width: 207
-            }
-          }
-        }
-      }
-      form_FormKPI_1
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 3
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormOptimizerPuzzles_2
-      {
-        title: 'Optimizer Puzzles'
-        shown: false
-        componentID: 'FormOptimizerPuzzles'
-        layout
-        {
-          mode: 'dockright'
-          index: 4
-        }
-        components
-        {
-          FormOptimizerPuzzles_ListOptimizerPuzzles
-          {
-          }
-          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 109
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              title: '鎻忚堪'
-              index: 2
-              subtotals: ''
-              width: 207
-            }
-          }
-        }
-      }
-      form_FormKPI_2
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 5
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormOptimizerPuzzles_3
-      {
-        title: 'Optimizer Puzzles'
-        shown: false
-        componentID: 'FormOptimizerPuzzles'
-        layout
-        {
-          mode: 'dockright'
-          index: 6
-        }
-        components
-        {
-          FormOptimizerPuzzles_ListOptimizerPuzzles
-          {
-          }
-          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 109
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              title: '鎻忚堪'
-              index: 2
-              subtotals: ''
-              width: 207
-            }
-          }
-        }
-      }
-      form_FormKPI_3
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 7
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormOptimizerPuzzles_4
-      {
-        title: 'Optimizer Puzzles'
-        shown: false
-        componentID: 'FormOptimizerPuzzles'
-        layout
-        {
-          mode: 'dockright'
-          index: 8
-        }
-        components
-        {
-          FormOptimizerPuzzles_ListOptimizerPuzzles
-          {
-          }
-          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 109
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              title: '鎻忚堪'
-              index: 2
-              subtotals: ''
-              width: 207
-            }
-          }
-        }
-      }
-      form_FormKPI_4
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 9
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormOptimizerPuzzles_5
-      {
-        title: 'Optimizer Puzzles'
-        shown: false
-        componentID: 'FormOptimizerPuzzles'
-        layout
-        {
-          mode: 'dockright'
-          index: 10
-        }
-        components
-        {
-          FormOptimizerPuzzles_ListOptimizerPuzzles
-          {
-          }
-          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 109
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              title: '鎻忚堪'
-              index: 2
-              subtotals: ''
-              width: 207
-            }
-          }
-        }
-      }
-      form_FormKPI_5
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 11
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormOptimizerPuzzles_6
-      {
-        title: 'Optimizer Puzzles'
-        shown: false
-        componentID: 'FormOptimizerPuzzles'
-        layout
-        {
-          mode: 'dockright'
-          index: 12
-        }
-        components
-        {
-          FormOptimizerPuzzles_ListOptimizerPuzzles
-          {
-          }
-          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 109
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              title: '鎻忚堪'
-              index: 2
-              subtotals: ''
-              width: 207
-            }
-          }
-        }
-      }
-      form_FormKPI_6
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 13
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormOptimizerPuzzles_7
-      {
-        title: 'Optimizer Puzzles'
-        shown: false
-        componentID: 'FormOptimizerPuzzles'
-        layout
-        {
-          mode: 'dockright'
-          index: 14
-        }
-        components
-        {
-          FormOptimizerPuzzles_ListOptimizerPuzzles
-          {
-          }
-          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 109
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              title: '鎻忚堪'
-              index: 2
-              subtotals: ''
-              width: 207
-            }
-          }
-        }
-      }
-      form_FormKPI_7
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 15
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormSanityCheck
-      {
-        title: 'Sanity Check'
-        shown: false
-        componentID: 'FormSanityCheck'
-        layout
-        {
-          mode: 'dockright'
-          index: 16
-        }
-        components
-        {
-          FormSanityCheck_PanelSanityCheckToolbar
-          {
-            sizeRatio: 1
-          }
-          FormSanityCheck_PanelSanityCheckContent
-          {
-            sizeRatio: 1
-          }
-          FormSanityCheck_PanelSanityCheckGroup
-          {
-            sizeRatio: 4
-          }
-          FormSanityCheck_ListSanityCheckGroup
-          {
-          }
-          FormSanityCheck_DataSetLevelSanityCheckGroup
-          {
-            groupDepth: -1
-            sort: 'DESC:IsShown,DESC:SanityCheckHighestCategory,DESC:_Expr3'
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Show
-            {
-              columnId: 'Show'
-              dataPath: 'Show'
-              dataType: 'string'
-              index: 1
-              subtotals: ''
-              width: 32
-            }
-            column_Category
-            {
-              columnId: 'Category'
-              dataPath: 'Category'
-              dataType: 'string'
-              index: 2
-              subtotals: ''
-              width: 32
-            }
-            column_Group
-            {
-              columnId: 'Group'
-              dataPath: 'Group'
-              dataType: 'string'
-              index: 3
-              subtotals: ''
-              width: 270
-            }
-            column__Expr3
-            {
-              columnId: '_Expr3'
-              dataPath: '_Expr3'
-              dataType: 'number'
-              index: 4
-              subtotals: ''
-              width: 95
-            }
-          }
-          FormSanityCheck_PanelSanityCheckMessage
-          {
-            sizeRatio: 5
-          }
-          FormSanityCheck_ListSanityCheckMessage
-          {
-          }
-          FormSanityCheck_DataSetLevelSanityCheckMessage
-          {
-            groupDepth: -1
-            sort: 'DESC:IsShown,SanityCheckGroup.Type,SanityCheckGroup.Group,Description'
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Show
-            {
-              columnId: 'Show'
-              dataPath: 'Show'
-              dataType: 'string'
-              index: 1
-              subtotals: ''
-              width: 32
-            }
-            column_Category
-            {
-              columnId: 'Category'
-              dataPath: 'Category'
-              dataType: 'string'
-              index: 2
-              subtotals: ''
-              width: 32
-            }
-            column_Messages
-            {
-              columnId: 'Messages'
-              dataPath: 'Messages'
-              dataType: 'string'
-              index: 3
-              subtotals: ''
-              width: 32
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              index: 4
-              subtotals: ''
-              width: 585
-            }
-          }
-        }
-      }
-      form_FormOptimizerPuzzles_8
-      {
-        title: 'Optimizer Puzzles'
-        shown: false
-        componentID: 'FormOptimizerPuzzles'
-        layout
-        {
-          mode: 'dockright'
-          index: 17
-        }
-        components
-        {
-          FormOptimizerPuzzles_ListOptimizerPuzzles
-          {
-          }
-          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 109
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              title: '鎻忚堪'
-              index: 2
-              subtotals: ''
-              width: 207
-            }
-          }
-        }
-      }
-      form_FormKPI_8
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 18
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormOptimizerPuzzles_9
-      {
-        title: 'Optimizer Puzzles'
-        shown: false
-        componentID: 'FormOptimizerPuzzles'
-        layout
-        {
-          mode: 'dockright'
-          index: 19
-        }
-        components
-        {
-          FormOptimizerPuzzles_ListOptimizerPuzzles
-          {
-          }
-          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 109
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              title: '鎻忚堪'
-              index: 2
-              subtotals: ''
-              width: 207
-            }
-          }
-        }
-      }
-      form_FormKPI_9
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 20
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormOptimizerPuzzles_10
-      {
-        title: 'Optimizer Puzzles'
-        shown: false
-        componentID: 'FormOptimizerPuzzles'
-        layout
-        {
-          mode: 'dockright'
-          index: 21
-        }
-        components
-        {
-          FormOptimizerPuzzles_ListOptimizerPuzzles
-          {
-          }
-          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 109
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              title: '鎻忚堪'
-              index: 2
-              subtotals: ''
-              width: 207
-            }
-          }
-        }
-      }
-      form_FormKPI_10
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 22
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormOptimizerPuzzles_11
-      {
-        title: 'Optimizer Puzzles'
-        shown: false
-        componentID: 'FormOptimizerPuzzles'
-        layout
-        {
-          mode: 'dockright'
-          index: 23
-        }
-        components
-        {
-          FormOptimizerPuzzles_ListOptimizerPuzzles
-          {
-          }
-          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 109
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              title: '鎻忚堪'
-              index: 2
-              subtotals: ''
-              width: 207
-            }
-          }
-        }
-      }
-      form_FormKPI_11
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 24
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormOptimizerPuzzles_12
-      {
-        title: 'Optimizer Puzzles'
-        shown: false
-        componentID: 'FormOptimizerPuzzles'
-        layout
-        {
-          mode: 'dockright'
-          index: 25
-        }
-        components
-        {
-          FormOptimizerPuzzles_ListOptimizerPuzzles
-          {
-          }
-          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 109
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              title: '鎻忚堪'
-              index: 2
-              subtotals: ''
-              width: 207
-            }
-          }
-        }
-      }
-      form_FormKPI_12
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 26
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormOptimizerPuzzles_13
-      {
-        title: 'Optimizer Puzzles'
-        shown: false
-        componentID: 'FormOptimizerPuzzles'
-        layout
-        {
-          mode: 'dockright'
-          index: 27
-        }
-        components
-        {
-          FormOptimizerPuzzles_ListOptimizerPuzzles
-          {
-          }
-          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 109
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              title: '鎻忚堪'
-              index: 2
-              subtotals: ''
-              width: 207
-            }
-          }
-        }
-      }
-      form_FormKPI_13
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 28
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormOptimizerPuzzles_14
-      {
-        title: 'Optimizer Puzzles'
-        shown: false
-        componentID: 'FormOptimizerPuzzles'
-        layout
-        {
-          mode: 'dockright'
-          index: 29
-        }
-        components
-        {
-          FormOptimizerPuzzles_ListOptimizerPuzzles
-          {
-          }
-          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 109
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              title: '鎻忚堪'
-              index: 2
-              subtotals: ''
-              width: 207
-            }
-          }
-        }
-      }
-      form_FormKPI_14
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 30
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormOptimizerPuzzles_15
-      {
-        title: 'Optimizer Puzzles'
-        shown: false
-        componentID: 'FormOptimizerPuzzles'
-        layout
-        {
-          mode: 'dockright'
-          index: 31
-        }
-        components
-        {
-          FormOptimizerPuzzles_ListOptimizerPuzzles
-          {
-          }
-          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 109
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              title: '鎻忚堪'
-              index: 2
-              subtotals: ''
-              width: 207
-            }
-          }
-        }
-      }
-      form_FormKPI_15
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 32
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormSanityCheck_1
-      {
-        title: 'Sanity Check'
-        shown: false
-        componentID: 'FormSanityCheck'
-        layout
-        {
-          mode: 'dockright'
-          index: 33
-        }
-        components
-        {
-          FormSanityCheck_PanelSanityCheckToolbar
-          {
-            sizeRatio: 1
-          }
-          FormSanityCheck_PanelSanityCheckContent
-          {
-            sizeRatio: 1
-          }
-          FormSanityCheck_PanelSanityCheckGroup
-          {
-            sizeRatio: 4
-          }
-          FormSanityCheck_ListSanityCheckGroup
-          {
-          }
-          FormSanityCheck_DataSetLevelSanityCheckGroup
-          {
-            groupDepth: -1
-            sort: 'DESC:IsShown,DESC:SanityCheckHighestCategory,DESC:_Expr3'
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Show
-            {
-              columnId: 'Show'
-              dataPath: 'Show'
-              dataType: 'string'
-              index: 1
-              subtotals: ''
-              width: 32
-            }
-            column_Category
-            {
-              columnId: 'Category'
-              dataPath: 'Category'
-              dataType: 'string'
-              index: 2
-              subtotals: ''
-              width: 32
-            }
-            column_Group
-            {
-              columnId: 'Group'
-              dataPath: 'Group'
-              dataType: 'string'
-              index: 3
-              subtotals: ''
-              width: 270
-            }
-            column__Expr3
-            {
-              columnId: '_Expr3'
-              dataPath: '_Expr3'
-              dataType: 'number'
-              index: 4
-              subtotals: ''
-              width: 95
-            }
-          }
-          FormSanityCheck_PanelSanityCheckMessage
-          {
-            sizeRatio: 5
-          }
-          FormSanityCheck_ListSanityCheckMessage
-          {
-          }
-          FormSanityCheck_DataSetLevelSanityCheckMessage
-          {
-            groupDepth: -1
-            sort: 'DESC:IsShown,SanityCheckGroup.Type,SanityCheckGroup.Group,Description'
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Show
-            {
-              columnId: 'Show'
-              dataPath: 'Show'
-              dataType: 'string'
-              index: 1
-              subtotals: ''
-              width: 32
-            }
-            column_Category
-            {
-              columnId: 'Category'
-              dataPath: 'Category'
-              dataType: 'string'
-              index: 2
-              subtotals: ''
-              width: 32
-            }
-            column_Messages
-            {
-              columnId: 'Messages'
-              dataPath: 'Messages'
-              dataType: 'string'
-              index: 3
-              subtotals: ''
-              width: 32
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              index: 4
-              subtotals: ''
-              width: 585
-            }
-          }
-        }
-      }
-      form_FormKPI_16
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 34
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Metals_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
-              Food_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
-              Empty_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 0
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormKPI_17
-      {
-        title: 'KPI Dashboard'
-        shown: false
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 35
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPIDashboard'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Metals_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
-              Food_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
-              Empty_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 0
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-      form_FormPriorities
-      {
-        title: 'Priorities'
-        shown: true
-        componentID: 'FormPriorities'
-        layout
-        {
-          mode: 'dockright'
-          index: 36
-        }
-        components
-        {
-          FormPriorities_ListPriority
-          {
-          }
-          FormPriorities_DataSetLevelPriority
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_ImgHasSalesDemand
-            {
-              columnId: 'ImgHasSalesDemand'
-              dataPath: 'ImgHasSalesDemand'
-              dataType: 'string'
-              index: 1
-              subtotals: ''
-              width: 30
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              index: 2
-              subtotals: ''
-              width: 95
-            }
-            column_Weight
-            {
-              columnId: 'Weight'
-              dataPath: 'Weight'
-              dataType: 'real'
-              index: 3
-              subtotals: ''
-              width: 95
-            }
-          }
-        }
-      }
     }
     userconfigurableinformation
     {
     }
+    index: 0
+    image: ''
     page: ''
     group: ''
-    index: 15
-    image: ''
     description: ''
   }
   formatversion: 2
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\345\205\250\345\261\200\345\217\202\346\225\260.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\345\205\250\345\261\200\345\217\202\346\225\260.vw"
new file mode 100644
index 0000000..3e9b9c2
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\345\205\250\345\261\200\345\217\202\346\225\260.vw"
@@ -0,0 +1,351 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_legacy_1
+      {
+        title: 'Scenario manager'
+        shown: true
+        componentID: 'FormScenarioManager'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormScenarioManager_ListScenario
+          {
+          }
+          FormScenarioManager_DataSetLevelScenario
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 90
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 277
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 2
+              subtotals: ''
+              width: 106
+            }
+            column_ChangedOn
+            {
+              columnId: 'ChangedOn'
+              dataPath: 'ChangedOn'
+              dataType: 'datetime'
+              title: 'Changed on'
+              index: 3
+              subtotals: ''
+              width: 99
+            }
+            column_StorageMode
+            {
+              columnId: 'StorageMode'
+              dataPath: 'StorageMode'
+              dataType: 'string'
+              title: 'StorageMode'
+              index: 4
+              subtotals: ''
+              width: 40
+            }
+          }
+        }
+      }
+      form_legacy_2
+      {
+        title: 'Assumptions'
+        shown: true
+        componentID: 'FormAssumptions'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 9
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormAssumptions_ListAssumptions
+          {
+          }
+          FormAssumptions_DataSetLevelAssumptions
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              title: '绫诲埆'
+              index: 1
+              subtotals: ''
+              width: 108
+            }
+            column_Importance
+            {
+              columnId: 'Importance'
+              dataPath: 'Importance'
+              dataType: 'string'
+              title: '閲嶈鎬�'
+              index: 2
+              subtotals: ''
+              width: 110
+            }
+            column_Title
+            {
+              columnId: 'Title'
+              dataPath: 'Title'
+              dataType: 'string'
+              title: '鏍囬'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_CreatedOn
+            {
+              columnId: 'CreatedOn'
+              dataPath: 'CreatedOn'
+              dataType: 'datetime'
+              title: 'Created on'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormScenariosKPIsComparison
+      {
+        title: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        shown: true
+        componentID: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 6
+          columnSpan: 7
+        }
+        components
+        {
+          FormScenariosKPIsComparison_MatrixEditorFinancialKPIs
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison.MatrixEditorFinancialKPIs'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_DisplayValue
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DisplayValue'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: ''
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'KPISetting.DisplayIndex'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI
+      {
+        title: 'KPI Dashboard'
+        shown: true
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 1
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: 'applicationDevelopmentActionBarPageDef'
+    group: ''
+    index: 4
+    image: 'EARTH2'
+    description: ''
+  }
+  formatversion: 2
+  id: '鍏ㄥ眬鍙傛暟'
+  name: '鍏ㄥ眬鍙傛暟'
+  isglobal: false
+  isroot: true
+}
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 64db9ed..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"
@@ -12,495 +12,59 @@
         layout
         {
           mode: 'open'
-          rowPosition: 1
-          rowSpan: 4
+          rowPosition: 6
+          rowSpan: 8
           columnPosition: 1
-          columnSpan: 2
+          columnSpan: 12
         }
         components
         {
+          FormCapacityAndSaleBudge_pButton
+          {
+            sizeRatio: 1
+          }
           FormCapacityAndSaleBudge_ListCapacityAndSaleBudge
           {
           }
           FormCapacityAndSaleBudge_DataSetLevelCapacityAndSaleBudge
           {
             groupDepth: -1
-            column_Deleted
-            {
-              columnId: 'Deleted'
-              dataPath: 'Deleted'
-              dataType: 'boolean'
-              index: 0
-              subtotals: ''
-              width: 150
-            }
-            column_YearNo
-            {
-              columnId: 'YearNo'
-              dataPath: 'YearNo'
-              dataType: 'number'
-              index: 1
-              subtotals: ''
-              width: 150
-            }
-            column_OrgCode
-            {
-              columnId: 'OrgCode'
-              dataPath: 'OrgCode'
-              dataType: 'string'
-              index: 2
-              subtotals: ''
-              width: 150
-            }
-            column_DisplayTechnology
-            {
-              columnId: 'DisplayTechnology'
-              dataPath: 'DisplayTechnology'
-              dataType: 'string'
-              index: 3
-              subtotals: ''
-              width: 150
-            }
+            sort: 'YearNo,ProductID'
             column_BusinessType
             {
               columnId: 'BusinessType'
               dataPath: 'BusinessType'
               dataType: 'string'
-              index: 4
+              index: 0
               subtotals: ''
-              width: 150
+              width: 107
             }
-            column_LineAndSpecification
+            column_ProductID
             {
-              columnId: 'LineAndSpecification'
-              dataPath: 'LineAndSpecification'
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
               dataType: 'string'
-              index: 5
+              index: 1
               subtotals: ''
-              width: 150
+              width: 178
             }
-            column_ProductCode
+            column_OrganCode
             {
-              columnId: 'ProductCode'
-              dataPath: 'ProductCode'
+              columnId: 'OrganCode'
+              dataPath: 'OrganCode'
               dataType: 'string'
-              index: 6
+              index: 2
               subtotals: ''
-              width: 150
+              width: 98
             }
-            column_PlaceOfProductionOfArray
+            column_YearNo
             {
-              columnId: 'PlaceOfProductionOfArray'
-              dataPath: 'PlaceOfProductionOfArray'
+              columnId: 'YearNo'
+              dataPath: 'YearNo'
               dataType: 'string'
-              index: 7
+              index: 3
               subtotals: ''
-              width: 150
-            }
-            column_PlaceOfProductionOfEvaporation
-            {
-              columnId: 'PlaceOfProductionOfEvaporation'
-              dataPath: 'PlaceOfProductionOfEvaporation'
-              dataType: 'string'
-              index: 8
-              subtotals: ''
-              width: 150
-            }
-            column_Resolution
-            {
-              columnId: 'Resolution'
-              dataPath: 'Resolution'
-              dataType: 'string'
-              index: 9
-              subtotals: ''
-              width: 150
-            }
-            column_ShippingForm
-            {
-              columnId: 'ShippingForm'
-              dataPath: 'ShippingForm'
-              dataType: 'string'
-              index: 10
-              subtotals: ''
-              width: 150
-            }
-            column_NumberOfCut
-            {
-              columnId: 'NumberOfCut'
-              dataPath: 'NumberOfCut'
-              dataType: 'string'
-              index: 11
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityEquivalent
-            {
-              columnId: 'CapacityEquivalent'
-              dataPath: 'CapacityEquivalent'
-              dataType: 'string'
-              index: 12
-              subtotals: ''
-              width: 150
-            }
-            column_NumberOfMask
-            {
-              columnId: 'NumberOfMask'
-              dataPath: 'NumberOfMask'
-              dataType: 'string'
-              index: 13
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInPCSInMonth1
-            {
-              columnId: 'CapacityInPCSInMonth1'
-              dataPath: 'CapacityInPCSInMonth1'
-              dataType: 'real'
-              index: 14
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInPCSInMonth2
-            {
-              columnId: 'CapacityInPCSInMonth2'
-              dataPath: 'CapacityInPCSInMonth2'
-              dataType: 'real'
-              index: 15
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInPCSInMonth3
-            {
-              columnId: 'CapacityInPCSInMonth3'
-              dataPath: 'CapacityInPCSInMonth3'
-              dataType: 'real'
-              index: 16
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInPCSInMonth4
-            {
-              columnId: 'CapacityInPCSInMonth4'
-              dataPath: 'CapacityInPCSInMonth4'
-              dataType: 'real'
-              index: 17
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInPCSInMonth5
-            {
-              columnId: 'CapacityInPCSInMonth5'
-              dataPath: 'CapacityInPCSInMonth5'
-              dataType: 'real'
-              index: 18
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInPCSInMonth6
-            {
-              columnId: 'CapacityInPCSInMonth6'
-              dataPath: 'CapacityInPCSInMonth6'
-              dataType: 'real'
-              index: 19
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInPCSInMonth7
-            {
-              columnId: 'CapacityInPCSInMonth7'
-              dataPath: 'CapacityInPCSInMonth7'
-              dataType: 'real'
-              index: 20
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInPCSInMonth8
-            {
-              columnId: 'CapacityInPCSInMonth8'
-              dataPath: 'CapacityInPCSInMonth8'
-              dataType: 'real'
-              index: 21
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInPCSInMonth9
-            {
-              columnId: 'CapacityInPCSInMonth9'
-              dataPath: 'CapacityInPCSInMonth9'
-              dataType: 'real'
-              index: 22
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInPCSInMonth10
-            {
-              columnId: 'CapacityInPCSInMonth10'
-              dataPath: 'CapacityInPCSInMonth10'
-              dataType: 'real'
-              index: 23
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInPCSInMonth11
-            {
-              columnId: 'CapacityInPCSInMonth11'
-              dataPath: 'CapacityInPCSInMonth11'
-              dataType: 'real'
-              index: 24
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInPCSInMonth12
-            {
-              columnId: 'CapacityInPCSInMonth12'
-              dataPath: 'CapacityInPCSInMonth12'
-              dataType: 'real'
-              index: 25
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInPCSTotal
-            {
-              columnId: 'CapacityInPCSTotal'
-              dataPath: 'CapacityInPCSTotal'
-              dataType: 'real'
-              index: 26
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInSheetInMonth1
-            {
-              columnId: 'CapacityInSheetInMonth1'
-              dataPath: 'CapacityInSheetInMonth1'
-              dataType: 'real'
-              index: 27
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInSheetInMonth2
-            {
-              columnId: 'CapacityInSheetInMonth2'
-              dataPath: 'CapacityInSheetInMonth2'
-              dataType: 'real'
-              index: 28
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInSheetInMonth3
-            {
-              columnId: 'CapacityInSheetInMonth3'
-              dataPath: 'CapacityInSheetInMonth3'
-              dataType: 'real'
-              index: 29
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInSheetInMonth4
-            {
-              columnId: 'CapacityInSheetInMonth4'
-              dataPath: 'CapacityInSheetInMonth4'
-              dataType: 'real'
-              index: 30
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInSheetInMonth5
-            {
-              columnId: 'CapacityInSheetInMonth5'
-              dataPath: 'CapacityInSheetInMonth5'
-              dataType: 'real'
-              index: 31
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInSheetInMonth6
-            {
-              columnId: 'CapacityInSheetInMonth6'
-              dataPath: 'CapacityInSheetInMonth6'
-              dataType: 'real'
-              index: 32
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInSheetInMonth7
-            {
-              columnId: 'CapacityInSheetInMonth7'
-              dataPath: 'CapacityInSheetInMonth7'
-              dataType: 'real'
-              index: 33
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInSheetInMonth8
-            {
-              columnId: 'CapacityInSheetInMonth8'
-              dataPath: 'CapacityInSheetInMonth8'
-              dataType: 'real'
-              index: 34
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInSheetInMonth9
-            {
-              columnId: 'CapacityInSheetInMonth9'
-              dataPath: 'CapacityInSheetInMonth9'
-              dataType: 'real'
-              index: 35
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInSheetInMonth10
-            {
-              columnId: 'CapacityInSheetInMonth10'
-              dataPath: 'CapacityInSheetInMonth10'
-              dataType: 'real'
-              index: 36
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInSheetInMonth11
-            {
-              columnId: 'CapacityInSheetInMonth11'
-              dataPath: 'CapacityInSheetInMonth11'
-              dataType: 'real'
-              index: 37
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInSheetInMonth12
-            {
-              columnId: 'CapacityInSheetInMonth12'
-              dataPath: 'CapacityInSheetInMonth12'
-              dataType: 'real'
-              index: 38
-              subtotals: ''
-              width: 150
-            }
-            column_CapacityInSheetTotal
-            {
-              columnId: 'CapacityInSheetTotal'
-              dataPath: 'CapacityInSheetTotal'
-              dataType: 'real'
-              index: 39
-              subtotals: ''
-              width: 150
-            }
-            column_SaleAmountInMonth1
-            {
-              columnId: 'SaleAmountInMonth1'
-              dataPath: 'SaleAmountInMonth1'
-              dataType: 'real'
-              index: 40
-              subtotals: ''
-              width: 150
-            }
-            column_SaleAmountInMonth2
-            {
-              columnId: 'SaleAmountInMonth2'
-              dataPath: 'SaleAmountInMonth2'
-              dataType: 'real'
-              index: 41
-              subtotals: ''
-              width: 150
-            }
-            column_SaleAmountInMonth3
-            {
-              columnId: 'SaleAmountInMonth3'
-              dataPath: 'SaleAmountInMonth3'
-              dataType: 'real'
-              index: 42
-              subtotals: ''
-              width: 150
-            }
-            column_SaleAmountInMonth5
-            {
-              columnId: 'SaleAmountInMonth5'
-              dataPath: 'SaleAmountInMonth5'
-              dataType: 'real'
-              index: 43
-              subtotals: ''
-              width: 150
-            }
-            column_SaleAmountInMonth4
-            {
-              columnId: 'SaleAmountInMonth4'
-              dataPath: 'SaleAmountInMonth4'
-              dataType: 'real'
-              index: 44
-              subtotals: ''
-              width: 150
-            }
-            column_SaleAmountInMonth6
-            {
-              columnId: 'SaleAmountInMonth6'
-              dataPath: 'SaleAmountInMonth6'
-              dataType: 'real'
-              index: 45
-              subtotals: ''
-              width: 150
-            }
-            column_SaleAmountInMonth7
-            {
-              columnId: 'SaleAmountInMonth7'
-              dataPath: 'SaleAmountInMonth7'
-              dataType: 'real'
-              index: 46
-              subtotals: ''
-              width: 150
-            }
-            column_SaleAmountInMonth8
-            {
-              columnId: 'SaleAmountInMonth8'
-              dataPath: 'SaleAmountInMonth8'
-              dataType: 'real'
-              index: 47
-              subtotals: ''
-              width: 150
-            }
-            column_SaleAmountInMonth9
-            {
-              columnId: 'SaleAmountInMonth9'
-              dataPath: 'SaleAmountInMonth9'
-              dataType: 'real'
-              index: 48
-              subtotals: ''
-              width: 150
-            }
-            column_SaleAmountInMonth10
-            {
-              columnId: 'SaleAmountInMonth10'
-              dataPath: 'SaleAmountInMonth10'
-              dataType: 'real'
-              index: 49
-              subtotals: ''
-              width: 150
-            }
-            column_SaleAmountInMonth11
-            {
-              columnId: 'SaleAmountInMonth11'
-              dataPath: 'SaleAmountInMonth11'
-              dataType: 'real'
-              index: 50
-              subtotals: ''
-              width: 150
-            }
-            column_SaleAmountInMonth12
-            {
-              columnId: 'SaleAmountInMonth12'
-              dataPath: 'SaleAmountInMonth12'
-              dataType: 'real'
-              index: 51
-              subtotals: ''
-              width: 150
-            }
-            column_SaleAmountTotal
-            {
-              columnId: 'SaleAmountTotal'
-              dataPath: 'SaleAmountTotal'
-              dataType: 'real'
-              index: 52
-              subtotals: ''
-              width: 150
+              width: 84
             }
           }
         }
@@ -513,20 +77,24 @@
         layout
         {
           mode: 'open'
-          rowPosition: 5
-          rowSpan: 10
-          columnPosition: 5
-          columnSpan: 8
+          rowPosition: 14
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 12
         }
         components
         {
+          FormCapacityAndSaleBudgeCompare_pButton
+          {
+            sizeRatio: 1
+          }
           FormCapacityAndSaleBudgeCompare_MatrixEditorCapacityAndSaleBudgeCompare
           {
             gridColor: '#c4c4c4'
-            totalHeaderWidth: 200
+            totalHeaderWidth: 67
             attributeHeaderWidthRatio: 0.6
             nameHeaderWidthRatio: 0.4
-            columnWidth: 100
+            columnWidth: 264
             horizontalGrid: true
             verticalGrid: true
             backendState
@@ -576,7 +144,7 @@
         {
           mode: 'open'
           rowPosition: 1
-          rowSpan: 4
+          rowSpan: 5
           columnPosition: 3
           columnSpan: 2
         }
@@ -588,6 +156,7 @@
           FormCapacityAndSaleBudgeFilterItem_DataSetLevelCapacityAndSaleBudgeFilterItem
           {
             groupDepth: -1
+            sort: 'DESC:ItemName'
             column_ItemName
             {
               columnId: 'ItemName'
@@ -608,13 +177,17 @@
         layout
         {
           mode: 'open'
-          rowPosition: 5
-          rowSpan: 11
+          rowPosition: 22
+          rowSpan: 13
           columnPosition: 1
-          columnSpan: 4
+          columnSpan: 12
         }
         components
         {
+          FormCapacityAndSaleBudgeChart_pFilterCriteria
+          {
+            sizeRatio: 1
+          }
           FormCapacityAndSaleBudgeChart_ChartCapacityAndSaleBudgeChart
           {
             SynchronizationGroup: ''
@@ -636,7 +209,7 @@
         {
           mode: 'open'
           rowPosition: 1
-          rowSpan: 4
+          rowSpan: 5
           columnPosition: 5
           columnSpan: 2
         }
@@ -648,6 +221,7 @@
           FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_DataSetLevelCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
           {
             groupDepth: -1
+            sort: 'DESC:PlaceOfProductionOfArray'
             column_PlaceOfProductionOfArray
             {
               columnId: 'PlaceOfProductionOfArray'
@@ -669,8 +243,8 @@
         {
           mode: 'open'
           rowPosition: 1
-          rowSpan: 4
-          columnPosition: 7
+          rowSpan: 5
+          columnPosition: 9
           columnSpan: 2
         }
         components
@@ -702,8 +276,8 @@
         {
           mode: 'open'
           rowPosition: 1
-          rowSpan: 4
-          columnPosition: 11
+          rowSpan: 5
+          columnPosition: 7
           columnSpan: 2
         }
         components
@@ -714,6 +288,7 @@
           FormCapacityAndSaleBudgeFilterBusinessType_DataSetLevelCapacityAndSaleBudgeFilterBusinessType
           {
             groupDepth: -1
+            sort: 'DESC:BusinessType'
             column_BusinessType
             {
               columnId: 'BusinessType'
@@ -735,8 +310,8 @@
         {
           mode: 'open'
           rowPosition: 1
-          rowSpan: 4
-          columnPosition: 9
+          rowSpan: 5
+          columnPosition: 11
           columnSpan: 2
         }
         components
@@ -759,14 +334,219 @@
           }
         }
       }
+      form_FormScenarioManager
+      {
+        title: 'QLibMacroPlannerWebUI::FormScenarioManager'
+        shown: true
+        componentID: 'QLibMacroPlannerWebUI::FormScenarioManager'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 5
+          columnPosition: 1
+          columnSpan: 2
+        }
+        components
+        {
+          FormScenarioManager_ListScenario
+          {
+          }
+          FormScenarioManager_DataSetLevelScenario
+          {
+            groupDepth: -1
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 240
+            }
+          }
+        }
+      }
+      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\216\245\345\217\243\346\265\213\350\257\225.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\346\216\245\345\217\243\346\265\213\350\257\225.vw"
index 31929b6..7ca33c1 100644
--- "a/_Main/UI/MacroPlannerWebApp/Views/\346\216\245\345\217\243\346\265\213\350\257\225.vw"
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\346\216\245\345\217\243\346\265\213\350\257\225.vw"
@@ -13,7 +13,7 @@
         {
           mode: 'open'
           rowPosition: 1
-          rowSpan: 16
+          rowSpan: 17
           columnPosition: 1
           columnSpan: 6
         }
@@ -152,7 +152,7 @@
         {
           mode: 'open'
           rowPosition: 1
-          rowSpan: 23
+          rowSpan: 28
           columnPosition: 7
           columnSpan: 6
         }
@@ -1180,14 +1180,96 @@
           }
         }
       }
+      form_FormDataInterfaceLog
+      {
+        title: 'QTIANMA_JITUAN::FormDataInterfaceLog'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormDataInterfaceLog'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 18
+          rowSpan: 11
+          columnPosition: 1
+          columnSpan: 6
+        }
+        components
+        {
+          FormDataInterfaceLog_PanelDataInterfaceLog
+          {
+            sizeRatio: 1
+          }
+          FormDataInterfaceLog_ListDataInterfaceLog
+          {
+          }
+          FormDataInterfaceLog_DataSetLevelDataInterfaceLog
+          {
+            groupDepth: -1
+            column_ImgExecuteStatus
+            {
+              columnId: 'ImgExecuteStatus'
+              dataPath: 'ImgExecuteStatus'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 40
+            }
+            column_Message
+            {
+              columnId: 'Message'
+              dataPath: 'Message'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CreateDate
+            {
+              columnId: 'CreateDate'
+              dataPath: 'CreateDate'
+              dataType: 'datetime'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ErrorNo
+            {
+              columnId: 'ErrorNo'
+              dataPath: 'ErrorNo'
+              dataType: 'number'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_ErrorMessage
+            {
+              columnId: 'ErrorMessage'
+              dataPath: 'ErrorMessage'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_ExecuteUser
+            {
+              columnId: 'ExecuteUser'
+              dataPath: 'ExecuteUser'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
     }
     userconfigurableinformation
     {
     }
+    image: 'SKIN_TIGER'
     page: ''
     group: ''
     index: 0
-    image: 'SKIN_TIGER'
     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/Dev-23/_ROOT_Role_Dev-23.properties b/_var/_Main/ModelSettings/Common/Dev-23/_ROOT_Role_Dev-23.properties
index fff5930..67e69c8 100644
--- a/_var/_Main/ModelSettings/Common/Dev-23/_ROOT_Role_Dev-23.properties
+++ b/_var/_Main/ModelSettings/Common/Dev-23/_ROOT_Role_Dev-23.properties
@@ -6,6 +6,10 @@
 _self.configsettype=Role
 _self.description=OTD涓撴樉 闈炴樉 鐗规樉
 _self.name=Dev-23
+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=
@@ -451,16 +455,56 @@
 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=true
+domainmodel.mdsstoragedefinitionmanager.datasetstoreenabled=false
 domainmodel.mdsstoragedefinitionmanager.datasetstoreislocal=false
 domainmodel.mdsstoragedefinitionmanager.dbformat=Legacy
 domainmodel.mdsstoragedefinitionmanager.defaultencryptioncertificate=
diff --git a/_var/_Main/ModelSettings/Common/Dev-25/_ROOT_Role_Dev-25.properties b/_var/_Main/ModelSettings/Common/Dev-25/_ROOT_Role_Dev-25.properties
index f3a0cf5..1dfd972 100644
--- a/_var/_Main/ModelSettings/Common/Dev-25/_ROOT_Role_Dev-25.properties
+++ b/_var/_Main/ModelSettings/Common/Dev-25/_ROOT_Role_Dev-25.properties
@@ -6,6 +6,10 @@
 _self.configsettype=Role
 _self.description=OTD姹借溅鐢靛瓙 澶╁崕
 _self.name=Dev-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=
@@ -451,16 +455,56 @@
 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=true
+domainmodel.mdsstoragedefinitionmanager.datasetstoreenabled=false
 domainmodel.mdsstoragedefinitionmanager.datasetstoreislocal=false
 domainmodel.mdsstoragedefinitionmanager.dbformat=Legacy
 domainmodel.mdsstoragedefinitionmanager.defaultencryptioncertificate=
diff --git a/_var/_Main/ModelSettings/Common/Dev-27/_ROOT_Role_Dev-27.properties b/_var/_Main/ModelSettings/Common/Dev-27/_ROOT_Role_Dev-27.properties
index 3153388..74586c3 100644
--- a/_var/_Main/ModelSettings/Common/Dev-27/_ROOT_Role_Dev-27.properties
+++ b/_var/_Main/ModelSettings/Common/Dev-27/_ROOT_Role_Dev-27.properties
@@ -6,6 +6,10 @@
 _self.configsettype=Role
 _self.description=OTD杞﹁浇浜嬩笟
 _self.name=Dev-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=
@@ -451,16 +455,56 @@
 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=true
+domainmodel.mdsstoragedefinitionmanager.datasetstoreenabled=false
 domainmodel.mdsstoragedefinitionmanager.datasetstoreislocal=false
 domainmodel.mdsstoragedefinitionmanager.dbformat=Legacy
 domainmodel.mdsstoragedefinitionmanager.defaultencryptioncertificate=
diff --git a/_var/_Main/ModelSettings/Common/Dev-38/_ROOT_Role_Dev-38.properties b/_var/_Main/ModelSettings/Common/Dev-38/_ROOT_Role_Dev-38.properties
index 7e6f16a..542cbba 100644
--- a/_var/_Main/ModelSettings/Common/Dev-38/_ROOT_Role_Dev-38.properties
+++ b/_var/_Main/ModelSettings/Common/Dev-38/_ROOT_Role_Dev-38.properties
@@ -513,12 +513,12 @@
 domainmodel.mdsstoragedefinitionmanager.maxcolumnname=0
 domainmodel.mdsstoragedefinitionmanager.maxtablename=0
 domainmodel.mdsstoragedefinitionmanager.name=dbodbc1
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasichost=10.110.14.50
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1521
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=totddb_it
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasichost=totddb.tianma.cn
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1529
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=todbpdb1
 domainmodel.mdsstoragedefinitionmanager.ociconnectiontnsname=
 domainmodel.mdsstoragedefinitionmanager.ociconnectiontype=Basic
-domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=otdit
+domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=otddevsyb
 domainmodel.mdsstoragedefinitionmanager.password=1 2A801D084589485925DA39115D5C7855 b91e3007-e230-4ef5-833e-a07edfc8903c
 domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients=template:domainmodel.soapclientinterfacedefinition
 domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.datasetkind=
diff --git a/_var/_Main/ModelSettings/Common/Dev-40/_ROOT_Role_Dev-40.properties b/_var/_Main/ModelSettings/Common/Dev-40/_ROOT_Role_Dev-40.properties
index 26cfcab..963eb45 100644
--- a/_var/_Main/ModelSettings/Common/Dev-40/_ROOT_Role_Dev-40.properties
+++ b/_var/_Main/ModelSettings/Common/Dev-40/_ROOT_Role_Dev-40.properties
@@ -513,12 +513,12 @@
 domainmodel.mdsstoragedefinitionmanager.maxcolumnname=0
 domainmodel.mdsstoragedefinitionmanager.maxtablename=0
 domainmodel.mdsstoragedefinitionmanager.name=dbodbc1
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasichost=10.110.14.50
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1521
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=totddb_it
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasichost=totddb.tianma.cn
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1529
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=todbpdb2
 domainmodel.mdsstoragedefinitionmanager.ociconnectiontnsname=
 domainmodel.mdsstoragedefinitionmanager.ociconnectiontype=Basic
-domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=otdit
+domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=otddevjtmb
 domainmodel.mdsstoragedefinitionmanager.password=1 2A801D084589485925DA39115D5C7855 b91e3007-e230-4ef5-833e-a07edfc8903c
 domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients=template:domainmodel.soapclientinterfacedefinition
 domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.datasetkind=
diff --git a/_var/_Main/ModelSettings/Common/Dev-42/_ROOT_Role_Dev-42.properties b/_var/_Main/ModelSettings/Common/Dev-42/_ROOT_Role_Dev-42.properties
index 72cac08..13199ee 100644
--- a/_var/_Main/ModelSettings/Common/Dev-42/_ROOT_Role_Dev-42.properties
+++ b/_var/_Main/ModelSettings/Common/Dev-42/_ROOT_Role_Dev-42.properties
@@ -513,12 +513,12 @@
 domainmodel.mdsstoragedefinitionmanager.maxcolumnname=0
 domainmodel.mdsstoragedefinitionmanager.maxtablename=0
 domainmodel.mdsstoragedefinitionmanager.name=dbodbc1
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasichost=10.110.14.50
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1521
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=totddb_it
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasichost=totddb.tianma.cn
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1529
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=todbpdb3
 domainmodel.mdsstoragedefinitionmanager.ociconnectiontnsname=
 domainmodel.mdsstoragedefinitionmanager.ociconnectiontype=Basic
-domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=otdit
+domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=otddevoled
 domainmodel.mdsstoragedefinitionmanager.password=1 2A801D084589485925DA39115D5C7855 b91e3007-e230-4ef5-833e-a07edfc8903c
 domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients=template:domainmodel.soapclientinterfacedefinition
 domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.datasetkind=
diff --git a/_var/_Main/ModelSettings/Common/Live-21/_ROOT_Role_Live-21.properties b/_var/_Main/ModelSettings/Common/Live-21/_ROOT_Role_Live-21.properties
new file mode 100644
index 0000000..9a8bf21
--- /dev/null
+++ b/_var/_Main/ModelSettings/Common/Live-21/_ROOT_Role_Live-21.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-21
+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_jtmb
+domainmodel.mdsstoragedefinitionmanager.ociconnectiontnsname=
+domainmodel.mdsstoragedefinitionmanager.ociconnectiontype=Basic
+domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=OTDJIUGE
+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-23/_ROOT_Role_Live-23.properties b/_var/_Main/ModelSettings/Common/Live-23/_ROOT_Role_Live-23.properties
new file mode 100644
index 0000000..c1b840d
--- /dev/null
+++ b/_var/_Main/ModelSettings/Common/Live-23/_ROOT_Role_Live-23.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-23
+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_mzsj
+domainmodel.mdsstoragedefinitionmanager.ociconnectiontnsname=
+domainmodel.mdsstoragedefinitionmanager.ociconnectiontype=Basic
+domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=OTDTIANWEN
+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-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 3c61315..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"
@@ -14,9 +14,9 @@
   ICONIMAGE 'WINDOWS'
   CREATIONDATETIME '2023-10-12T10:00:44'
   CREATIONUSER 'quintiq/hongjli'
-  UPDATEDATETIME '2023-10-12T23:32:10'
+  UPDATEDATETIME '2023-11-01T11:42:14'
   UPDATEUSER 'quintiq/hongjli'
-  LASTACCESSDATE '2023-10-13'
+  LASTACCESSDATE '2023-11-06'
   VIEWSCOPE 0
 }
 AUTHORIZATIONS
@@ -53,22 +53,24 @@
     {
      SETTINGS_MDS_WITH_FOLDER
      {
-       [414702.1.62804981]:LibInt_IntegratorProxy:/root:LibInt_IntegratorProxy
-       [414702.1.62833373]:SWF_CommunicationDataset:/root:SWF_CommunicationDataset
-       [414702.1.62828776]:SWF_WorkflowDataset:/root:SWF_WorkflowDataset
-       [414702.1.62800409]:LibDEF_DataBroker:/root:LibDEF_DataBroker
-       [414702.1.61685849]:LibDEF_DataRepository:/root:LibDEF_DataRepository
-       [414702.1.61676708]:DMF_ConvertorDataset:/root:DMF_ConvertorDataset
-       [414702.1.62842521]:LibMon_Monitor:/root:LibMon_Monitor
-       [414702.1.62837950]:LibUTF:/root:UTF
-       [414702.1.62860001]:Lib3DS_RootDataset:/root:Lib3DS_RootDataset
-       [414702.1.62850001]:KpiTracker:/root:KpiTracker
-       [414702.1.62875363]:MacroPlan:/root:MacroPlan
-       [414702.1.61681280]:MPDomainHandler:/root:MPDomainHandler
-       [414702.1.62880001]:MPSync:/root:MPSync
-       [414702.1.62809550]:ScenarioManager:/root:ScenarioManager
-       [414702.1.62870001]:LibSCIIntegrationInterface:/root:LibSCIIntegrationInterface
-       [414702.1.62819619]:GlobalOTDTable:/root:GlobalOTDTable
+       [414702.1.311783034]:LibInt_IntegratorProxy:/root:LibInt_IntegratorProxy
+       [414702.1.314030658]:SWF_CommunicationDataset:/root:SWF_CommunicationDataset
+       [414702.1.314026045]:SWF_WorkflowDataset:/root:SWF_WorkflowDataset
+       [414702.1.311778446]:LibDEF_DataBroker:/root:LibDEF_DataBroker
+       [414702.1.311773861]:LibDEF_DataRepository:/root:LibDEF_DataRepository
+       [414702.1.311764688]:DMF_ConvertorDataset:/root:DMF_ConvertorDataset
+       [414702.1.314039838]:LibMon_Monitor:/root:LibMon_Monitor
+       [414702.1.314035251]:LibUTF:/root:UTF
+       [414702.1.314050001]:Lib3DS_RootDataset:/root:Lib3DS_RootDataset
+       [414702.1.314070001]:KpiTracker:/root:KpiTracker
+       [414702.1.314075378]:MacroPlan:/root:MacroPlan
+       [414702.1.311769276]:MPDomainHandler:/root:MPDomainHandler
+       [414702.1.314060001]:MPSync:/root:MPSync
+       [414702.1.311787619]:ScenarioManager:/root:ScenarioManager
+       [414702.1.314080001]:LibSCIIntegrationInterface:/root:LibSCIIntegrationInterface
+       [414702.1.314007695]:GlobalOTDTable:/root:GlobalOTDTable
+       [414702.1.314016865]:GlobalOTDLog:/root:GlobalOTDLog
+       [414702.1.314012280]:GlobalOTDSOP:/root:GlobalOTDSOP
      }
     }
    }
@@ -102,7 +104,7 @@
       OBJECTTYPE ValueHolder
       CONTENTS
       {
-       Value '[414702.1.64020493]'
+       Value '[414702.1.314120528]'
       }
      }
      INFOOBJECT
@@ -156,7 +158,7 @@
       OBJECTTYPE ValueHolder
       CONTENTS
       {
-       Value ';MRPPlanning;ProductionPlan;BusinessUnitOM;Web_BlendingPlan;Web_Plan;Web_TripPlan;Web_PurchasingPlan;Web_ProductionPlan;KpiTrackerAdmin;Web_SafetyStock;Web_Inventory;Web_CapacitySmoothing;Web_ShelfLife;Web_LotSizes;Web_Optimizer;Web_SupplyDashboard;Web_OptimizerBenchmarking;Web_Integration;Web_MyActivities;Web_WorkFlowConfiguration;Web_SafetyStockCalculation;Web_InventoryMixBalancing;Web_Feedbacks;Web_Financials;Web_Allocation;Web_DemandPostponement;Web_Blending;Web_ScenariosAndSettings;Web;Web_Development;Web_Sales;Web_CampaignPlanning;Web_SupplyChainData;Web_SupplyPlanning;SOAPServerUserGroup;CollaborativeForecasting;DemandPlanner;SupplyPlanner;SupplyChainDirector;OnPremise;Cloud;SOP;Software;Functionalities;Workflow;TransportationPlanning;SupplySpecifications;SupplyChainMap;ShelfLife;SalesDemandPostponement;SafetyStockCalculation;ProductPlanningGanttChart;Pegging;OptimizerBenchmarking;LotSizes;InventorySupplies;InventorySpecifications;InventoryMixBalancing;Groups;Feedback;Development;DatabaseIntegration;CapacitySmoothing;CampaignPlanning;Blending;AggregatedPlanning;Developer;Administrator;Implementors;AppConfigurators'
+       Value ';Administrator;Developer;AggregatedPlanning;MRPPlanning;ProductionPlan;BusinessUnitOM;Web_BlendingPlan;Web_Plan;Web_TripPlan;Web_PurchasingPlan;Web_ProductionPlan;KpiTrackerAdmin;Web_SafetyStock;Web_Inventory;Web_CapacitySmoothing;Web_ShelfLife;Web_LotSizes;Web_Optimizer;Web_SupplyDashboard;Web_OptimizerBenchmarking;Web_Integration;Web_MyActivities;Web_WorkFlowConfiguration;Web_SafetyStockCalculation;Web_InventoryMixBalancing;Web_Feedbacks;Web_Financials;Web_Allocation;Web_DemandPostponement;Web_Blending;Web_ScenariosAndSettings;Web;Web_Development;Web_Sales;Web_CampaignPlanning;Web_SupplyChainData;Web_SupplyPlanning;SOAPServerUserGroup;CollaborativeForecasting;DemandPlanner;SupplyPlanner;SupplyChainDirector;OnPremise;Cloud;SOP;Software;Functionalities;Workflow;TransportationPlanning;SupplySpecifications;SupplyChainMap;ShelfLife;SalesDemandPostponement;SafetyStockCalculation;ProductPlanningGanttChart;Pegging;OptimizerBenchmarking;LotSizes;InventorySupplies;InventorySpecifications;InventoryMixBalancing;Groups;Feedback;Development;DatabaseIntegration;CapacitySmoothing;CampaignPlanning;Blending;AppConfigurators;Implementors'
       }
      }
      INFOOBJECT
@@ -391,7 +393,7 @@
           OBJECTTYPE ValueHolder
           CONTENTS
           {
-           Value '12-10-2023, 20:12:19'
+           Value '01-11-2023, 10:05:04'
           }
          }
         }
@@ -404,7 +406,7 @@
       OBJECTTYPE Toolbar
       CONTENTS
       {
-       'horizontal' '50' '336'
+       'horizontal' '50' '320'
       }
       INFOOBJECTS
       {
@@ -423,7 +425,7 @@
         OBJECTTYPE ValueHolder
         CONTENTS
         {
-         Value '336'
+         Value '320'
         }
        }
        INFOOBJECT
@@ -468,7 +470,7 @@
                 OBJECTTYPE ValueHolder
                 CONTENTS
                 {
-                 Value 'Products'
+                 Value 'Stocking points and units'
                 }
                }
                INFOOBJECT
@@ -879,704 +881,6 @@
      }
      INFOOBJECT
      {
-      KEY [108486.1.1170974339]
-      SINGLEINSTANCE false
-      ID 'Pegging'
-      PARENTKEY [514.0.2180]
-      OBJECTTYPE Form
-      CREATETYPE FormPegging
-      CONTENTS
-      {
-       State := normal
-       (354,421,990,664)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5507;]TabIdx[0]Selection[NONE]
-      }
-      INFOOBJECTS
-      {
-       INFOOBJECT
-       {
-        KEY [108486.1.1171911809]
-        OBJECTTYPE SplitterWnd
-        INFOOBJECTS
-        {
-         INFOOBJECT
-         {
-          KEY [108486.1.1171911810]
-          OBJECTTYPE SplitterPane
-          CONTENTS
-          {
-           Size 50.132802124834
-           VISIBLE true
-          }
-          INFOOBJECTS
-          {
-           INFOOBJECT
-           {
-            KEY [108486.1.1171921411]
-            OBJECTTYPE SplitterWnd
-            INFOOBJECTS
-            {
-             INFOOBJECT
-             {
-              KEY [108486.1.1171921412]
-              OBJECTTYPE SplitterPane
-              CONTENTS
-              {
-               Size 52.6515151515151
-               VISIBLE true
-              }
-              INFOOBJECTS
-              {
-               INFOOBJECT
-               {
-                KEY [108486.1.1171921414]
-                OBJECTTYPE List
-                CONTENTS
-                {
-                 Quantorrow := false
-                }
-                INFOOBJECTS
-                {
-                 INFOOBJECT
-                 {
-                  KEY [108486.1.1171924299]
-                  OBJECTTYPE GUIDataSetLevel
-                  CONTENTS
-                  {
-                   Columns
-                   {
-                     Definition := [11766.0.1025088210]
-                     {
-                       [11766.1.490215920]
-                     }
-                     SubTotals := true
-                     Visible
-                     {
-                       Column internal[DataSetImageColumn] [108486.1.2111697545]
-                       {
-                         Width := 19
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'DemandType [11660.0.340434965]'
-                         }
-                       }
-                       Column internal[DataSetImageColumn] [108486.2.15728337]
-                       {
-                         Header := 'HasValidPeggedQuantity'
-                         Width := 21
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ImgHasValidPeggedQuantity [108486.2.15494714]'
-                         }
-                       }
-                       Column internal[DataSetDataColumn] [127710.1.1139010297]
-                       {
-                         Header := 'Stocking point'
-                         Width := 137
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ProductInStockingPointInPeriodPlanning [134266.1.219045427]|AsPlanningProductInStockingPoint [134266.1.8545642]|StockingPoint_MP [11660.0.488414369]|Name [101472.1.1554218718]'
-                         }
-                       }
-                       Column internal[DataSetDataColumn] [108486.1.2110122000]
-                       {
-                         Header := 'Product'
-                         Width := 184
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ProductInStockingPointInPeriodPlanning [134266.1.219045427]|ProductInStockingPoint_MP [134266.1.5798354]|Product_MP [11660.0.486228287]|Name [101472.1.1551142288]'
-                         }
-                       }
-                       Column internal[DataSetConfigurableColumn] [108486.1.2112140291]
-                       {
-                         Header := 'Period start'
-                         Width := 115
-                         Subtotals := false
-                         Specific
-                         {
-                           Text := 'VALUE( object.GetPeriodStart() )'
-                           Alignment := ''
-                         }
-                       }
-                       Column internal[DataSetDataColumn] [11766.1.490215920]
-                       {
-                         Width := 80
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'Quantity [101320.0.110374989]'
-                         }
-                       }
-                       Column internal[DataSetDataColumn] [108486.1.2110122001]
-                       {
-                         Header := 'Fulfilled'
-                         Width := 82
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'FulfilledQuantity [11660.0.157649047]'
-                         }
-                       }
-                       Column internal[DataSetConfigurableColumn] [110880.2.1142677800]
-                       {
-                         Header := 'Available'
-                         Width := 79
-                         Subtotals := false
-                         Specific
-                         {
-                           Text := 'VALUE( object.GetAvailableQuantityForPegging() )'
-                           Alignment := ''
-                         }
-                       }
-                       Column internal[DataSetChartColumn] [108486.1.2112734746]
-                       {
-                         Header := 'Fulfillment'
-                         Width := 104
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           Type := 'Stacked Bar'
-                           Relative := true
-                           Points
-                           {
-                             PointDefinition
-                             {
-                               Text := 'minvalue( object.GetPeggedQuantity(), object.FulfilledQuantity() )'
-                               Color := 'Green'
-                               NegativeColor := 'Red'
-                               Description := 'Fulfilled pegged quantity'
-                             }
-                             PointDefinition
-                             {
-                               Text := 'maxvalue( object.FulfilledQuantity() - object.GetPeggedQuantity(), 0 )'
-                               Color := '$FF9900'
-                               NegativeColor := 'Red'
-                               Description := 'Unpegged quantity'
-                             }
-                             PointDefinition
-                             {
-                               Text := 'maxvalue( object.GetPeggedQuantity() - object.FulfilledQuantity(), 0 )'
-                               Color := 'Red'
-                               NegativeColor := 'Red'
-                               Description := 'Overpegged quantity'
-                             }
-                           }
-                         }
-                       }
-                     }
-                   }
-                   ColumnSort [108486.1.2112140291] true false
-                  }
-                 }
-                }
-               }
-              }
-             }
-             INFOOBJECT
-             {
-              KEY [108486.1.1171921413]
-              OBJECTTYPE SplitterPane
-              CONTENTS
-              {
-               Size 47.3484848484849
-               VISIBLE true
-              }
-              INFOOBJECTS
-              {
-               INFOOBJECT
-               {
-                KEY [113694.0.1490022148]
-                OBJECTTYPE List
-                CONTENTS
-                {
-                 Quantorrow := false
-                }
-                INFOOBJECTS
-                {
-                 INFOOBJECT
-                 {
-                  KEY [113694.0.1490022154]
-                  OBJECTTYPE GUIDataSetLevel
-                  CONTENTS
-                  {
-                   Columns
-                   {
-                     Definition := [108486.1.1171928381]
-                     {
-                       [108486.1.1171960868]
-                       [108486.1.1320715923]
-                     }
-                     SubTotals := true
-                     Visible
-                     {
-                       Column internal[DataSetImageColumn] [135072.0.40676723]
-                       {
-                         Width := 22
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'Supply_MP [134266.1.11843917]|SupplyType [108486.1.1185051348]'
-                         }
-                       }
-                       Column internal[DataSetImageColumn] [110880.9.1181376772]
-                       {
-                         Header := 'HasUserQuantity'
-                         Width := 23
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ImgHasUserQuantity [108486.1.1707654857]'
-                         }
-                       }
-                       Column internal[DataSetImageColumn] [113694.0.1490534244]
-                       {
-                         Width := 21
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ImgHasSupply [108486.2.16148330]'
-                         }
-                       }
-                       Column internal[DataSetConfigurableColumn] [113694.0.1490809329]
-                       {
-                         Header := 'Period start'
-                         Width := 115
-                         Subtotals := false
-                         Specific
-                         {
-                           Text := 'VALUE( object.Supply_MP().GetPeriodStart() )'
-                           Alignment := 'Default'
-                         }
-                       }
-                       Column internal[DataSetDataColumn] [113694.0.1490521540]
-                       {
-                         Width := 100
-                         Subtotals := false
-                         Quantor
-                         {
-                           Simple := 'sum' DataMemberString := 'Quantity [134266.1.8545959]'
-                         }
-                         Specific
-                         {
-                           DataPath := 'Quantity [134266.1.8545959]'
-                         }
-                       }
-                       Column internal[DataSetConfigurableColumn] [112884.0.2032524903]
-                       {
-                         Header := 'Cost'
-                         Width := 100
-                         Subtotals := false
-                         Quantor
-                         {
-                           Expression := 'sum' 'object.Supply_MP().GetBaseCostPerQuantity() * object.Quantity()'
-                         }
-                         Specific
-                         {
-                           Text := 'VALUE( object.Supply_MP().GetBaseCostPerQuantity() * object.Quantity() )'
-                           Alignment := 'Default'
-                         }
-                       }
-                     }
-                   }
-                   Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="Fulfillment Q134266_1_8545931">\n  <GEBFiltering Key="@Default_Filter1" TargetType="Fulfillment Q134266_1_8545931">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@Quantity1" ElementType="Fulfillment Q134266_1_8545931" ValueType="Real">\n        <ColumnID>[112610.0.1005221707]</ColumnID>\n        <BaseName>Quantity</BaseName>\n        <Name>Quantity</Name>\n        <Title>Quantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Quantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@3">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@4" Column="@Quantity1">\n          <ColumnID>[112610.0.1005221707]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@5">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
-                   ColumnSort [113694.0.1490809329] true false
-                   ColumnSort [113694.0.1490521540] true false
-                  }
-                 }
-                }
-               }
-              }
-             }
-            }
-           }
-          }
-         }
-         INFOOBJECT
-         {
-          KEY [108486.1.1171911811]
-          OBJECTTYPE SplitterPane
-          CONTENTS
-          {
-           Size 49.867197875166
-           VISIBLE true
-          }
-          INFOOBJECTS
-          {
-           INFOOBJECT
-           {
-            KEY [108486.1.1175693802]
-            OBJECTTYPE SplitterWnd
-            INFOOBJECTS
-            {
-             INFOOBJECT
-             {
-              KEY [108486.1.1175693803]
-              OBJECTTYPE SplitterPane
-              CONTENTS
-              {
-               Size 52.6315789473684
-               VISIBLE true
-              }
-              INFOOBJECTS
-              {
-               INFOOBJECT
-               {
-                KEY [108486.1.1175693804]
-                OBJECTTYPE List
-                CONTENTS
-                {
-                 Quantorrow := false
-                }
-                INFOOBJECTS
-                {
-                 INFOOBJECT
-                 {
-                  KEY [108486.1.1175693807]
-                  OBJECTTYPE GUIDataSetLevel
-                  CONTENTS
-                  {
-                   Columns
-                   {
-                     Definition := [108486.1.1175456932]
-                     {
-                       [108486.1.1175896212]
-                     }
-                     SubTotals := true
-                     Visible
-                     {
-                       Column internal[DataSetImageColumn] [108486.1.2113319927]
-                       {
-                         Width := 23
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'SupplyType [108486.1.1185051348]'
-                         }
-                       }
-                       Column internal[DataSetImageColumn] [108486.2.521730743]
-                       {
-                         Header := 'HasValidPegging'
-                         Width := 21
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ImgHasValidPegging [108486.2.479981617]'
-                         }
-                       }
-                       Column internal[DataSetImageColumn] [108486.2.14534947]
-                       {
-                         Header := 'HasValidPeggedQuantity'
-                         Width := 23
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ImgHasValidPeggedQuantity [108486.1.2146810434]'
-                         }
-                       }
-                       Column internal[DataSetConfigurableColumn] [108486.1.2113344305]
-                       {
-                         Header := 'Period start'
-                         Width := 115
-                         Subtotals := false
-                         Specific
-                         {
-                           Text := 'VALUE( object.GetPeriodStart() )'
-                           Alignment := ''
-                         }
-                       }
-                       Column internal[DataSetDataColumn] [108486.1.2110122007]
-                       {
-                         Width := 116
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'Quantity [112884.1.1160030032]'
-                         }
-                       }
-                       Column internal[DataSetChartColumn] [108486.1.2113393570]
-                       {
-                         Header := 'Supply'
-                         Width := 72
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           Type := 'Stacked Bar'
-                           Relative := true
-                           Points
-                           {
-                             PointDefinition
-                             {
-                               Text := 'minvalue( object.GetPeggedQuantity(), object.Quantity() )'
-                               Color := '$CCCCCC'
-                               NegativeColor := 'Red'
-                               Description := 'Used quantity for pegging'
-                             }
-                             PointDefinition
-                             {
-                               Text := 'object.GetAvailableQuantityForPegging()'
-                               Color := 'Green'
-                               NegativeColor := 'Red'
-                               Description := 'Available quantity for pegging'
-                             }
-                             PointDefinition
-                             {
-                               Text := 'maxvalue( object.GetPeggedQuantity() - object.Quantity(), 0 )'
-                               Color := 'Red'
-                               NegativeColor := 'Red'
-                               Description := 'Overused quantity'
-                             }
-                           }
-                         }
-                       }
-                       Column internal[DataSetConfigurableColumn] [110880.2.1142925855]
-                       {
-                         Header := 'Available'
-                         Width := 79
-                         Subtotals := false
-                         Specific
-                         {
-                           Text := 'VALUE( object.GetAvailableQuantityForPegging() )'
-                           Alignment := ''
-                         }
-                       }
-                     }
-                   }
-                   ColumnSort [108486.1.2113344305] true false
-                  }
-                 }
-                }
-               }
-              }
-             }
-             INFOOBJECT
-             {
-              KEY [108486.1.1175693810]
-              OBJECTTYPE SplitterPane
-              CONTENTS
-              {
-               Size 47.3684210526316
-               VISIBLE true
-              }
-              INFOOBJECTS
-              {
-               INFOOBJECT
-               {
-                KEY [108486.1.1175693811]
-                OBJECTTYPE List
-                CONTENTS
-                {
-                 Quantorrow := false
-                }
-                INFOOBJECTS
-                {
-                 INFOOBJECT
-                 {
-                  KEY [108486.1.1175693814]
-                  OBJECTTYPE GUIDataSetLevel
-                  CONTENTS
-                  {
-                   Columns
-                   {
-                     Definition := [108486.1.1175456935]
-                     {
-                       [108486.1.1175896215]
-                       [108486.1.1320715924]
-                     }
-                     SubTotals := true
-                     Visible
-                     {
-                       Column internal[DataSetImageColumn] [108486.1.2113733284]
-                       {
-                         Header := 'DemandType'
-                         Width := 23
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'Demand_MP [134266.1.16794407]|DemandType [11660.0.340434965]'
-                         }
-                       }
-                       Column internal[DataSetImageColumn] [110880.9.1181425511]
-                       {
-                         Header := 'HasUserQuantity'
-                         Width := 25
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ImgHasUserQuantity [108486.1.1707654857]'
-                         }
-                       }
-                       Column internal[DataSetImageColumn] [113694.0.1488690244]
-                       {
-                         Width := 21
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ImgHasDemand [113694.0.1488476421]'
-                         }
-                       }
-                       Column internal[DataSetConfigurableColumn] [108486.1.2113843687]
-                       {
-                         Header := 'Period start'
-                         Width := 115
-                         Subtotals := false
-                         Specific
-                         {
-                           Text := 'VALUE( object.Demand_MP().GetPeriodStart() )'
-                           Alignment := ''
-                         }
-                       }
-                       Column internal[DataSetDataColumn] [108486.1.2110122012]
-                       {
-                         Width := 100
-                         Subtotals := false
-                         Quantor
-                         {
-                           Simple := 'sum' DataMemberString := 'Quantity [134266.1.8545959]'
-                         }
-                         Specific
-                         {
-                           DataPath := 'Quantity [134266.1.8545959]'
-                         }
-                       }
-                       Column internal[DataSetDataColumn] [108486.1.2110122013]
-                       {
-                         Header := 'Cost'
-                         Width := 100
-                         Subtotals := false
-                         Quantor
-                         {
-                           Simple := 'sum' DataMemberString := 'BaseCost [134266.1.8545935]'
-                         }
-                         Specific
-                         {
-                           DataPath := 'BaseCost [134266.1.8545935]'
-                         }
-                       }
-                     }
-                   }
-                   ColumnSort [108486.1.2113843687] true false
-                  }
-                 }
-                }
-               }
-              }
-             }
-            }
-           }
-          }
-         }
-        }
-       }
-      }
-     }
-     INFOOBJECT
-     {
-      KEY [127710.1.818301225]
-      SINGLEINSTANCE false
-      ID '浜у搧瑙勫垝鏁版嵁鐭╅樀'
-      PARENTKEY [514.0.2180]
-      OBJECTTYPE Form
-      CREATETYPE FormProductPlanningMatrix
-      CONTENTS
-      {
-       State := normal
-       (0,0,0,0)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4493;]TabIdx[0]Selection[FRONT]
-      }
-      INFOOBJECTS
-      {
-       INFOOBJECT
-       {
-        KEY [127710.1.821866707]
-        OBJECTTYPE CheckBox
-        CONTENTS
-        {
-         Checkstate 1
-        }
-       }
-       INFOOBJECT
-       {
-        KEY [127710.1.821866918]
-        OBJECTTYPE StringSelection
-        CONTENTS
-        {
-         BoundValue '[Leaf product]'
-        }
-       }
-       INFOOBJECT
-       {
-        KEY [127710.1.818312567]
-        OBJECTTYPE MatrixEditor
-        CONTENTS
-        {
-         RowHeight 29
-         ColumnWidth 82
-         FirstColumnWidth 433
-         Attributes 'SupplyQuantity;DependentDemandAndSalesDemandQuantity;TargetInventoryLevel;InventoryLevelEnd;StockLevelInDays'
-        }
-        INFOOBJECTS
-        {
-         INFOOBJECT
-         {
-          KEY [127710.1.819572713]
-          OBJECTTYPE GUIScaleView
-          INFOOBJECTS
-          {
-           INFOOBJECT
-           {
-            KEY [127710.1.820829335]
-            OBJECTTYPE UserConfigurableInformation
-            CONTENTS
-            {
-             ObjectText 'VALUE(object.Start())'
-            }
-           }
-          }
-         }
-         INFOOBJECT
-         {
-          KEY [127710.1.819572710]
-          OBJECTTYPE GUIScaleView
-          INFOOBJECTS
-          {
-           INFOOBJECT
-           {
-            KEY [127710.1.820300549]
-            OBJECTTYPE UserConfigurableInformation
-            CONTENTS
-            {
-             ObjectText 'VALUE( object.Name() ) (VALUE( object.UnitOfMeasureName() ))'
-            }
-           }
-          }
-         }
-        }
-       }
-      }
-     }
-     INFOOBJECT
-     {
       KEY [107654.0.139602704]
       SINGLEINSTANCE false
       ID '閿�鍞渶姹�'
@@ -1587,7 +891,7 @@
       {
        State := normal
        (1344,0,192,928)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4493;]TabIdx[1]Selection[NONE]
+       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4484;]TabIdx[0]Selection[NONE]
       }
       INFOOBJECTS
       {
@@ -1745,7 +1049,7 @@
                    }
                  }
                }
-               Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="Forecast Q124112_0_61686821">\n  <GEBFiltering Key="@Default_Filter1" TargetType="Forecast Q124112_0_61686821">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@Quantity1" ElementType="Forecast Q124112_0_61686821" ValueType="Real">\n        <ColumnID>[112610.0.1212345820]</ColumnID>\n        <BaseName>Quantity</BaseName>\n        <Name>Quantity</Name>\n        <Title>Quantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Quantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@FulfilledQuantity1" ElementType="Forecast Q124112_0_61686821" ValueType="Real">\n        <ColumnID>[112610.0.1212349003]</ColumnID>\n        <BaseName>FulfilledQuantity</BaseName>\n        <Name>FulfilledQuantity</Name>\n        <Title>FulfilledQuantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>FulfilledQuantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@3">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@4" Column="@Quantity1">\n          <ColumnID>[112610.0.1212345820]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFilterColumn Key="@5" Column="@FulfilledQuantity1">\n          <ColumnID>[112610.0.1212349003]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@6">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
+               Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="Forecast Q124112_0_61686821">\n  <GEBFiltering Key="@Default_Filter1" TargetType="Forecast Q124112_0_61686821">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@StartDate1" ElementType="Forecast Q124112_0_61686821" ValueType="Date">\n        <ColumnID>[414702.1.317510867]</ColumnID>\n        <BaseName>StartDate</BaseName>\n        <Name>StartDate</Name>\n        <Title>StartDate</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>StartDate</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@ImgNotLinkedToPeriod1" ElementType="Forecast Q124112_0_61686821" ValueType="String">\n        <ColumnID>[414702.1.317510868]</ColumnID>\n        <BaseName>ImgNotLinkedToPeriod</BaseName>\n        <Name>ImgNotLinkedToPeriod</Name>\n        <Title>ImgNotLinkedToPeriod</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ImgNotLinkedToPeriod</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@ImgIsPostponed1" ElementType="Forecast Q124112_0_61686821" ValueType="String">\n        <ColumnID>[414702.1.317510869]</ColumnID>\n        <BaseName>ImgIsPostponed</BaseName>\n        <Name>ImgIsPostponed</Name>\n        <Title>ImgIsPostponed</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ImgIsPostponed</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Sales_segment1" ElementType="Forecast Q124112_0_61686821" ValueType="String">\n        <ColumnID>[414702.1.317510870]</ColumnID>\n        <BaseName>Sales_segment</BaseName>\n        <Name>Sales_segment</Name>\n        <Title>Sales segment</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>true</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>SalesSegment_MP.Name</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Product1" ElementType="Forecast Q124112_0_61686821" ValueType="String">\n        <ColumnID>[414702.1.317510871]</ColumnID>\n        <BaseName>Product</BaseName>\n        <Name>Product</Name>\n        <Title>Product</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>true</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ProductInStockingPoint_MP.Product_MP.Name</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Stocking_point1" ElementType="Forecast Q124112_0_61686821" ValueType="String">\n        <ColumnID>[414702.1.317510872]</ColumnID>\n        <BaseName>Stocking_point</BaseName>\n        <Name>Stocking_point</Name>\n        <Title>Stocking point</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>true</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ProductInStockingPoint_MP.StockingPoint_MP.Name</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Quantity1" ElementType="Forecast Q124112_0_61686821" ValueType="Real">\n        <ColumnID>[112610.0.1212345820]</ColumnID>\n        <BaseName>Quantity</BaseName>\n        <Name>Quantity</Name>\n        <Title>Quantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Quantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Price1" ElementType="Forecast Q124112_0_61686821" ValueType="Real">\n        <ColumnID>[414702.1.317510873]</ColumnID>\n        <BaseName>Price</BaseName>\n        <Name>Price</Name>\n        <Title>Price</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Price</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@FulfilledQuantity1" ElementType="Forecast Q124112_0_61686821" ValueType="Real">\n        <ColumnID>[112610.0.1212349003]</ColumnID>\n        <BaseName>FulfilledQuantity</BaseName>\n        <Name>FulfilledQuantity</Name>\n        <Title>FulfilledQuantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>FulfilledQuantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@3">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@4" Column="@Quantity1">\n          <ColumnID>[112610.0.1212345820]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFilterColumn Key="@5" Column="@FulfilledQuantity1">\n          <ColumnID>[112610.0.1212349003]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@6">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
                ColumnSort [414702.1.48371364] true false
               }
              }
@@ -2007,6 +1311,706 @@
      }
      INFOOBJECT
      {
+      KEY [108486.1.1170974339]
+      SINGLEINSTANCE false
+      ID 'Pegging'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Form
+      CREATETYPE FormPegging
+      CONTENTS
+      {
+       State := normal
+       (354,421,990,664)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5516;]TabIdx[0]Selection[NONE]
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [108486.1.1171911809]
+        OBJECTTYPE SplitterWnd
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [108486.1.1171911810]
+          OBJECTTYPE SplitterPane
+          CONTENTS
+          {
+           Size 50.132802124834
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [108486.1.1171921411]
+            OBJECTTYPE SplitterWnd
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [108486.1.1171921412]
+              OBJECTTYPE SplitterPane
+              CONTENTS
+              {
+               Size 52.6515151515151
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [108486.1.1171921414]
+                OBJECTTYPE List
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [108486.1.1171924299]
+                  OBJECTTYPE GUIDataSetLevel
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     Definition := [11766.0.1025088210]
+                     {
+                       [11766.1.490215920]
+                     }
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetImageColumn] [108486.1.2111697545]
+                       {
+                         Width := 19
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'DemandType [11660.0.340434965]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [108486.2.15728337]
+                       {
+                         Header := 'HasValidPeggedQuantity'
+                         Width := 21
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasValidPeggedQuantity [108486.2.15494714]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [127710.1.1139010297]
+                       {
+                         Header := 'Stocking point'
+                         Width := 137
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ProductInStockingPointInPeriodPlanning [134266.1.219045427]|AsPlanningProductInStockingPoint [134266.1.8545642]|StockingPoint_MP [11660.0.488414369]|Name [101472.1.1554218718]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [108486.1.2110122000]
+                       {
+                         Header := 'Product'
+                         Width := 184
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ProductInStockingPointInPeriodPlanning [134266.1.219045427]|ProductInStockingPoint_MP [134266.1.5798354]|Product_MP [11660.0.486228287]|Name [101472.1.1551142288]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [108486.1.2112140291]
+                       {
+                         Header := 'Period start'
+                         Width := 115
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.GetPeriodStart() )'
+                           Alignment := ''
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [11766.1.490215920]
+                       {
+                         Width := 91
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Quantity [101320.0.110374989]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [108486.1.2110122001]
+                       {
+                         Header := 'Fulfilled'
+                         Width := 82
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'FulfilledQuantity [11660.0.157649047]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [110880.2.1142677800]
+                       {
+                         Header := 'Available'
+                         Width := 79
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.GetAvailableQuantityForPegging() )'
+                           Alignment := ''
+                         }
+                       }
+                       Column internal[DataSetChartColumn] [108486.1.2112734746]
+                       {
+                         Header := 'Fulfillment'
+                         Width := 104
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           Type := 'Stacked Bar'
+                           Relative := true
+                           Points
+                           {
+                             PointDefinition
+                             {
+                               Text := 'minvalue( object.GetPeggedQuantity(), object.FulfilledQuantity() )'
+                               Color := 'Green'
+                               NegativeColor := 'Red'
+                               Description := 'Fulfilled pegged quantity'
+                             }
+                             PointDefinition
+                             {
+                               Text := 'maxvalue( object.FulfilledQuantity() - object.GetPeggedQuantity(), 0 )'
+                               Color := '$FF9900'
+                               NegativeColor := 'Red'
+                               Description := 'Unpegged quantity'
+                             }
+                             PointDefinition
+                             {
+                               Text := 'maxvalue( object.GetPeggedQuantity() - object.FulfilledQuantity(), 0 )'
+                               Color := 'Red'
+                               NegativeColor := 'Red'
+                               Description := 'Overpegged quantity'
+                             }
+                           }
+                         }
+                       }
+                     }
+                   }
+                   Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="Demand_MP Q11660_0_96892572">\n  <GEBFiltering Key="@Default_Filter1" TargetType="Demand_MP Q11660_0_96892572">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@DemandType1" ElementType="Demand_MP Q11660_0_96892572" ValueType="String">\n        <ColumnID>[108486.2.847961104]</ColumnID>\n        <BaseName>DemandType</BaseName>\n        <Name>DemandType</Name>\n        <Title>DemandType</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>DemandType</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@HasValidPeggedQuantity1" ElementType="Demand_MP Q11660_0_96892572" ValueType="String">\n        <ColumnID>[108486.2.847961073]</ColumnID>\n        <BaseName>HasValidPeggedQuantity</BaseName>\n        <Name>HasValidPeggedQuantity</Name>\n        <Title>HasValidPeggedQuantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>true</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ImgHasValidPeggedQuantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Stocking_point1" ElementType="Demand_MP Q11660_0_96892572" ValueType="String">\n        <ColumnID>[414702.1.317581380]</ColumnID>\n        <BaseName>Stocking_point</BaseName>\n        <Name>Stocking_point</Name>\n        <Title>Stocking point</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>true</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ProductInStockingPointInPeriodPlanning.AsPlanningProductInStockingPoint.StockingPoint_MP.Name</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Product1" ElementType="Demand_MP Q11660_0_96892572" ValueType="String">\n        <ColumnID>[414702.1.317581381]</ColumnID>\n        <BaseName>Product</BaseName>\n        <Name>Product</Name>\n        <Title>Product</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>true</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ProductInStockingPointInPeriodPlanning.ProductInStockingPoint_MP.Product_MP.Name</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBProcessColumn Key="@Period_start1" ElementType="Demand_MP Q11660_0_96892572" ValueType="Date">\n        <ColumnID>[414702.1.317581382]</ColumnID>\n        <BaseName>Period_start</BaseName>\n        <Name>Period_start</Name>\n        <Title>Period start</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <GEBDerivation Key="@3">\n          <GEBDerivationBase Key="@4" TargetType="Demand_MP Q11660_0_96892572">\n            <ColumnID>[0.0.0]</ColumnID>\n            <GEBNodeDerivation Key="@5">\n              <Operation>FirstExpression</Operation>\n              <Conditional>false</Conditional>\n              <Multiple>false</Multiple>\n              <AllowWildcards>false</AllowWildcards>\n              <GEBNodeDerivationExpression Key="@6">\n                <GEBNodeDerivationExpressionBody Key="@7">\n                  <ExpressionText>object.GetPeriodStart()</ExpressionText>\n                  <Converter>\n                    <ZeroConverter Key="@8">\n                      <IsStandard>true</IsStandard>\n                      <IsISO>false</IsISO>\n                      <IsCustom>false</IsCustom>\n                      <ConversionType>0</ConversionType>\n                    </ZeroConverter>\n                  </Converter>\n                </GEBNodeDerivationExpressionBody>\n              </GEBNodeDerivationExpression>\n            </GEBNodeDerivation>\n          </GEBDerivationBase>\n        </GEBDerivation>\n      </GEBProcessColumn>\n      <GEBSelectColumn Key="@Quantity1" ElementType="Demand_MP Q11660_0_96892572" ValueType="Real">\n        <ColumnID>[414702.1.317581383]</ColumnID>\n        <BaseName>Quantity</BaseName>\n        <Name>Quantity</Name>\n        <Title>Quantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Quantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Fulfilled1" ElementType="Demand_MP Q11660_0_96892572" ValueType="Real">\n        <ColumnID>[108486.2.847961228]</ColumnID>\n        <BaseName>Fulfilled</BaseName>\n        <Name>Fulfilled</Name>\n        <Title>Fulfilled</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>true</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>FulfilledQuantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBProcessColumn Key="@Available1" ElementType="Demand_MP Q11660_0_96892572" ValueType="Real">\n        <ColumnID>[414702.1.317581384]</ColumnID>\n        <BaseName>Available</BaseName>\n        <Name>Available</Name>\n        <Title>Available</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <GEBDerivation Key="@9">\n          <GEBDerivationBase Key="@10" TargetType="Demand_MP Q11660_0_96892572">\n            <ColumnID>[0.0.0]</ColumnID>\n            <GEBNodeDerivation Key="@11">\n              <Operation>FirstExpression</Operation>\n              <Conditional>false</Conditional>\n              <Multiple>false</Multiple>\n              <AllowWildcards>false</AllowWildcards>\n              <GEBNodeDerivationExpression Key="@12">\n                <GEBNodeDerivationExpressionBody Key="@13">\n                  <ExpressionText>object.GetAvailableQuantityForPegging()</ExpressionText>\n                  <Converter>\n                    <ZeroConverter Key="@14">\n                      <IsStandard>true</IsStandard>\n                      <IsISO>false</IsISO>\n                      <IsCustom>false</IsCustom>\n                      <ConversionType>0</ConversionType>\n                    </ZeroConverter>\n                  </Converter>\n                </GEBNodeDerivationExpressionBody>\n              </GEBNodeDerivationExpression>\n            </GEBNodeDerivation>\n          </GEBDerivationBase>\n        </GEBDerivation>\n      </GEBProcessColumn>\n      <GEBProcessColumn Key="@Date1" ElementType="Demand_MP Q11660_0_96892572" ValueType="Date">\n        <ColumnID>[108486.1.1930448455]</ColumnID>\n        <BaseName>Date</BaseName>\n        <Name>Date</Name>\n        <Title>Date</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <GEBDerivation Key="@15">\n          <GEBDerivationBase Key="@16" TargetType="Demand_MP Q11660_0_96892572">\n            <ColumnID>[0.0.0]</ColumnID>\n            <GEBNodeDerivation Key="@17">\n              <Operation>FirstExpression</Operation>\n              <Conditional>false</Conditional>\n              <Multiple>false</Multiple>\n              <AllowWildcards>false</AllowWildcards>\n              <GEBNodeDerivationExpression Key="@18">\n                <GEBNodeDerivationExpressionBody Key="@19">\n                  <ExpressionText>object.GetDate()</ExpressionText>\n                  <Converter>\n                    <ZeroConverter Key="@20">\n                      <IsStandard>true</IsStandard>\n                      <IsISO>false</IsISO>\n                      <IsCustom>false</IsCustom>\n                      <ConversionType>0</ConversionType>\n                    </ZeroConverter>\n                  </Converter>\n                </GEBNodeDerivationExpressionBody>\n              </GEBNodeDerivationExpression>\n            </GEBNodeDerivation>\n          </GEBDerivationBase>\n        </GEBDerivation>\n      </GEBProcessColumn>\n      <GEBFilter Key="@21">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@22" Column="@Fulfilled1">\n          <ColumnID>[108486.2.847961228]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFilterColumn Key="@23" Column="@Product1">\n          <ColumnID>[414702.1.317581381]</ColumnID>\n          <GEBFilterColumnMatch Key="@24">\n            <Operation>=</Operation>\n            <Enabled>true</Enabled>\n            <RHSValue>\n              <RHSFreeValue Key="@25">\n                <StringValue></StringValue>\n                <Value>UString:120 kW Motor</Value>\n              </RHSFreeValue>\n            </RHSValue>\n          </GEBFilterColumnMatch>\n        </GEBFilterColumn>\n        <GEBFilterColumn Key="@26" Column="@Period_start1">\n          <ColumnID>[414702.1.317581382]</ColumnID>\n          <GEBFilterColumnMatch Key="@27">\n            <Operation>=</Operation>\n            <Enabled>true</Enabled>\n            <RHSValue>\n              <RHSFreeValue Key="@28">\n                <StringValue></StringValue>\n                <Value>Date:2020-04-01</Value>\n              </RHSFreeValue>\n            </RHSValue>\n          </GEBFilterColumnMatch>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@29">\n          <ExpressionText></ExpressionText>\n          <Converter>\n            <ZeroConverter Key="@30">\n              <IsStandard>true</IsStandard>\n              <IsISO>false</IsISO>\n              <IsCustom>false</IsCustom>\n              <ConversionType>0</ConversionType>\n            </ZeroConverter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
+                   ColumnSort [11766.1.490215920] true false
+                  }
+                 }
+                }
+               }
+              }
+             }
+             INFOOBJECT
+             {
+              KEY [108486.1.1171921413]
+              OBJECTTYPE SplitterPane
+              CONTENTS
+              {
+               Size 47.3484848484849
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [113694.0.1490022148]
+                OBJECTTYPE List
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [113694.0.1490022154]
+                  OBJECTTYPE GUIDataSetLevel
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     Definition := [108486.1.1171928381]
+                     {
+                       [108486.1.1171960868]
+                       [108486.1.1320715923]
+                     }
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetImageColumn] [135072.0.40676723]
+                       {
+                         Width := 22
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Supply_MP [134266.1.11843917]|SupplyType [108486.1.1185051348]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [110880.9.1181376772]
+                       {
+                         Header := 'HasUserQuantity'
+                         Width := 23
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasUserQuantity [108486.1.1707654857]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [113694.0.1490534244]
+                       {
+                         Width := 21
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasSupply [108486.2.16148330]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [113694.0.1490809329]
+                       {
+                         Header := 'Period start'
+                         Width := 115
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.Supply_MP().GetPeriodStart() )'
+                           Alignment := 'Default'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [113694.0.1490521540]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Quantor
+                         {
+                           Simple := 'sum' DataMemberString := 'Quantity [134266.1.8545959]'
+                         }
+                         Specific
+                         {
+                           DataPath := 'Quantity [134266.1.8545959]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [112884.0.2032524903]
+                       {
+                         Header := 'Cost'
+                         Width := 100
+                         Subtotals := false
+                         Quantor
+                         {
+                           Expression := 'sum' 'object.Supply_MP().GetBaseCostPerQuantity() * object.Quantity()'
+                         }
+                         Specific
+                         {
+                           Text := 'VALUE( object.Supply_MP().GetBaseCostPerQuantity() * object.Quantity() )'
+                           Alignment := 'Default'
+                         }
+                       }
+                     }
+                   }
+                   Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="Fulfillment Q134266_1_8545931">\n  <GEBFiltering Key="@Default_Filter1" TargetType="Fulfillment Q134266_1_8545931">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@Supply_MPSupplyType1" ElementType="Fulfillment Q134266_1_8545931" ValueType="String">\n        <ColumnID>[414702.1.317581385]</ColumnID>\n        <BaseName>Supply_MPSupplyType</BaseName>\n        <Name>Supply_MPSupplyType</Name>\n        <Title>SupplyType</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Supply_MP.SupplyType</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@HasUserQuantity1" ElementType="Fulfillment Q134266_1_8545931" ValueType="String">\n        <ColumnID>[414702.1.317581386]</ColumnID>\n        <BaseName>HasUserQuantity</BaseName>\n        <Name>HasUserQuantity</Name>\n        <Title>HasUserQuantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>true</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ImgHasUserQuantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@ImgHasSupply1" ElementType="Fulfillment Q134266_1_8545931" ValueType="String">\n        <ColumnID>[414702.1.317581387]</ColumnID>\n        <BaseName>ImgHasSupply</BaseName>\n        <Name>ImgHasSupply</Name>\n        <Title>ImgHasSupply</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ImgHasSupply</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBProcessColumn Key="@Period_start1" ElementType="Fulfillment Q134266_1_8545931" ValueType="Date">\n        <ColumnID>[414702.1.317581388]</ColumnID>\n        <BaseName>Period_start</BaseName>\n        <Name>Period_start</Name>\n        <Title>Period start</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <GEBDerivation Key="@3">\n          <GEBDerivationBase Key="@4" TargetType="Fulfillment Q134266_1_8545931">\n            <ColumnID>[0.0.0]</ColumnID>\n            <GEBNodeDerivation Key="@5">\n              <Operation>FirstExpression</Operation>\n              <Conditional>false</Conditional>\n              <Multiple>false</Multiple>\n              <AllowWildcards>false</AllowWildcards>\n              <GEBNodeDerivationExpression Key="@6">\n                <GEBNodeDerivationExpressionBody Key="@7">\n                  <ExpressionText>object.Supply_MP().GetPeriodStart()</ExpressionText>\n                  <Converter>\n                    <ZeroConverter Key="@8">\n                      <IsStandard>true</IsStandard>\n                      <IsISO>false</IsISO>\n                      <IsCustom>false</IsCustom>\n                      <ConversionType>0</ConversionType>\n                    </ZeroConverter>\n                  </Converter>\n                </GEBNodeDerivationExpressionBody>\n              </GEBNodeDerivationExpression>\n            </GEBNodeDerivation>\n          </GEBDerivationBase>\n        </GEBDerivation>\n      </GEBProcessColumn>\n      <GEBSelectColumn Key="@Quantity1" ElementType="Fulfillment Q134266_1_8545931" ValueType="Real">\n        <ColumnID>[112610.0.1005221707]</ColumnID>\n        <BaseName>Quantity</BaseName>\n        <Name>Quantity</Name>\n        <Title>Quantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Quantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBProcessColumn Key="@Cost1" ElementType="Fulfillment Q134266_1_8545931" ValueType="Real">\n        <ColumnID>[414702.1.317581389]</ColumnID>\n        <BaseName>Cost</BaseName>\n        <Name>Cost</Name>\n        <Title>Cost</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <GEBDerivation Key="@9">\n          <GEBDerivationBase Key="@10" TargetType="Fulfillment Q134266_1_8545931">\n            <ColumnID>[0.0.0]</ColumnID>\n            <GEBNodeDerivation Key="@11">\n              <Operation>FirstExpression</Operation>\n              <Conditional>false</Conditional>\n              <Multiple>false</Multiple>\n              <AllowWildcards>false</AllowWildcards>\n              <GEBNodeDerivationExpression Key="@12">\n                <GEBNodeDerivationExpressionBody Key="@13">\n                  <ExpressionText>object.Supply_MP().GetBaseCostPerQuantity() * object.Quantity()</ExpressionText>\n                  <Converter>\n                    <ZeroConverter Key="@14">\n                      <IsStandard>true</IsStandard>\n                      <IsISO>false</IsISO>\n                      <IsCustom>false</IsCustom>\n                      <ConversionType>0</ConversionType>\n                    </ZeroConverter>\n                  </Converter>\n                </GEBNodeDerivationExpressionBody>\n              </GEBNodeDerivationExpression>\n            </GEBNodeDerivation>\n          </GEBDerivationBase>\n        </GEBDerivation>\n      </GEBProcessColumn>\n      <GEBFilter Key="@15">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@16" Column="@Quantity1">\n          <ColumnID>[112610.0.1005221707]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@17">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
+                   ColumnSort [113694.0.1490809329] true false
+                   ColumnSort [113694.0.1490521540] true false
+                  }
+                 }
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+         INFOOBJECT
+         {
+          KEY [108486.1.1171911811]
+          OBJECTTYPE SplitterPane
+          CONTENTS
+          {
+           Size 49.867197875166
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [108486.1.1175693802]
+            OBJECTTYPE SplitterWnd
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [108486.1.1175693803]
+              OBJECTTYPE SplitterPane
+              CONTENTS
+              {
+               Size 52.6315789473684
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [108486.1.1175693804]
+                OBJECTTYPE List
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [108486.1.1175693807]
+                  OBJECTTYPE GUIDataSetLevel
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     Definition := [108486.1.1175456932]
+                     {
+                       [108486.1.1175896212]
+                     }
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetImageColumn] [108486.1.2113319927]
+                       {
+                         Width := 23
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'SupplyType [108486.1.1185051348]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [108486.2.521730743]
+                       {
+                         Header := 'HasValidPegging'
+                         Width := 21
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasValidPegging [108486.2.479981617]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [108486.2.14534947]
+                       {
+                         Header := 'HasValidPeggedQuantity'
+                         Width := 23
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasValidPeggedQuantity [108486.1.2146810434]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [108486.1.2113344305]
+                       {
+                         Header := 'Period start'
+                         Width := 115
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.GetPeriodStart() )'
+                           Alignment := ''
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [108486.1.2110122007]
+                       {
+                         Width := 116
+                         SizedByUser := true
+                         Subtotals := true
+                         Specific
+                         {
+                           DataPath := 'Quantity [112884.1.1160030032]'
+                         }
+                       }
+                       Column internal[DataSetChartColumn] [108486.1.2113393570]
+                       {
+                         Header := 'Supply'
+                         Width := 72
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           Type := 'Stacked Bar'
+                           Relative := true
+                           Points
+                           {
+                             PointDefinition
+                             {
+                               Text := 'minvalue( object.GetPeggedQuantity(), object.Quantity() )'
+                               Color := '$CCCCCC'
+                               NegativeColor := 'Red'
+                               Description := 'Used quantity for pegging'
+                             }
+                             PointDefinition
+                             {
+                               Text := 'object.GetAvailableQuantityForPegging()'
+                               Color := 'Green'
+                               NegativeColor := 'Red'
+                               Description := 'Available quantity for pegging'
+                             }
+                             PointDefinition
+                             {
+                               Text := 'maxvalue( object.GetPeggedQuantity() - object.Quantity(), 0 )'
+                               Color := 'Red'
+                               NegativeColor := 'Red'
+                               Description := 'Overused quantity'
+                             }
+                           }
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [110880.2.1142925855]
+                       {
+                         Header := 'Available'
+                         Width := 79
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.GetAvailableQuantityForPegging() )'
+                           Alignment := ''
+                         }
+                       }
+                     }
+                   }
+                   ColumnSort [108486.1.2113344305] true false
+                  }
+                 }
+                }
+               }
+              }
+             }
+             INFOOBJECT
+             {
+              KEY [108486.1.1175693810]
+              OBJECTTYPE SplitterPane
+              CONTENTS
+              {
+               Size 47.3684210526316
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [108486.1.1175693811]
+                OBJECTTYPE List
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [108486.1.1175693814]
+                  OBJECTTYPE GUIDataSetLevel
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     Definition := [108486.1.1175456935]
+                     {
+                       [108486.1.1175896215]
+                       [108486.1.1320715924]
+                     }
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetImageColumn] [108486.1.2113733284]
+                       {
+                         Header := 'DemandType'
+                         Width := 23
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Demand_MP [134266.1.16794407]|DemandType [11660.0.340434965]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [110880.9.1181425511]
+                       {
+                         Header := 'HasUserQuantity'
+                         Width := 25
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasUserQuantity [108486.1.1707654857]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [113694.0.1488690244]
+                       {
+                         Width := 21
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasDemand [113694.0.1488476421]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [108486.1.2113843687]
+                       {
+                         Header := 'Period start'
+                         Width := 115
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.Demand_MP().GetPeriodStart() )'
+                           Alignment := ''
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [108486.1.2110122012]
+                       {
+                         Width := 150
+                         SizedByUser := true
+                         Subtotals := false
+                         Quantor
+                         {
+                           Simple := 'sum' DataMemberString := 'Quantity [134266.1.8545959]'
+                         }
+                         Specific
+                         {
+                           DataPath := 'Quantity [134266.1.8545959]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [108486.1.2110122013]
+                       {
+                         Header := 'Cost'
+                         Width := 100
+                         Subtotals := false
+                         Quantor
+                         {
+                           Simple := 'sum' DataMemberString := 'BaseCost [134266.1.8545935]'
+                         }
+                         Specific
+                         {
+                           DataPath := 'BaseCost [134266.1.8545935]'
+                         }
+                       }
+                     }
+                   }
+                   ColumnSort [108486.1.2113843687] true false
+                  }
+                 }
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [127710.1.818301225]
+      SINGLEINSTANCE false
+      ID '浜у搧瑙勫垝鏁版嵁鐭╅樀'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Form
+      CREATETYPE FormProductPlanningMatrix
+      CONTENTS
+      {
+       State := normal
+       (0,0,0,0)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4484;]TabIdx[1]Selection[NONE]
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [127710.1.821866707]
+        OBJECTTYPE CheckBox
+        CONTENTS
+        {
+         Checkstate 1
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [127710.1.821866918]
+        OBJECTTYPE StringSelection
+        CONTENTS
+        {
+         BoundValue '[Leaf product]'
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [127710.1.818312567]
+        OBJECTTYPE MatrixEditor
+        CONTENTS
+        {
+         RowHeight 29
+         ColumnWidth 82
+         FirstColumnWidth 433
+         Attributes 'SupplyQuantity;DependentDemandAndSalesDemandQuantity;TargetInventoryLevel;InventoryLevelEnd;StockLevelInDays'
+        }
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [127710.1.819572713]
+          OBJECTTYPE GUIScaleView
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [127710.1.820829335]
+            OBJECTTYPE UserConfigurableInformation
+            CONTENTS
+            {
+             ObjectText 'VALUE(object.Start())'
+            }
+           }
+          }
+         }
+         INFOOBJECT
+         {
+          KEY [127710.1.819572710]
+          OBJECTTYPE GUIScaleView
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [127710.1.820300549]
+            OBJECTTYPE UserConfigurableInformation
+            CONTENTS
+            {
+             ObjectText 'VALUE( object.Name() ) (VALUE( object.UnitOfMeasureName() ))'
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
       KEY [136682.0.365472357]
       SINGLEINSTANCE false
       ID '鍔犲伐璺緞'
@@ -2017,7 +2021,7 @@
       {
        State := normal
        (0,0,0,0)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5507;]TabIdx[1]Selection[NONE]
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5516;]TabIdx[1]Selection[NONE]
       }
       INFOOBJECTS
       {
@@ -2346,7 +2350,7 @@
       {
        State := normal
        (0,0,0,0)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5507;]TabIdx[3]Selection[FOCUS]
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5516;]TabIdx[2]Selection[NONE]
       }
      }
      INFOOBJECT
@@ -2361,7 +2365,7 @@
       {
        State := normal
        (0,0,0,0)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5507;]TabIdx[2]Selection[NONE]
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5516;]TabIdx[3]Selection[FRONT]
       }
       INFOOBJECTS
       {
@@ -2422,7 +2426,7 @@
       {
        State := normal
        (0,0,0,0)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4493;]TabIdx[2]Selection[NONE]
+       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4484;]TabIdx[2]Selection[NONE]
       }
       INFOOBJECTS
       {
@@ -2684,7 +2688,7 @@
                        Column internal[DataSetDataColumn] [530.1.25480393]
                        {
                          Header := 'Name'
-                         Width := 100
+                         Width := 68
                          Subtotals := false
                          Specific
                          {
@@ -2694,7 +2698,7 @@
                        Column internal[DataSetDataColumn] [530.1.25480394]
                        {
                          Header := 'Description'
-                         Width := 100
+                         Width := 105
                          Subtotals := false
                          Specific
                          {
@@ -2727,6 +2731,17 @@
                 CONTENTS
                 {
                  NEWFORMAT
+                 COLUMN 91 50
+                 COLUMN 92 50
+                 COLUMN 93 50
+                 COLUMN 94 50
+                 COLUMN 95 50
+                 COLUMN 96 50
+                 COLUMN 97 50
+                 COLUMN 98 50
+                 COLUMN 99 50
+                 COLUMN 100 50
+                 COLUMN 101 50
                  COLUMN 102 50
                  COLUMN 103 50
                 }
@@ -2902,7 +2917,7 @@
                                Column internal[DataSetDataColumn] [514.0.499730]
                                {
                                  Header := 'Name'
-                                 Width := 100
+                                 Width := 68
                                  Subtotals := false
                                  Specific
                                  {
@@ -2912,7 +2927,7 @@
                                Column internal[DataSetDataColumn] [530.1.32701549]
                                {
                                  Header := 'Description'
-                                 Width := 100
+                                 Width := 105
                                  Subtotals := false
                                  Specific
                                  {
@@ -2922,7 +2937,7 @@
                                Column internal[DataSetDataColumn] [678.0.64301138]
                                {
                                  Header := 'astype(UITypeDataMember).DataType.FullName'
-                                 Width := 100
+                                 Width := 404
                                  Subtotals := false
                                  Specific
                                  {
@@ -3210,6 +3225,1879 @@
        }
       }
      }
+     INFOOBJECT
+     {
+      KEY [414702.1.299084054]
+      SINGLEINSTANCE false
+      ID 'PeggingResult'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Form
+      CREATETYPE FormPeggingResult
+      CONTENTS
+      {
+       State := normal
+       (0,0,0,0)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4484;]TabIdx[4]Selection[FOCUS]
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [414702.1.299084152]
+        OBJECTTYPE List
+        CONTENTS
+        {
+         Quantorrow := false
+        }
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [414702.1.299084219]
+          OBJECTTYPE GUIDataSetLevel
+          CONTENTS
+          {
+           Columns
+           {
+             SubTotals := true
+             Visible
+             {
+               Column internal[DataSetDataColumn] [414702.1.299300693]
+               {
+                 Width := 197
+                 SizedByUser := true
+                 Subtotals := false
+                 Specific
+                 {
+                   DataPath := 'SalesDemandBaseID [414702.1.294144483]'
+                 }
+               }
+               Column internal[DataSetDataColumn] [414702.1.299300692]
+               {
+                 Width := 83
+                 SizedByUser := true
+                 Subtotals := false
+                 Specific
+                 {
+                   DataPath := 'Quantity [414702.1.294748143]'
+                 }
+               }
+               Column internal[DataSetDataColumn] [414702.1.299300694]
+               {
+                 Width := 163
+                 SizedByUser := true
+                 Subtotals := false
+                 Specific
+                 {
+                   DataPath := 'StartDate [414702.1.294179413]'
+                 }
+               }
+               Column internal[DataSetDataColumn] [414702.1.299300695]
+               {
+                 Width := 100
+                 Subtotals := false
+                 Specific
+                 {
+                   DataPath := 'StockingPointID [414702.1.294179269]'
+                 }
+               }
+             }
+           }
+           Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="PeggingProductInSalesDemandBase Q414702_1_290710053">\n  <GEBFiltering Key="@Default_Filter1" TargetType="PeggingProductInSalesDemandBase Q414702_1_290710053">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@SalesDemandBaseID1" ElementType="PeggingProductInSalesDemandBase Q414702_1_290710053" ValueType="String">\n        <ColumnID>[414702.1.317561783]</ColumnID>\n        <BaseName>SalesDemandBaseID</BaseName>\n        <Name>SalesDemandBaseID</Name>\n        <Title>SalesDemandBaseID</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>SalesDemandBaseID</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Quantity1" ElementType="PeggingProductInSalesDemandBase Q414702_1_290710053" ValueType="Real">\n        <ColumnID>[414702.1.300710952]</ColumnID>\n        <BaseName>Quantity</BaseName>\n        <Name>Quantity</Name>\n        <Title>Quantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Quantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@StartDate1" ElementType="PeggingProductInSalesDemandBase Q414702_1_290710053" ValueType="Date">\n        <ColumnID>[414702.1.317561784]</ColumnID>\n        <BaseName>StartDate</BaseName>\n        <Name>StartDate</Name>\n        <Title>StartDate</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>StartDate</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@StockingPointID1" ElementType="PeggingProductInSalesDemandBase Q414702_1_290710053" ValueType="String">\n        <ColumnID>[414702.1.317561785]</ColumnID>\n        <BaseName>StockingPointID</BaseName>\n        <Name>StockingPointID</Name>\n        <Title>StockingPointID</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>StockingPointID</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@3">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@4" Column="@Quantity1">\n          <ColumnID>[414702.1.300710952]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@5">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
+           ColumnSort [414702.1.299300693] true false
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [414702.1.273394023]
+      SINGLEINSTANCE false
+      ID 'Analysis GlobalOTDSOP'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Form
+      CREATETYPE frmStandardAnalysis633
+      CONTENTS
+      {
+       State := normal
+       (0,0,0,0)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5516;]TabIdx[4]Selection[NONE]
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [530.0.3531801]
+        OBJECTTYPE SplitterWnd
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [530.0.3531802]
+          OBJECTTYPE SplitterPane
+          CONTENTS
+          {
+           Size 0
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [530.0.3531806]
+            OBJECTTYPE SplitterWnd
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [530.0.3531807]
+              OBJECTTYPE SplitterPane
+              CONTENTS
+              {
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [530.0.3532065]
+                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'
+                 }
+                 ANALYSIS(0,0,0,0,false,'Analysis2')
+                 {
+                   SOURCE 'Analysis1' '0' 1
+                   N[0]
+                   TRAVERSE 'AllChild'
+                   NAME 'Analysis2'
+                 }
+                 COLUMNSETTINGS
+                 {
+                   CapacityAndSaleBudgeCompareItemRow
+                   {
+                     Columns
+                     {
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [414702.1.272348160]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'RowNo [414384.0.829650683]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.272348159]
+                         {
+                           Width := 78
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'PlaceOfProductionOfArray [414384.0.864360343]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.272348158]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'BusinessType [414384.0.819696514]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [414702.1.272348160] true false
+                   }
+                   CapacityAndSaleBudgeCompareItemRowProduct
+                   {
+                     Columns
+                     {
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [414702.1.272348161]
+                         {
+                           Width := 272
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'ProductCode [414384.0.819696603]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [414702.1.272348161] true false
+                   }
+                   CapacityAndSaleBudgeChartElement
+                   {
+                     Columns
+                     {
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [414702.1.276292160]
+                         {
+                           Width := 368
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'BusinessTypeOrPlaceOfProductionOfArray [414384.0.852466561]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.276292162]
+                         {
+                           Width := 312
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'TimeStringAndScenarioName [414384.0.852466528]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.276292161]
+                         {
+                           Width := 210
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'Quantity [414384.0.852466538]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [414702.1.276292160] true false
+                   }
+                   CapacityAndSaleBudgeCompareItemColumn
+                   {
+                     Columns
+                     {
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [414702.1.286540437]
+                         {
+                           Width := 287
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'ColumnName [414384.0.816630974]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.286540438]
+                         {
+                           Width := 126
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'ColumnNo [414384.0.829650696]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.286540439]
+                         {
+                           Width := 191
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'TotalIdentification [414702.1.286051924]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [414702.1.286540438] true false
+                   }
+                   PeggingResult
+                   {
+                     Columns
+                     {
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [414702.1.301867879]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'FulfillmentQuantity [414702.1.294201082]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.301867880]
+                         {
+                           Width := 150
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'NumberOfPlies [414702.1.294145594]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.301867881]
+                         {
+                           Width := 157
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'ProductID [414702.1.294201095]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.301867882]
+                         {
+                           Width := 110
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'StartDate [414702.1.294201062]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.301867883]
+                         {
+                           Width := 188
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'StockingPointID [414702.1.294201105]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.301867884]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'SupplyQuantity [414702.1.294201072]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.301867885]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'SupplyType [414702.1.294201052]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [414702.1.301867885] false false
+                   }
+                 }
+                 CURRENT 'Analysis2'
+                 HOME 'Types'
+                 FIXEDANALYSIS
+                 {
+                 }
+                }
+               }
+               INFOOBJECT
+               {
+                KEY [530.1.25480335]
+                OBJECTTYPE List
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [530.1.25480340]
+                  OBJECTTYPE GUIDataSetLevel
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     Definition := [530.1.25480345]
+                     {
+                       [530.1.25480393]
+                       [530.1.25480394]
+                     }
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetDataColumn] [530.1.25480393]
+                       {
+                         Header := 'Name'
+                         Width := 68
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Name [1.2.2366]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [530.1.25480394]
+                       {
+                         Header := 'Description'
+                         Width := 105
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Description [1.2.1211]'
+                         }
+                       }
+                     }
+                   }
+                   ColumnSort [530.1.25480393] true false
+                  }
+                 }
+                }
+               }
+              }
+             }
+             INFOOBJECT
+             {
+              KEY [530.0.3531808]
+              OBJECTTYPE SplitterPane
+              CONTENTS
+              {
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [530.0.3532013]
+                OBJECTTYPE GUIAnalysisGrid
+                CONTENTS
+                {
+                 NEWFORMAT
+                 COLUMN 95 50
+                 COLUMN 96 50
+                 COLUMN 97 50
+                 COLUMN 98 50
+                 COLUMN 99 50
+                 COLUMN 100 50
+                 COLUMN 101 50
+                 COLUMN 102 50
+                 COLUMN 103 50
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+         INFOOBJECT
+         {
+          KEY [530.0.3531803]
+          OBJECTTYPE SplitterPane
+          CONTENTS
+          {
+           Size 100
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [530.0.3531811]
+            OBJECTTYPE SplitterWnd
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [530.0.3531812]
+              OBJECTTYPE SplitterPane
+              CONTENTS
+              {
+               Size 44.5645263827082
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [530.0.3532136]
+                OBJECTTYPE SplitterWnd
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [530.0.3532137]
+                  OBJECTTYPE SplitterPane
+                  CONTENTS
+                  {
+                   Size 34.7701149425287
+                   VISIBLE true
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [530.0.3532138]
+                    OBJECTTYPE SplitterWnd
+                    INFOOBJECTS
+                    {
+                     INFOOBJECT
+                     {
+                      KEY [530.0.3532139]
+                      OBJECTTYPE SplitterPane
+                      CONTENTS
+                      {
+                       VISIBLE true
+                      }
+                      INFOOBJECTS
+                      {
+                       INFOOBJECT
+                       {
+                        KEY [530.0.3532140]
+                        OBJECTTYPE List
+                        CONTENTS
+                        {
+                         Quantorrow := false
+                        }
+                        INFOOBJECTS
+                        {
+                         INFOOBJECT
+                         {
+                          KEY [530.0.3532156]
+                          OBJECTTYPE GUIDataSetLevel
+                          CONTENTS
+                          {
+                           Columns
+                           {
+                             Definition := [514.0.499727]
+                             {
+                               [514.0.499730]
+                               [530.1.32701549]
+                               [678.0.64301138]
+                             }
+                             SubTotals := true
+                             Visible
+                             {
+                               Column internal[DataSetDataColumn] [514.0.499730]
+                               {
+                                 Header := 'Name'
+                                 Width := 68
+                                 Subtotals := false
+                                 Specific
+                                 {
+                                   DataPath := 'Name [1.2.34]'
+                                 }
+                               }
+                               Column internal[DataSetDataColumn] [530.1.32701549]
+                               {
+                                 Header := 'Description'
+                                 Width := 105
+                                 Subtotals := false
+                                 Specific
+                                 {
+                                   DataPath := 'Description [1.2.2564]'
+                                 }
+                               }
+                               Column internal[DataSetDataColumn] [678.0.64301138]
+                               {
+                                 Header := 'astype(UITypeDataMember).DataType.FullName'
+                                 Width := 404
+                                 Subtotals := false
+                                 Specific
+                                 {
+                                   DataPath := 'downcast(internal[UITypeDataMember]) [1.1.1409]|DataType [1.3.1182]|FullName [1.2.8615]'
+                                 }
+                               }
+                             }
+                           }
+                           ColumnSort [514.0.499730] true false
+                          }
+                         }
+                        }
+                       }
+                      }
+                     }
+                     INFOOBJECT
+                     {
+                      KEY [530.0.3532169]
+                      OBJECTTYPE SplitterPane
+                      CONTENTS
+                      {
+                       VISIBLE true
+                      }
+                      INFOOBJECTS
+                      {
+                       INFOOBJECT
+                       {
+                        KEY [530.0.3532170]
+                        OBJECTTYPE List
+                        CONTENTS
+                        {
+                         Quantorrow := false
+                        }
+                        INFOOBJECTS
+                        {
+                         INFOOBJECT
+                         {
+                          KEY [530.0.3532175]
+                          OBJECTTYPE GUIDataSetLevel
+                          CONTENTS
+                          {
+                           Columns
+                           {
+                             Definition := [514.0.499727]
+                             {
+                               [514.0.499730]
+                               [530.1.32701549]
+                               [678.0.64301138]
+                             }
+                             SubTotals := true
+                             Visible
+                             {
+                               Column internal[DataSetDataColumn] [514.0.499730]
+                               {
+                                 Header := 'Name'
+                                 Width := 68
+                                 Subtotals := false
+                                 Specific
+                                 {
+                                   DataPath := 'Name [1.2.34]'
+                                 }
+                               }
+                               Column internal[DataSetDataColumn] [530.1.32701549]
+                               {
+                                 Header := 'Description'
+                                 Width := 105
+                                 Subtotals := false
+                                 Specific
+                                 {
+                                   DataPath := 'Description [1.2.2564]'
+                                 }
+                               }
+                               Column internal[DataSetDataColumn] [678.0.64301138]
+                               {
+                                 Header := 'astype(UITypeDataMember).DataType.FullName'
+                                 Width := 404
+                                 Subtotals := false
+                                 Specific
+                                 {
+                                   DataPath := 'downcast(internal[UITypeDataMember]) [1.1.1409]|DataType [1.3.1182]|FullName [1.2.8615]'
+                                 }
+                               }
+                             }
+                           }
+                           ColumnSort [514.0.499730] true false
+                          }
+                         }
+                        }
+                       }
+                      }
+                     }
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [530.0.3532181]
+                  OBJECTTYPE SplitterPane
+                  CONTENTS
+                  {
+                   Size 65.2298850574713
+                   VISIBLE true
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [530.1.8006303]
+                    OBJECTTYPE SplitterWnd
+                    INFOOBJECTS
+                    {
+                     INFOOBJECT
+                     {
+                      KEY [530.1.8006304]
+                      OBJECTTYPE SplitterPane
+                      CONTENTS
+                      {
+                       VISIBLE true
+                      }
+                     }
+                     INFOOBJECT
+                     {
+                      KEY [530.1.8006305]
+                      OBJECTTYPE SplitterPane
+                      CONTENTS
+                      {
+                       VISIBLE true
+                      }
+                      INFOOBJECTS
+                      {
+                       INFOOBJECT
+                       {
+                        KEY [530.0.3532182]
+                        OBJECTTYPE GUIAnalysisBarChart
+                        CONTENTS
+                        {
+                         LeftSize 257
+                        }
+                       }
+                      }
+                     }
+                    }
+                   }
+                  }
+                 }
+                }
+               }
+              }
+             }
+             INFOOBJECT
+             {
+              KEY [530.0.3531813]
+              OBJECTTYPE SplitterPane
+              CONTENTS
+              {
+               Size 55.4354736172919
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [530.0.3531950]
+                OBJECTTYPE List
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [530.0.3531958]
+                  OBJECTTYPE GUIDataSetLevel
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetDataColumn] [414702.1.301867879]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'FulfillmentQuantity [414702.1.294201082]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.301867880]
+                       {
+                         Width := 150
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'NumberOfPlies [414702.1.294145594]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.301867881]
+                       {
+                         Width := 157
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ProductID [414702.1.294201095]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.301867882]
+                       {
+                         Width := 110
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'StartDate [414702.1.294201062]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.301867883]
+                       {
+                         Width := 188
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'StockingPointID [414702.1.294201105]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.301867884]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'SupplyQuantity [414702.1.294201072]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.301867885]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'SupplyType [414702.1.294201052]'
+                         }
+                       }
+                     }
+                   }
+                   ColumnSort [414702.1.301867885] false false
+                  }
+                 }
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [107654.0.148565389]
+      SINGLEINSTANCE false
+      ID '鏃舵浠诲姟'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Form
+      CREATETYPE FormPeriodTasks
+      CONTENTS
+      {
+       State := normal
+       (0,0,0,0)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4484;]TabIdx[3]Selection[NONE]
+      }
+      BASEINFOOBJECTS
+      {
+       BASEINFOOBJECT
+       {
+        KEY [107654.0.148565389]
+        OBJECTTYPE GUIContainerComponent
+        COMPONENTDATA
+        {
+         [107654.0.148565389]:[110880.4.1427962314]:[110880.4.1427962316]:[110880.4.1427968321]:[110880.4.1427968322]:[110880.4.1427969404]:[110880.4.1427969405]:[110880.4.1427973280]:[11766.0.1791753774]:[514.0.129466]:[104128.0.40995014]:[127710.1.1037824422] STR 'false'
+         [107654.0.148565389]:[110880.4.1427962314]:[110880.4.1427962316]:[110880.4.1427968321]:[110880.4.1427968322]:[110880.4.1427969404]:[110880.4.1427969405]:[110880.4.1427973280]:[11766.0.1791753774]:[514.0.129466]:[104128.0.40995014]:[127710.1.1037824123] STR 'false'
+        }
+       }
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [110880.4.1427962314]
+        OBJECTTYPE SplitterWnd
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [110880.4.1427962316]
+          OBJECTTYPE SplitterPane
+          CONTENTS
+          {
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [110880.4.1427968321]
+            OBJECTTYPE SplitterWnd
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [110880.4.1427968322]
+              OBJECTTYPE SplitterPane
+              CONTENTS
+              {
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [110880.4.1427969404]
+                OBJECTTYPE SplitterWnd
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [110880.4.1427969405]
+                  OBJECTTYPE SplitterPane
+                  CONTENTS
+                  {
+                   VISIBLE true
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [110880.4.1427973280]
+                    OBJECTTYPE List
+                    CONTENTS
+                    {
+                     Quantorrow := false
+                    }
+                    INFOOBJECTS
+                    {
+                     INFOOBJECT
+                     {
+                      KEY [11766.0.1791753776]
+                      OBJECTTYPE GUIDataSetLevel
+                      CONTENTS
+                      {
+                       Columns
+                       {
+                         Definition := [11766.0.1176668425]
+                         {
+                           [112884.0.420632428]
+                           [11766.1.490571536]
+                           [11766.1.490571537]
+                           [11766.0.1176668437]
+                         }
+                         SubTotals := true
+                         Visible
+                         {
+                           Column internal[DataSetDataColumn] [112884.0.420632428]
+                           {
+                             Width := 195
+                             SizedByUser := true
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'Process_MP [110880.2.1152117000]|Name [110702.0.510655046]'
+                             }
+                           }
+                           Column internal[DataSetDataColumn] [11766.1.490571536]
+                           {
+                             Width := 100
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'UnitPeriod [11766.0.881988410]|Start [101472.1.1929377045]'
+                             }
+                           }
+                           Column internal[DataSetDataColumn] [11766.1.490571537]
+                           {
+                             Width := 100
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'UnitPeriod [11766.0.881988410]|End [101472.1.1929377307]'
+                             }
+                           }
+                           Column internal[DataSetDataColumn] [11766.0.1176668437]
+                           {
+                             Width := 100
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'QuantityToProcess [11766.0.1140253578]'
+                             }
+                           }
+                           Column internal[DataSetDataColumn] [414702.1.53972253]
+                           {
+                             Width := 175
+                             SizedByUser := true
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'Key [1.2.81]'
+                               AttributePathIdentifier := "StartType('external[PeriodTask_MP]')
+                               Attribute([1.2.81])"
+                             }
+                           }
+                         }
+                       }
+                       Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="PeriodTask_MP Q11766_0_874292114">\n  <GEBFiltering Key="@Default_Filter1" TargetType="PeriodTask_MP Q11766_0_874292114">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@Process_MPName1" ElementType="PeriodTask_MP Q11766_0_874292114" ValueType="String">\n        <ColumnID>[414702.1.317561778]</ColumnID>\n        <BaseName>Process_MPName</BaseName>\n        <Name>Process_MPName</Name>\n        <Title>Name</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Process_MP.Name</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@UnitPeriodStart1" ElementType="PeriodTask_MP Q11766_0_874292114" ValueType="DateTime">\n        <ColumnID>[414702.1.317561779]</ColumnID>\n        <BaseName>UnitPeriodStart</BaseName>\n        <Name>UnitPeriodStart</Name>\n        <Title>Start</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>UnitPeriod.Start</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@UnitPeriodEnd1" ElementType="PeriodTask_MP Q11766_0_874292114" ValueType="DateTime">\n        <ColumnID>[414702.1.317561780]</ColumnID>\n        <BaseName>UnitPeriodEnd</BaseName>\n        <Name>UnitPeriodEnd</Name>\n        <Title>End</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>UnitPeriod.End</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@QuantityToProcess1" ElementType="PeriodTask_MP Q11766_0_874292114" ValueType="Real">\n        <ColumnID>[414702.1.317561781]</ColumnID>\n        <BaseName>QuantityToProcess</BaseName>\n        <Name>QuantityToProcess</Name>\n        <Title>QuantityToProcess</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>QuantityToProcess</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Key1" ElementType="PeriodTask_MP Q11766_0_874292114" ValueType="Key">\n        <ColumnID>[414702.1.317561782]</ColumnID>\n        <BaseName>Key</BaseName>\n        <Name>Key</Name>\n        <Title>Key</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Key</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@3">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@4" Column="@Key1">\n          <ColumnID>[414702.1.317561782]</ColumnID>\n          <GEBFilterColumnMatch Key="@5">\n            <Operation>=</Operation>\n            <Enabled>true</Enabled>\n            <RHSValue>\n              <RHSFreeValue Key="@6">\n                <StringValue></StringValue>\n                <Value>Key:[414702.1.314706304]</Value>\n              </RHSFreeValue>\n            </RHSValue>\n          </GEBFilterColumnMatch>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@7">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
+                       ColumnSort [112884.0.420632428] true false
+                       ColumnSort [11766.1.490571536] true false
+                       ColumnSort [11766.1.490571537] true false
+                       ColumnSort [11766.0.1176668437] true false
+                      }
+                     }
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [110880.4.1427969406]
+                  OBJECTTYPE SplitterPane
+                  CONTENTS
+                  {
+                   VISIBLE true
+                  }
+                 }
+                }
+               }
+              }
+             }
+             INFOOBJECT
+             {
+              KEY [110880.4.1427968323]
+              OBJECTTYPE SplitterPane
+              CONTENTS
+              {
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [110880.4.1427969947]
+                OBJECTTYPE SplitterWnd
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [110880.4.1427969948]
+                  OBJECTTYPE SplitterPane
+                  CONTENTS
+                  {
+                   Size 31.659249841068
+                   VISIBLE true
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [110880.4.1427981196]
+                    OBJECTTYPE List
+                    CONTENTS
+                    {
+                     Quantorrow := false
+                    }
+                    INFOOBJECTS
+                    {
+                     INFOOBJECT
+                     {
+                      KEY [11766.0.1791753785]
+                      OBJECTTYPE GUIDataSetLevel
+                      CONTENTS
+                      {
+                       Columns
+                       {
+                         Definition := [11766.0.1025088210]
+                         {
+                           [11766.1.490215920]
+                         }
+                         SubTotals := true
+                         Visible
+                         {
+                           Column internal[DataSetDataColumn] [11766.1.490215920]
+                           {
+                             Width := 145
+                             SizedByUser := true
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'Quantity [101320.0.110374989]'
+                             }
+                           }
+                           Column internal[DataSetDataColumn] [414702.1.19001156]
+                           {
+                             Width := 259
+                             SizedByUser := true
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'ProcessInput [110880.8.886850132]|downcast(OperationInput) [108486.1.157418918]|ProductID [113694.1.2134238792]'
+                               AttributePathIdentifier := "StartType('external[DependentDemand]')
+                               Node(R[110880.8.886850132], TT[108486.1.157418918], nondistinctive)
+                               Attribute([113694.1.2134238792])"
+                             }
+                           }
+                         }
+                       }
+                       ColumnSort [11766.1.490215920] true false
+                      }
+                     }
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [110880.4.1427969949]
+                  OBJECTTYPE SplitterPane
+                  CONTENTS
+                  {
+                   Size 68.340750158932
+                   VISIBLE true
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [110880.4.1427985019]
+                    OBJECTTYPE List
+                    CONTENTS
+                    {
+                     Quantorrow := false
+                    }
+                    INFOOBJECTS
+                    {
+                     INFOOBJECT
+                     {
+                      KEY [11766.0.1791753792]
+                      OBJECTTYPE GUIDataSetLevel
+                      CONTENTS
+                      {
+                       Columns
+                       {
+                         Definition := [11766.0.1025296083]
+                         {
+                           [11766.0.1025296085]
+                         }
+                         SubTotals := true
+                         Visible
+                         {
+                           Column internal[DataSetDataColumn] [11766.0.1025296085]
+                           {
+                             Width := 100
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'Quantity [112884.1.1160030032]'
+                             }
+                           }
+                           Column internal[DataSetDataColumn] [414702.1.19001111]
+                           {
+                             Width := 266
+                             SizedByUser := true
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'ProcessOutput [110880.8.945109647]|downcast(OperationOutput) [101318.0.90160276]|ProductID [113694.1.2134238792]'
+                               AttributePathIdentifier := "StartType('external[NewSupply]')
+                               Node(R[110880.8.945109647], TT[101318.0.90160276], nondistinctive)
+                               Attribute([113694.1.2134238792])"
+                             }
+                           }
+                           Column internal[DataSetDataColumn] [414702.1.55207096]
+                           {
+                             Width := 173
+                             SizedByUser := true
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'Start [108486.2.80172755]'
+                               AttributePathIdentifier := "StartType('external[NewSupply]')
+                               Attribute([108486.2.80172755])"
+                             }
+                           }
+                           Column internal[DataSetDataColumn] [414702.1.55207125]
+                           {
+                             Width := 194
+                             SizedByUser := true
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'AsProductionSupply [134266.1.5797947]|ProductInStockingPoint_MP [134266.1.5798354]|StockingPointID [108486.0.343831378]'
+                               AttributePathIdentifier := "StartType('external[NewSupply]')
+                               Node(R[134266.1.5797947], TT[134266.1.852406], distinctive)
+                               Node(R[134266.1.5798354], TT[11660.0.485565014], distinctive)
+                               Attribute([108486.0.343831378])"
+                             }
+                           }
+                           Column internal[DataSetConfigurableColumn] [414702.1.305339206]
+                           {
+                             Header := 'PeriodKey'
+                             Width := 243
+                             SizedByUser := true
+                             Subtotals := false
+                             Specific
+                             {
+                               Text := 'VALUE( object.PeriodTask_MP().Key() )'
+                               Alignment := '榛樿'
+                             }
+                           }
+                         }
+                       }
+                       Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="NewSupply Q11660_0_958335014">\n  <GEBFiltering Key="@Default_Filter1" TargetType="NewSupply Q11660_0_958335014">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@Quantity1" ElementType="NewSupply Q11660_0_958335014" ValueType="Real">\n        <ColumnID>[414702.1.317561786]</ColumnID>\n        <BaseName>Quantity</BaseName>\n        <Name>Quantity</Name>\n        <Title>Quantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Quantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@OperationOutputProductID1" ElementType="NewSupply Q11660_0_958335014" ValueType="String">\n        <ColumnID>[414702.1.317561787]</ColumnID>\n        <BaseName>OperationOutputProductID</BaseName>\n        <Name>OperationOutputProductID</Name>\n        <Title>ProductID</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ProcessOutput.astype(OperationOutput).ProductID</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Start1" ElementType="NewSupply Q11660_0_958335014" ValueType="DateTime">\n        <ColumnID>[414702.1.317561788]</ColumnID>\n        <BaseName>Start</BaseName>\n        <Name>Start</Name>\n        <Title>Start</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Start</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@AsProductionSupplyProductInStockingPointInPeriodProductInStockingPoint_MPStockingPointID1" ElementType="NewSupply Q11660_0_958335014" ValueType="String">\n        <ColumnID>[414702.1.317561789]</ColumnID>\n        <BaseName>AsProductionSupplyProductInStockingPointInPeriodProductInStockingPoint_MPStockingPointID</BaseName>\n        <Name>AsProductionSupplyProductInStockingPointInPeriodProductInStockingPoint_MPStockingPointID</Name>\n        <Title>StockingPointID</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>AsProductionSupply.ProductInStockingPoint_MP.StockingPointID</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBProcessColumn Key="@PeriodKey1" ElementType="NewSupply Q11660_0_958335014" ValueType="Key">\n        <ColumnID>[414702.1.317561790]</ColumnID>\n        <BaseName>PeriodKey</BaseName>\n        <Name>PeriodKey</Name>\n        <Title>PeriodKey</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <GEBDerivation Key="@3">\n          <GEBDerivationBase Key="@4" TargetType="NewSupply Q11660_0_958335014">\n            <ColumnID>[0.0.0]</ColumnID>\n            <GEBNodeDerivation Key="@5">\n              <Operation>FirstExpression</Operation>\n              <Conditional>false</Conditional>\n              <Multiple>false</Multiple>\n              <AllowWildcards>false</AllowWildcards>\n              <GEBNodeDerivationExpression Key="@6">\n                <GEBNodeDerivationExpressionBody Key="@7">\n                  <ExpressionText>object.PeriodTask_MP().Key()</ExpressionText>\n                  <Converter>\n                    <ZeroConverter Key="@8">\n                      <IsStandard>true</IsStandard>\n                      <IsISO>false</IsISO>\n                      <IsCustom>false</IsCustom>\n                      <ConversionType>0</ConversionType>\n                    </ZeroConverter>\n                  </Converter>\n                </GEBNodeDerivationExpressionBody>\n              </GEBNodeDerivationExpression>\n            </GEBNodeDerivation>\n          </GEBDerivationBase>\n        </GEBDerivation>\n      </GEBProcessColumn>\n      <GEBFilter Key="@9">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@10" Column="@AsProductionSupplyProductInStockingPointInPeriodProductInStockingPoint_MPStockingPointID1">\n          <ColumnID>[414702.1.317561789]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@11">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
+                       ColumnSort [414702.1.19001111] true false
+                       ColumnSort [414702.1.55207096] true false
+                      }
+                     }
+                    }
+                   }
+                  }
+                 }
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [666.6.1042075]
+      SINGLEINSTANCE false
+      ID '杩囨护'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Dialog
+      CREATETYPE tlpFiltering
+      CONTENTS
+      {
+       State := normal
+       (0,0,0,0)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5516;]TabIdx[5]Selection[NONE]
+      }
+      BASEINFOOBJECTS
+      {
+       BASEINFOOBJECT
+       {
+        KEY [666.6.1042075]
+        OBJECTTYPE GUIContainerComponent
+        COMPONENTDATA
+        {
+         [666.6.1042075]:[101180.0.423432963]:[101180.0.423434508]:[666.6.33523821]:[101180.0.674802547]:[100664.0.672641496] STR 'true'
+         [666.6.1042075]:[101180.0.423432963]:[101180.0.423439415]:[666.6.33523821]:[101180.0.674802547]:[100664.0.672641496] STR 'true'
+        }
+       }
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [101180.0.423434508]
+        OBJECTTYPE GUIComponent
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [100664.0.634694330]
+          OBJECTTYPE SplitterWnd
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [100664.0.634694331]
+            OBJECTTYPE SplitterPane
+            CONTENTS
+            {
+             VISIBLE true
+            }
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [100664.0.681599437]
+              OBJECTTYPE List
+              CONTENTS
+              {
+               Quantorrow := false
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [100664.0.681599439]
+                OBJECTTYPE GUIDataSetLevel
+                CONTENTS
+                {
+                 Columns
+                 {
+                   Definition := [121918.0.881777301]
+                   {
+                     [121918.0.881787967]
+                   }
+                   SubTotals := true
+                   Visible
+                   {
+                     Column internal[DataSetDataColumn] [121918.0.881787967]
+                     {
+                       Width := 100
+                       Subtotals := false
+                       Specific
+                       {
+                         DataPath := 'Name [1.2.5343]'
+                       }
+                     }
+                   }
+                 }
+                 DataMemberSort 'SortIndex [1.2.7432]' true true
+                }
+               }
+              }
+             }
+            }
+           }
+           INFOOBJECT
+           {
+            KEY [100664.0.634694332]
+            OBJECTTYPE SplitterPane
+            CONTENTS
+            {
+             VISIBLE true
+            }
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [100664.0.634737763]
+              OBJECTTYPE SplitterWnd
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [100664.0.634737764]
+                OBJECTTYPE SplitterPane
+                CONTENTS
+                {
+                 Size 99.921052631579
+                 VISIBLE true
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [100664.0.634737766]
+                  OBJECTTYPE Selection
+                  CONTENTS
+                  {
+                   BoundValue 'Quantity'
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [100664.0.634737768]
+                    OBJECTTYPE GUIDataSetLevel
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [666.6.33522193]
+                       {
+                         [666.6.36059183]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [666.6.36059183]
+                         {
+                           Header := 'Name'
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'Name [1.2.3778]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [666.6.36059183] true false
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [101180.0.650773001]
+                  OBJECTTYPE Selection
+                  CONTENTS
+                  {
+                   BoundValue '='
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [101180.0.650773003]
+                    OBJECTTYPE GUIDataSetLevel
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [666.6.37024730]
+                       {
+                         [101180.0.649255714]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [101180.0.649255714]
+                         {
+                           Header := 'x'
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'Operation [1.2.3779]'
+                           }
+                         }
+                       }
+                     }
+                     DataMemberSort 'Position [1.2.3780]' true true
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [666.6.40803406]
+                  OBJECTTYPE Selection
+                  CONTENTS
+                  {
+                   BoundValue '12'
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [666.6.40803422]
+                    OBJECTTYPE GUIDataSetLevel
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [101180.0.647865904]
+                       {
+                         [101180.0.647981465]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[RHSValueDataSetColumn] [101180.0.647981465]
+                         {
+                           Header := 'x'
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'RHSValue [1.3.3305]|StringValue [1.2.5531]'
+                           }
+                         }
+                       }
+                     }
+                     DataMemberSort 'Position [1.2.3781]' true true
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [100664.0.634737776]
+                  OBJECTTYPE List
+                  CONTENTS
+                  {
+                   Quantorrow := false
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [100664.0.634737791]
+                    OBJECTTYPE GUIDataSetLevel
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [101180.0.647784541]
+                       {
+                         [101180.0.647785023]
+                         [101180.0.648130649]
+                         [101180.0.667481201]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [101180.0.647785023]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'GEBUIFilterColumn [1.3.3296]|Name [1.2.3778]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [101180.0.648130649]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'OperationDisplay [1.2.3770]'
+                           }
+                         }
+                         Column internal[RHSValueDataSetColumn] [101180.0.667481201]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'RHSValue [1.3.4449]|StringValue [1.2.5531]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [101180.0.647785023] true false
+                     DataMemberSort 'Position [1.2.3820]' true true
+                    }
+                   }
+                  }
+                 }
+                }
+               }
+               INFOOBJECT
+               {
+                KEY [100664.0.634737792]
+                OBJECTTYPE SplitterPane
+                CONTENTS
+                {
+                 VISIBLE false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [112950.0.657398972]
+                  OBJECTTYPE CheckBox
+                  CONTENTS
+                  {
+                   Checkstate 1
+                  }
+                 }
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [101180.0.423439415]
+        OBJECTTYPE GUIComponent
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [100664.0.634694330]
+          OBJECTTYPE SplitterWnd
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [100664.0.634694331]
+            OBJECTTYPE SplitterPane
+            CONTENTS
+            {
+             VISIBLE false
+            }
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [100664.0.681599437]
+              OBJECTTYPE List
+              CONTENTS
+              {
+               Quantorrow := false
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [100664.0.681599439]
+                OBJECTTYPE GUIDataSetLevel
+                CONTENTS
+                {
+                 Columns
+                 {
+                   Definition := [121918.0.881777301]
+                   {
+                     [121918.0.881787967]
+                   }
+                   SubTotals := true
+                   Visible
+                   {
+                     Column internal[DataSetDataColumn] [121918.0.881787967]
+                     {
+                       Width := 100
+                       Subtotals := false
+                       Specific
+                       {
+                         DataPath := 'Name [1.2.5343]'
+                       }
+                     }
+                   }
+                 }
+                 DataMemberSort 'SortIndex [1.2.7432]' true true
+                }
+               }
+              }
+             }
+            }
+           }
+           INFOOBJECT
+           {
+            KEY [100664.0.634694332]
+            OBJECTTYPE SplitterPane
+            CONTENTS
+            {
+             Size 99.8686947373494
+             VISIBLE true
+            }
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [100664.0.634737763]
+              OBJECTTYPE SplitterWnd
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [100664.0.634737764]
+                OBJECTTYPE SplitterPane
+                CONTENTS
+                {
+                 Size 99.921052631579
+                 VISIBLE true
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [100664.0.634737766]
+                  OBJECTTYPE Selection
+                  CONTENTS
+                  {
+                   BoundValue ''
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [100664.0.634737768]
+                    OBJECTTYPE GUIDataSetLevel
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [666.6.33522193]
+                       {
+                         [666.6.36059183]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [666.6.36059183]
+                         {
+                           Header := 'Name'
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'Name [1.2.3778]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [666.6.36059183] true false
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [101180.0.650773001]
+                  OBJECTTYPE Selection
+                  CONTENTS
+                  {
+                   BoundValue ''
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [101180.0.650773003]
+                    OBJECTTYPE GUIDataSetLevel
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [666.6.37024730]
+                       {
+                         [101180.0.649255714]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [101180.0.649255714]
+                         {
+                           Header := 'x'
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'Operation [1.2.3779]'
+                           }
+                         }
+                       }
+                     }
+                     DataMemberSort 'Position [1.2.3780]' true true
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [666.6.40803406]
+                  OBJECTTYPE Selection
+                  CONTENTS
+                  {
+                   BoundValue ''
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [666.6.40803422]
+                    OBJECTTYPE GUIDataSetLevel
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [101180.0.647865904]
+                       {
+                         [101180.0.647981465]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[RHSValueDataSetColumn] [101180.0.647981465]
+                         {
+                           Header := 'x'
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'RHSValue [1.3.3305]|StringValue [1.2.5531]'
+                           }
+                         }
+                       }
+                     }
+                     DataMemberSort 'Position [1.2.3781]' true true
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [100664.0.634737776]
+                  OBJECTTYPE List
+                  CONTENTS
+                  {
+                   Quantorrow := false
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [100664.0.634737791]
+                    OBJECTTYPE GUIDataSetLevel
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [101180.0.647784541]
+                       {
+                         [101180.0.647785023]
+                         [101180.0.648130649]
+                         [101180.0.667481201]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [101180.0.647785023]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'GEBUIFilterColumn [1.3.3296]|Name [1.2.3778]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [101180.0.648130649]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'OperationDisplay [1.2.3770]'
+                           }
+                         }
+                         Column internal[RHSValueDataSetColumn] [101180.0.667481201]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'RHSValue [1.3.4449]|StringValue [1.2.5531]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [101180.0.647785023] true false
+                     DataMemberSort 'Position [1.2.3820]' true true
+                    }
+                   }
+                  }
+                 }
+                }
+               }
+               INFOOBJECT
+               {
+                KEY [100664.0.634737792]
+                OBJECTTYPE SplitterPane
+                CONTENTS
+                {
+                 VISIBLE false
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
     }
    }
   }
diff --git a/_var/_Main/ProjSettings/MacroPlannerWebApp/Views/Capacity___sale_budge.vw b/_var/_Main/ProjSettings/MacroPlannerWebApp/Views/Capacity___sale_budge.vw
deleted file mode 100644
index 780f9e5..0000000
--- a/_var/_Main/ProjSettings/MacroPlannerWebApp/Views/Capacity___sale_budge.vw
+++ /dev/null
@@ -1,205 +0,0 @@
-Quintiq file version 2.0
-{
-  viewcontents
-  {
-    forms
-    {
-      form_legacy_1
-      {
-        title: 'Scenario manager'
-        shown: true
-        componentID: 'FormScenarioManager'
-        layout
-        {
-          mode: 'open'
-          rowPosition: 1
-          rowSpan: 8
-          columnPosition: 1
-          columnSpan: 5
-        }
-        components
-        {
-          FormScenarioManager_ListScenario
-          {
-          }
-          FormScenarioManager_DataSetLevelScenario
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 90
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 197
-            }
-            column_ChangedBy
-            {
-              columnId: 'ChangedBy'
-              dataPath: 'ChangedBy'
-              dataType: 'string'
-              title: 'Changed by'
-              index: 2
-              subtotals: ''
-              width: 91
-            }
-            column_ChangedOn
-            {
-              columnId: 'ChangedOn'
-              dataPath: 'ChangedOn'
-              dataType: 'datetime'
-              title: 'Changed on'
-              index: 3
-              subtotals: ''
-              width: 99
-            }
-            column_StorageMode
-            {
-              columnId: 'StorageMode'
-              dataPath: 'StorageMode'
-              dataType: 'string'
-              title: 'StorageMode'
-              index: 4
-              subtotals: ''
-              width: 40
-            }
-          }
-        }
-      }
-      form_FormOptimizerPuzzles
-      {
-        title: 'Optimizer Puzzles'
-        shown: false
-        componentID: 'FormOptimizerPuzzles'
-        layout
-        {
-          mode: 'dockright'
-          index: 0
-        }
-        components
-        {
-          FormOptimizerPuzzles_ListOptimizerPuzzles
-          {
-          }
-          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 109
-            }
-            column_Description
-            {
-              columnId: 'Description'
-              dataPath: 'Description'
-              dataType: 'string'
-              title: '鎻忚堪'
-              index: 2
-              subtotals: ''
-              width: 207
-            }
-          }
-        }
-      }
-      form_FormKPI
-      {
-        title: 'KPI Dashboard'
-        shown: true
-        componentID: 'FormKPI'
-        layout
-        {
-          mode: 'dockright'
-          index: 1
-        }
-        components
-        {
-          FormKPI_PanelKPI
-          {
-            sizeRatio: 1
-            activeChild: 'PanelKPISelection'
-          }
-          FormKPI_PanelKPIDashboard
-          {
-            sizeRatio: 1
-          }
-          FormKPI_PanelKPISelection
-          {
-            sizeRatio: 1
-          }
-          FormKPI_ListKPISelection
-          {
-            QuillViewData
-            {
-              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
-            }
-          }
-          FormKPI_DataSetLevelKPISelection
-          {
-            groupDepth: -1
-            column_All_constraints
-            {
-              columnId: 'All constraints'
-              dataPath: 'All constraints'
-              dataType: 'string'
-              title: 'All constraints'
-              index: 0
-              subtotals: ''
-              width: 32
-            }
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              title: '鍚嶇О'
-              index: 1
-              subtotals: ''
-              width: 200
-            }
-          }
-        }
-      }
-    }
-    userconfigurableinformation
-    {
-    }
-    index: 0
-    image: 'CHART_HI_LO'
-    page: 'ActionBarPageScenarioComparison'
-    group: ''
-    description: ''
-  }
-  formatversion: 2
-  id: 'Capacity___sale_budge'
-  name: 'Capacity & sale budge'
-  isglobal: false
-  isroot: true
-}

--
Gitblit v1.9.3