From d5e46a7a9f2cb9123b9aafb39a20e14059faa2e4 Mon Sep 17 00:00:00 2001
From: Kevin Kok Khah Whey <khahwhey.kok@3ds.com>
Date: 星期三, 18 十月 2023 10:55:59 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/TIANMA_JITUAN into dev_Kevin

---
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Component_ListPanelMaterialTM.def                                                                                 |    4 
 _Main/BL/Type_GlobalOTDLog/_ROOT_Type_GlobalOTDLog.qbl                                                                                                                        |    9 
 _Main/BL/Type_VersionControl/StaticMethod_GetVersionInfo.qbl                                                                                                                  |    6 
 _Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl                                                                                                         |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl                                                                                          |   22 
 _Main/BL/Type_MacroPlan/StaticMethod_DoASync.qbl                                                                                                                              |   25 
 _Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate.qbl                                                                                                     |   11 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def                                                                                                |   20 
 _Main/BL/Dataset_GlobalOTDLog/_ROOT_Dataset_GlobalOTDLog.qbl                                                                                                                  |    9 
 _Main/BL/EDI/Broker_GlobalOTDSOP_CARRC_Import.qbl                                                                                                                             |    5 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingSalesSegmentData.qbl                                                                                                             |   60 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Component_ListCapacityAndSaleBudgeFilterMonth.def                                                   |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormIT/Response_DataHolderPanelIT_OnCreated.def                                                                                         |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormIT/Response_DataHolderPanelIT_OnDataChanged.def                                                                                     |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonMaterialExportAndImport_OnCl.def                |    2 
 _Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_CreateIfNotExist.qbl                                                                                        |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_PanelButton_ButtonTransform_OnClick.def                                                              |    5 
 _Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_CreateIfNotExist.qbl                                                                                                  |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Method_NewWorkOrderType.def                                                                               |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormProducts/Response_TIANMA_JITUAN_ListProduct_844_MenuMarkingPanelMaterial_OnClick.def                                                |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/Response_DataHolderPanelTianHua_OnCreated.def                                                                  |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Component_ListCapacityAndSaleBudgeFilterItem.def                                                     |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_ListFillingCapacityOrder_MenuSelectAll_OnClick.def                                                    |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialVehicle/Component_ListPanelMaterialVehicle.def                                                                         |    4 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_GlobalOTDSOP_GlobalOTDSOP_CapacityAn.qbl                                                                           |   23 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonSendPR_OnClick.def                                                                             |    4 
 _Main/BL/Type_DataDistributionLog/Attribute_ErrorMessage.qbl                                                                                                                  |    8 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl                                                                                                           |   67 
 _Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblTM18_OnCreated.def                                                                         |    2 
 _Main/BL/Relations/Relation_PRHistoryData_GlobalOTDSOP_GlobalOTDSOP_PRHistoryData.qbl                                                                                         |   23 
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_Test.qbl                                                                                                                 |   15 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_update.qbl                                                                                                       |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonGenerateTestData_OnClick.def                                                                    |   25 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_GlobalOTDSOP_GlobalOTDSOP_CapacityA.qbl                                                                           |   23 
 _Main/BL/Type_PRData/StaticMethod_DoCall.qbl                                                                                                                                  |    5 
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_Test1.qbl                                                                                                                |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def                                                                   |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_listContextMenuFillingCapacityOrder.def                                                              |   12 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_saveData.qbl                                                                                                    |    2 
 _Main/UI/MacroPlannerWebApp/Views/Test.vw                                                                                                                                     |   38 
 _Main/BL/Type_VersionStatus/StaticMethod_CreateOrUpdate.qbl                                                                                                                   |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def                                                                        |    2 
 _Main/BL/Type_PRHistoryData/Method_PrintCall.qbl                                                                                                                              |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Component_ListDataDistributionLog.def                                                                           |   59 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Component_ListCapacityAndSaleBudgeFilterYear.def                                                     |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialAutomotiveElectronics/Response_DataHolderPanelAutomotiveElectronics_OnCreated.def                                      |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByHalfYear.qbl                                                                                               |    2 
 _Main/BL/Type_GlobalOTDLog/StaticMethod_GetDatasetName.qbl                                                                                                                    |    6 
 _Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Export.qbl                                                                                              |    4 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Component_pnlContent.def                                                                               |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_ButtonGenerateCapacityAllocationR#39.def                          |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Response_pnlActions_btnCancel_OnClick.def                                                                        |   15 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def                                                                           |    3 
 _Main/BL/Type_VersionControl/StaticMethod_CreateNewVersion.qbl                                                                                                                |    2 
 _Main/BL/Type_MacroPlan/Method_MappingUnitOfMeasureData.qbl                                                                                                                   |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def                                                                        |    1 
 _Main/BL/Type_GlobalOTDSOP/StaticMethod_OnServerStartup.qbl                                                                                                                   |   27 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason#000.qbl                                                                                             |   26 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_GlobalOTDSOP_GlobalOTDSOP_Cap.qbl                                                                           |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_ListWorkOrderType.def                                                                                       |    4 
 _Main/BL/Type_GlobalOTDSOP/StaticMethod_RefreshCapacityAndSaleBudgeFilter.qbl                                                                                                 |   29 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_getExistByMatCode.qbl                                                                                            |    2 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_GlobalOTDSOP_GlobalOTDSOP_Capaci.qbl                                                                           |   23 
 _Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedgingEx.qbl                                                                                                              |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Method_New.def                                                                         |    2 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingUnitData.qbl                                                                                                                     |  106 
 _Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblTM17_OnCreated.def                                                                         |    2 
 _Main/BL/Type_GlobalDTOTable/Method_InitTestData#12.qbl                                                                                                                       |   59 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInYear.qbl                                                                                                   |   18 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInYear.qbl                                                                                              |   18 
 _Main/BL/Type_GlobalDTOTable/_ROOT_Type_GlobalOTDTable.qbl                                                                                                                    |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_listContextMenuCustomerAndFillingCapacityOrder.def                                                  |   15 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl                                                                                            |   26 
 _Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/_ROOT_Component_FormDataDistributionLog.def                                                                     |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick#549.def                                                            |    3 
 _Main/BL/Type_PanelMaterialSportsHealth/StaticMethod_ReceiveDataGeneration.qbl                                                                                                |   14 
 _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl                                                                                                             |   35 
 _Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlActions_btnOk_OnClick.def                                                                                  |    2 
 _Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl                                                                            |    2 
 _Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetMaterialData.qbl                                                                                                             |    3 
 _Main/BL/Type_ManufactureLTImputation/StaticMethod_Transfer#25.qbl                                                                                                            |   15 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_ProductInLane.qbl                                                                                    |   13 
 _Main/BL/Type_PRData/StaticMethod_Export.qbl                                                                                                                                  |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick.def             |    2 
 _Main/BL/Relations/Relation_MappingVersionControl_GlobalOTDSOP_GlobalOTDSOP_MappingVersionContr.qbl                                                                           |   23 
 _Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblAutomotiveElectronics_OnCreated.def                                                        |    2 
 _Main/BL/Type_VersionControl/StaticMethod_FindReleasedVersions.qbl                                                                                                            |    7 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuCall_OnClick.def                                                                                    |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_ListFillingCapacityOrder_MenuDelete_OnClick.def                                                       |    1 
 _Main/BL/Relations/Relation_CapacityAllocationResultsRuleConfiguration_GlobalOTDSOP_GlobalOTDSO.qbl                                                                           |   23 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingProductData.qbl                                                                                                                  |   94 
 _Main/BL/Type_PRHistoryData/StaticMethod_Export#527.qbl                                                                                                                       |  199 +
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingActualPISPIPData.qbl                                                                                                             |   55 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_DeleteIfExistByMatCode#526.qbl                                                                                   |    2 
 _Main/BL/Relations/Relation_VersionStatus_GlobalOTDSOP_GlobalOTDSOP_VersionStatus.qbl                                                                                         |   23 
 _Main/BL/Type_Global_MappingOperation/StaticMethod_DoASyncFindMinSeq.qbl                                                                                                      |   17 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_DataHolderCurrentUser_OnDataChanged.def                                                  |   33 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/Response_DataHolderPanelSpecializedDisplay_OnDataChanged.def                                        |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSportsHealth/Response_DataHolderPanelSportsHealth_OnDataChanged.def                                                    |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByMonth.qbl                                                                                                  |   95 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationData.qbl                                                                                                                |   98 
 _Main/BL/Type_DataDistributionLog/_ROOT_Type_DataDistributionLog.qbl                                                                                                          |    9 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDSOP_Glo.qbl                                                                           |   23 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditIssueWorkOrder/Component_pnlContent.def                                                                                 |    4 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByYear.qbl                                                                                                       |    3 
 _Main/BL/Type_DataDistributionLog/Attribute_ExecuteUser.qbl                                                                                                                   |    8 
 _Main/BL/Type_VersionControl/StaticMethod_FindLatestUpdateVersion.qbl                                                                                                         |    4 
 _Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_Initial.qbl                                                                                                         |    2 
 _Main/BL/Type_Global_MappingProviderCapacity/StaticMethod_GetByProductId.qbl                                                                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/_ROOT_Component_DialogDataDistribution.def                                                                       |   33 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_GlobalOTDSOP_GlobalOTDSOP_Ca.qbl                                                                           |   23 
 _Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl                                                                                                                  |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM17/Response_DataHolderPanelTM17_OnDataChanged.def                                                                    |    2 
 _var/_Main/ProjSettings/MacroPlannerWebApp/Views/ManufactureLT.vw                                                                                                             |  239 +
 _Main/BL/Type_MacroPlan/StaticMethod_DoSync.qbl                                                                                                                               |    2 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def                                                                                     |   15 
 _Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTProcessSection_MenuApplyManufactureLTProcessSe#444.def                                  |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl                                                                                                  |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_ListCapacityAllocationResultsRuleConfiguration_MenuGenerateByPeggin.def         |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick#545.def                                                   |    3 
 _Main/BL/Type_GlobalOTDSOP/StaticMethod_GetVersionData.qbl                                                                                                                    |    4 
 _Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Method_DataDistribution.def                                                                                      |   16 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_export.qbl                                                                                                  |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/_ROOT_Component_FormVersionOfSOP.def                                                                                   |    4 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_CreateOrUpdateData.qbl                                                                                            |   34 
 _Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyInputSource_GlobalOTDSOP_GlobalOTDSOP_.qbl                                                                           |   23 
 _Main/BL/Type_GlobalOTDSOP/_ROOT_Type_GlobalOTDSOP.qbl                                                                                                                        |    9 
 _Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblSpecializedDisplay_OnCreated.def                                                           |    2 
 .gitignore                                                                                                                                                                    |    2 
 _Main/BL/Relations/Relation_ManufactureLTImputation_GlobalOTDSOP_GlobalOTDSOP_ManufactureLTImpu.qbl                                                                           |   23 
 _Main/BL/Type_PRData/StaticMethod_Export#346.qbl                                                                                                                              |  209 +
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuCreateShowData_OnClick.def                                                             |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialVehicle/Response_DataHolderPanelMaterialVehicle_OnCreated.def                                                          |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderFresh_OnClick.def                                             |    2 
 _Main/BL/Type_MacroPlan/StaticMethod_DoASync#253.qbl                                                                                                                          |  166 +
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_GetByMatCode.qbl                                                                                                 |   15 
 _Main/BL/Type_PanelMaterialTianHua/StaticMethod_ReceiveDataGeneration.qbl                                                                                                     |   14 
 _Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblSportsHealth_OnCreated.def                                                                 |    2 
 _Main/BL/Type_VersionControl/StaticMethod_CopyVersion.qbl                                                                                                                     |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblIT_OnCreated.def                                                                           |    2 
 _Main/BL/Type_Global_MappingProduct_MP/StaticMethod_GetByProductId.qbl                                                                                                        |    4 
 _Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateData.qbl                                                                                                            |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_TIANMA_JITUAN_PanelGeneral_549_checkboxEnableSync_OnChanged.def                                       |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_CopyScenario.def                                                                                        |    2 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/StaticMethod_CreateIfNotExist.qbl                                                                                         |    2 
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl                                                                                                 |   46 
 _Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl                                                                                                                    |    2 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_GlobalOTDSOP_GlobalOTDSOP_CapacityAndS.qbl                                                                           |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Component_ListScenario.def                                                                                          |   24 
 _Main/BL/Type_VersionControl/StaticMethod_FindByFullVersionID.qbl                                                                                                             |    2 
 _Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Apply#202.qbl                                                                                                          |    7 
 _Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl                                                                                                                          |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/Component_ListManufactureLT#943.def                                                                                   |    6 
 _Main/BL/Type_GlobalOTDLog/StaticMethod_GetLoadedDataset.qbl                                                                                                                  |   20 
 _Main/BL/Type_DataDistributionLog/Attribute_ScenarioName.qbl                                                                                                                  |    8 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_SynchronizeData.qbl                                                                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Response_pnlActions_btnOk_OnClick.def                                                                  |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_Import_OnClick.def                                         |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def                                                  |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblMaterialVehicle_OnCreated.def                                                              |    2 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationCostData.qbl                                                                                                            |   75 
 _Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTImputation_MenuApplyManufactureLTImputation_OnClic.def                                  |    2 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_deleteIfExistByMatCode.qbl                                                                                       |    2 
 _Main/UI/MacroPlanner/Component_DialogManufactureLTImputation/Method_New.def                                                                                                  |    2 
 _Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl                                                                                                                 |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Component_pnlContent.def                                                                                         |   58 
 _Main/BL/Type_Forecast/StaticMethod_DoASync.qbl                                                                                                                               |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/Component_ListPanelMaterialTianHua.def                                                                         |    4 
 _Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_ListScenario_MenuScenarioNewMacroPlan_OnClick.def                                                       |   12 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl                                                                                            |    2 
 _Main/BL/Relations/Relation_PanelMaterialAll_GlobalOTDSOP_GlobalOTDSOP_PanelMaterialAll.qbl                                                                                   |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/Response_ButtonLoad_OnClick#417.def                                                                                   |   20 
 _Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                             |   45 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_SynchronizeInventoryTargets.qbl                                                                                  |    4 
 _Main/UI/MacroPlannerWebApp/Views/数据分发.vw                                                                                                                                     |  250 +
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_CreateIfNotExist.qbl                                                                                             |    2 
 _var/_Main/ModelSettings/Common/Dev-68/_ROOT_Role_Dev-68.properties                                                                                                           |  575 ++++
 _Main/BL/Dataset_GlobalOTDSOP/_ROOT_Dataset_GlobalOTDSOP.qbl                                                                                                                  |    9 
 _Main/BL/Type_PriorityResult/StaticMethod_CalculateBracketScore.qbl                                                                                                           |    2 
 _Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                        |   45 
 _Main/BL/Type_GlobalOTDSOP/StaticMethod_GetDatasetName.qbl                                                                                                                    |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM17/Component_ListPanelMaterialTM.def                                                                                 |    4 
 _Main/BL/Type_GlobalOTDSOP/StaticMethod_ReceivingPanelMaterials.qbl                                                                                                           |    4 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_CheckThePrecedingColumn.qbl                                                                                       |    4 
 _Main/BL/Type_VersionControl/StaticMethod_ReleaseNewVersion.qbl                                                                                                               |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/Component_ListPanelMaterialSpecializedDisplay.def                                                   |    4 
 _Main/BL/Type_ManufactureLTImputation/StaticMethod_Refresh.qbl                                                                                                                |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Component_ListPRHistoryData#844.def                                                                                   |    4 
 _Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl                                                                                                                              |   38 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl                                                                                               |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Response_PanelPRHistoryButton_ButtonExportPRHistory_OnClick.def                                                       |    3 
 _Main/BL/Type_MacroPlan/StaticMethod_DoSync#618.qbl                                                                                                                           |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonSynchronizeInventoryTargets_.def                |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderRelease_OnClick.def                                           |    2 
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate1.qbl                                                                                                          |   42 
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration3.qbl                                                                                                 |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSportsHealth/Response_DataHolderPanelSportsHealth_OnCreated.def                                                        |    2 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_GetBusnessStrings.qbl                                                                                                               |   31 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/StaticMethod_upload.qbl                                                                                                |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick.def                                                       |    3 
 _Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl                                                                                                                    |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_ListCapacityAllocationResultsRuleConfiguration.def                             |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/Response_DataHolderPanelTianHua_OnDataChanged.def                                                              |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/_ROOT_Component_FormManufactureLT.def                                                                                 |   11 
 _Main/BL/Type_GlobalOTDSOP/Method_SynchronizeOrders.qbl                                                                                                                       |    0 
 _Main/BL/Type_PRHistoryData/StaticMethod_Export.qbl                                                                                                                           |   13 
 _Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Component_ListManufactureLTImputation.def                                                                         |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Method_ClickBtnOk.def                                                                                  |   17 
 _Main/BL/Type_GlobalOTDSOP/Method_ReceivingPanelMaterials.qbl                                                                                                                 |    0 
 _Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblTianHua_OnCreated.def                                                                      |    2 
 _Main/BL/Type_GlobalDTOTable/Method_InitTestDataByYear.qbl                                                                                                                    |   68 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByMonth.qbl                                                                                                      |    2 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/StaticMethod_ReceiveDataGeneration.qbl                                                                                       |   14 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingCustomerOrderData.qbl                                                                                                            |   58 
 _Main/BL/Type_CustomerOrder/StaticMethod_DoASync.qbl                                                                                                                          |   18 
 _Main/BL/Type_VersionControl/StaticMethod_FindLatestVersion.qbl                                                                                                               |    4 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_GlobalOTDSOP_GlobalOTDSOP_Capacity.qbl                                                                           |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_ListMaterialMaterialLabelingAndPlanningStrategy#880.def                               |    4 
 _Main/BL/Type_BaseConversionFactor/StaticMethod_DoASync.qbl                                                                                                                   |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_Export_OnClick.def                                         |    2 
 _Main/BL/EDI/Broker_GlobalOTDSOP_CARRC_Export.qbl                                                                                                                             |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuSaveNewVersion_OnClick.def                                                  |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Response_ListDataDistributionLog_MenuSelectionAll_OnClick.def                                                   |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Component_listContextMenuDataDistributionLog.def                                                                |   36 
 _Main/BL/Type_Global_MappingLane/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                                    |   77 
 _Main/BL/Type_DataDistributionLog/StaticMethod_OnError.qbl                                                                                                                    |   18 
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate.qbl                                                                                                           |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def                                                  |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_listContextMenuInterfaceTest.def                                                                            |    2 
 _Main/BL/Type_MacroPlan/StaticMethod_DoASyncSuccess.qbl                                                                                                                       |   16 
 _Main/BL/Type_VersionStatus/StaticMethod_GetBusinessTypeStatus.qbl                                                                                                            |    2 
 _Main/BL/Type_Global_MappingOperation/StaticMethod_GetByProductId.qbl                                                                                                         |    4 
 _Main/BL/EDI/Broker_Broker_OTD_VersionControl.qbl                                                                                                                             |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditIssueWorkOrder/Response_pnlContent_ddlWorkOrderType_OnCreated.def                                                       |    4 
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration.qbl                                                                                                  |   26 
 _Main/BL/Relations/Relation_WorkOrderType_GlobalOTDSOP_GlobalOTDSOP_WorkOrderType.qbl                                                                                         |   23 
 _Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Import.qbl                                                                                              |    4 
 _Main/BL/Type_CapacityAllocationResults/DeclarativeReferenceRelation_CalcCapacityAllocationResultsRuleConfiguration.qbl                                                       |    2 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingBaseConversionFactorData.qbl                                                                                                     |   22 
 _Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning#662.qbl                                                                                                                  |    7 
 _Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTProcessSection_MenuRefreshManufactureLTProcessSect.def                                  |    2 
 _Main/BL/Type_VersionStatus/StaticMethod_FindLatestStatus.qbl                                                                                                                 |    4 
 _Main/UI/MacroPlanner/Component_DialogManufactureLTImputation/Method_New#221.def                                                                                              |    2 
 _Main/BL/Relations/Relation_VersionControl_GlobalOTDSOP_GlobalOTDSOP_VersionControl.qbl                                                                                       |   23 
 _Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                         |   45 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuScenarioDataDistribution_OnClick.def                                        |   21 
 _Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Response_SelectionScenario_OnSelectionChanged.def                                                                  |    7 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_SetOrgCodeFromForecast.qbl                                                                                          |   21 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingForecastData.qbl                                                                                                                 |   50 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnC#663.def |    2 
 _Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedging.qbl                                                                                                                |   12 
 _Main/BL/Type_ManufactureLTImputation/StaticMethod_CreateOrUpdate.qbl                                                                                                         |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Response_DataHolderPanelTM18_OnCreated.def                                                                        |    2 
 _var/_Main/ProjSettings/MacroPlanner/Views/X_分析视图_[414702.1.50321581].vw                                                                                                      | 1188 +++++++-
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingProductInLaneData.qbl                                                                                                            |   26 
 _Main/BL/Type_DataDistributionLog/StaticMethod_OnSuccess.qbl                                                                                                                  |   14 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMData.qbl                                                                                                             |  160 +
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInPCSInYear.qbl                                                                                                |   18 
 _Main/BL/Type_GlobalOTDSOP/StaticMethod_GetLoadedDataset.qbl                                                                                                                  |   20 
 _Main/BL/Type_UnitOfMeasure_MP/StaticMethod_DoASync.qbl                                                                                                                       |   17 
 _Main/BL/Type_Global_MappingLaneLeg/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                                 |   60 
 _Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Response_pnlActions_btnOk_OnClick.def                                                                            |   50 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuRelaeaseNewVersion_OnClick.def                                              |    4 
 _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl                                                                                                               |    0 
 _Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl                                                                                                        |    2 
 _Main/BL/Type_InventoryValueAndCost/StaticMethod_DoASync.qbl                                                                                                                  |   16 
 _Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategy_GlobalOTDSOP_GlobalOTDSOP_MatAttrSett.qbl                                                                           |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialAutomotiveElectronics/Response_DataHolderPanelAutomotiveElectronics_OnDataChanged.def                                  |    2 
 _Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate0.qbl                                                                                                    |   13 
 _Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning.qbl                                                                                                                      |   10 
 _Main/BL/Type_PRHistoryData/Method_Recall.qbl                                                                                                                                 |    2 
 _Main/BL/Relations/Relation_CapacityAllocationResults_GlobalOTDSOP_GlobalOTDSOP_CapacityAllocat.qbl                                                                           |   23 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_PanelScenarioSelection.def                                                                            |   21 
 _Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetUnitBySKU.qbl                                                                                                                |    5 
 _Main/BL/Type_DataDistributionLog/Attribute_ErrorNo.qbl                                                                                                                       |    8 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMDataRouting.qbl                                                                                                      |  102 
 _Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def                                                                                       |    2 
 _Main/BL/Type_PanelMaterialTM17/StaticMethod_ReceiveDataGeneration.qbl                                                                                                        |   14 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_TestData.qbl                                                                                                      |    9 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonLoad_OnClick.def                                                                               |    2 
 _Main/BL/Type_FillingCapacityOrder/StaticMethod_CreateFillingCapacityOrder.qbl                                                                                                |   37 
 _Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Response_pnlActions_btnOk_OnClick.def                                                  |   24 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Response_pnlActions_btnOk_OnClick.def                                                                     |    6 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingUnitOfMeasureData.qbl                                                                                                            |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_listContextMenuCapacityAllocationResultsRuleConfiguration.def                  |   11 
 _Main/BL/Type_DMF_CustomLogic/Method_OnFinished.qbl                                                                                                                           |    6 
 _Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_ListScenario_MenuScenarioSelect_OnClick.def                                                             |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSportsHealth/Component_ListPanelMaterialSportsHealth.def                                                               |    4 
 _Main/BL/Type_VersionControl/StaticMethod_CreateNewSceneVersion.qbl                                                                                                           |    2 
 _var/_Main/ModelSettings/Common/Dev-48/_ROOT_Role_Dev-48.properties                                                                                                           |  575 ++++
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl                                                                                                |    2 
 _Main/BL/Type_PanelMaterialVehicle/StaticMethod_ReceiveDataGeneration.qbl                                                                                                     |   14 
 _Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTImputation_MenuRefreshManufactureLTImputation_OnCl.def                                  |    2 
 _Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Apply.qbl                                                                                                              |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick.def                                              |    2 
 _Main/BL/Type_DataDistributionLog/Attribute_ExecuteStatus.qbl                                                                                                                 |   14 
 _Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/MessageEnhancerProcessor_MessageHeaderEnhancerProcessor.qbl                                               |    2 
 _Main/BL/Type_VersionControl/StaticMethod_Create.qbl                                                                                                                          |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def                                                              |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialVehicle/Response_DataHolderPanelMaterialVehicle_OnDataChanged.def                                                      |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def                                                                |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Response_ListDataDistributionLog_MenuDelete_OnClick.def                                                         |   18 
 _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompareExport.qbl                                                                                                       |    0 
 _Main/Sys/ImgAttr/DataDistributionLog.dme                                                                                                                                     |   31 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral#549.def                                                                                 |   41 
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_ObtainTheFinalOutputProduct.qbl                                                                                          |    4 
 _Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Refresh.qbl                                                                                                            |    9 
 _Main/BL/Type_PRData/Method_PrintCall.qbl                                                                                                                                     |    5 
 _Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_CreateIfNotExist.qbl                                                                                                |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialAutomotiveElectronics/Component_ListPanelMaterialAutomotiveElectronics.def                                             |    4 
 _Main/BL/Type_DataDistributionLog/Attribute_MacroPlanMDSID.qbl                                                                                                                |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl                                                                                                   |    4 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleBySeason.qbl                                                                                                 |    2 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_VerificationData.qbl                                                                                              |    6 
 _Main/BL/Relations/Relation_GlobalOTDLog_DataDistributionLog_DataDistributionLog_GlobalOTDLog.qbl                                                                             |   23 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/StaticMethod_ReceiveDataGeneration.qbl                                                                                          |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def                                                   |   12 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_GlobalOTDSOP_GlobalOTDSOP_CapacityAn.qbl                                                                           |   23 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl                                                                                              |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Component_pnlActions.def                                                                                         |   40 
 _Main/BL/Type_MacroPlan/StaticMethod_DoASyncOnException.qbl                                                                                                                   |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Response_DataHolderPanelTM18_OnDataChanged.def                                                                    |    2 
 _Main/BL/Type_PanelMaterialTM18/StaticMethod_ReceiveDataGeneration.qbl                                                                                                        |   14 
 _Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_ListScenario_MenuFolderNewMacroPlan_OnClick.def                                                         |   11 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def                                                                     |   14 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick#623.def                                                                        |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def             |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick.def                                                                |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuEdit_OnClick.def                                                                          |    3 
 _Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Component_pnlContent.def                                                               |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByMonth.qbl                                                                                                 |   93 
 _Main/BL/Type_ManufactureLTImputation/StaticMethod_Apply.qbl                                                                                                                  |    5 
 _Main/BL/Type_PanelMaterialIT/StaticMethod_ReceiveDataGeneration.qbl                                                                                                          |   14 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupScenarioSelection.def                                                                   |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/Response_DataHolderPanelSpecializedDisplay_OnCreated.def                                            |    2 
 _Main/BL/Type_MPSync/StaticMethod_TestData.qbl                                                                                                                                |   64 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM17/Response_DataHolderPanelTM17_OnCreated.def                                                                        |    2 
 _Main/BL/Type_GlobalOTDSOP/StaticMethod_GetOutputVersionData.qbl                                                                                                              |    4 
 _Main/BL/Type_SalesSegment_MP/StaticMethod_DoASync.qbl                                                                                                                        |   17 
 /dev/null                                                                                                                                                                     |   26 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioSelection.def                                                                    |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def                                     |    4 
 _Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan#127.qbl                                                                                                        |   52 
 _Main/UI/MacroPlannerWebApp/Component_FormIT/Component_ListPanelMaterialIT.def                                                                                                |    4 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingInventoryValueAndCostData.qbl                                                                                                    |   32 
 _Main/BL/Type_MacroPlan/StaticMethod_DoASync#896.qbl                                                                                                                          |   23 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnDataDistribution_OnClick.def                                             |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/Response_ListManufactureLT_943_MenuApply_OnClick.def                                                                  |   23 
 _Main/BL/Type_DataDistributionLog/StaticMethod_Create.qbl                                                                                                                     |   19 
 _Main/BL/Type_PRData/Method_DoCall.qbl                                                                                                                                        |    5 
 _Main/BL/Type_GlobalOTDLog/StaticMethod_OnServerStartup.qbl                                                                                                                   |   27 
 _Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Component_listActionBarPageDataDistributionLog.def                                                              |   10 
 352 files changed, 7,473 insertions(+), 983 deletions(-)

diff --git a/.gitignore b/.gitignore
index 6868dd4..fd82653 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,4 +24,4 @@
 
 /.idea
 _Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp
-*.properties
+#*.properties
diff --git a/_Main/BL/Dataset_GlobalOTDLog/_ROOT_Dataset_GlobalOTDLog.qbl b/_Main/BL/Dataset_GlobalOTDLog/_ROOT_Dataset_GlobalOTDLog.qbl
new file mode 100644
index 0000000..9c7e0a4
--- /dev/null
+++ b/_Main/BL/Dataset_GlobalOTDLog/_ROOT_Dataset_GlobalOTDLog.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Dataset GlobalOTDLog
+{
+  #keys: '2[414702.1.146900052][414702.1.146900051]'
+  DefaultMDSName: 'GlobalOTDLog'
+  InstanceType: GlobalOTDLog
+}
diff --git a/_Main/BL/Dataset_GlobalOTDSOP/_ROOT_Dataset_GlobalOTDSOP.qbl b/_Main/BL/Dataset_GlobalOTDSOP/_ROOT_Dataset_GlobalOTDSOP.qbl
new file mode 100644
index 0000000..bca7af1
--- /dev/null
+++ b/_Main/BL/Dataset_GlobalOTDSOP/_ROOT_Dataset_GlobalOTDSOP.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Dataset GlobalOTDSOP
+{
+  #keys: '2[414702.1.113455894][414702.1.113455893]'
+  DefaultMDSName: 'GlobalOTDSOP'
+  InstanceType: GlobalOTDSOP
+}
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_VersionControl.qbl b/_Main/BL/EDI/Broker_Broker_OTD_VersionControl.qbl
index b3723db..80c5ce1 100644
--- a/_Main/BL/EDI/Broker_Broker_OTD_VersionControl.qbl
+++ b/_Main/BL/EDI/Broker_Broker_OTD_VersionControl.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 EDIBroker Broker_OTD_VersionControl
 {
-  MDSDefinition: GlobalOTDTable
+  MDSDefinition: GlobalOTDSOP
   TimeZone: 'ACT'
   UseOSTimeZone: false
   EDIModelLink.Destination MappingVersionControl
diff --git a/_Main/BL/EDI/Broker_GlobalOTDTable_CARRC_Export.qbl b/_Main/BL/EDI/Broker_GlobalOTDSOP_CARRC_Export.qbl
similarity index 95%
rename from _Main/BL/EDI/Broker_GlobalOTDTable_CARRC_Export.qbl
rename to _Main/BL/EDI/Broker_GlobalOTDSOP_CARRC_Export.qbl
index d50d284..8cf249e 100644
--- a/_Main/BL/EDI/Broker_GlobalOTDTable_CARRC_Export.qbl
+++ b/_Main/BL/EDI/Broker_GlobalOTDSOP_CARRC_Export.qbl
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
-EDIBroker GlobalOTDTable_CARRC_Export
+EDIBroker GlobalOTDSOP_CARRC_Export
 {
-  MDSDefinition: GlobalOTDTable
+  MDSDefinition: GlobalOTDSOP
   TimeZone: 'ACT'
   UseOSTimeZone: false
   EDIModelLink.Source Source11
diff --git a/_Main/BL/EDI/Broker_GlobalOTDTable_CARRC_Import.qbl b/_Main/BL/EDI/Broker_GlobalOTDSOP_CARRC_Import.qbl
similarity index 90%
rename from _Main/BL/EDI/Broker_GlobalOTDTable_CARRC_Import.qbl
rename to _Main/BL/EDI/Broker_GlobalOTDSOP_CARRC_Import.qbl
index e539ed2..ad30317 100644
--- a/_Main/BL/EDI/Broker_GlobalOTDTable_CARRC_Import.qbl
+++ b/_Main/BL/EDI/Broker_GlobalOTDSOP_CARRC_Import.qbl
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
-EDIBroker GlobalOTDTable_CARRC_Import
+EDIBroker GlobalOTDSOP_CARRC_Import
 {
-  MDSDefinition: GlobalOTDTable
+  MDSDefinition: GlobalOTDSOP
   TimeZone: 'ACT'
   UseOSTimeZone: false
   EDIModelLink.Destination Destination13
@@ -17,6 +17,7 @@
       EDIMLColumn Division { Attribute: Division ValueType: String }
       EDIMLColumn ModuleMaterialCode { Attribute: ModuleMaterialCode ValueType: String }
       EDIMLColumn PanelMaterialCode { Attribute: PanelMaterialCode ValueType: String }
+      EDIMLColumn PanelMaterialStockingPointID { Attribute: PanelMaterialStockingPointID ValueType: String }
       EDIMLColumn StockingPointID { Attribute: StockingPointID ValueType: String }
     }
   }
diff --git a/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/MessageEnhancerProcessor_MessageHeaderEnhancerProcessor.qbl b/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/MessageEnhancerProcessor_MessageHeaderEnhancerProcessor.qbl
index 28845d0..5e2eb3e 100644
--- a/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/MessageEnhancerProcessor_MessageHeaderEnhancerProcessor.qbl
+++ b/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/MessageEnhancerProcessor_MessageHeaderEnhancerProcessor.qbl
@@ -20,6 +20,6 @@
   {
     Property: '_QI.Type'
     Type: 'String'
-    Value: 'GlobalOTDTable'
+    Value: 'GlobalOTDSOP'
   }
 }
diff --git a/_Main/BL/Relations/Relation_CapacityAllocationResultsRuleConfiguration_GlobalOTDSOP_GlobalOTDSO.qbl b/_Main/BL/Relations/Relation_CapacityAllocationResultsRuleConfiguration_GlobalOTDSOP_GlobalOTDSO.qbl
new file mode 100644
index 0000000..73f12a2
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAllocationResultsRuleConfiguration_GlobalOTDSOP_GlobalOTDSO.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAllocationResultsRuleConfiguration_GlobalOTDSOP_GlobalOTDSOP_CapacityAllocationResultsRuleConfiguration
+{
+  #keys: '1[414702.1.138430337]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414702.1.138430339][414702.1.138430338][414702.1.138430340]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAllocationResultsRuleConfiguration
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAllocationResultsRuleConfiguration
+  {
+    #keys: '3[414702.1.138430342][414702.1.138430341][414702.1.138430343]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAllocationResultsRuleConfiguration_GlobalOTDTable_GlobalOTD.qbl b/_Main/BL/Relations/Relation_CapacityAllocationResultsRuleConfiguration_GlobalOTDTable_GlobalOTD.qbl
deleted file mode 100644
index 40be5f9..0000000
--- a/_Main/BL/Relations/Relation_CapacityAllocationResultsRuleConfiguration_GlobalOTDTable_GlobalOTD.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAllocationResultsRuleConfiguration_GlobalOTDTable_GlobalOTDTable_CapacityAllocationResultsRuleConfiguration
-{
-  #keys: '1[414702.0.374991408]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414702.0.374991410][414702.0.374991409][414702.0.374991411]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAllocationResultsRuleConfiguration
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAllocationResultsRuleConfiguration
-  {
-    #keys: '3[414702.0.374991413][414702.0.374991412][414702.0.374991414]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAllocationResults_GlobalOTDSOP_GlobalOTDSOP_CapacityAllocat.qbl b/_Main/BL/Relations/Relation_CapacityAllocationResults_GlobalOTDSOP_GlobalOTDSOP_CapacityAllocat.qbl
new file mode 100644
index 0000000..476e161
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAllocationResults_GlobalOTDSOP_GlobalOTDSOP_CapacityAllocat.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAllocationResults_GlobalOTDSOP_GlobalOTDSOP_CapacityAllocationResults
+{
+  #keys: '1[414702.1.138430321]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414702.1.138430323][414702.1.138430322][414702.1.138430324]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAllocationResults
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAllocationResults
+  {
+    #keys: '3[414702.1.138430326][414702.1.138430325][414702.1.138430327]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAllocationResults_GlobalOTDTable_GlobalOTDTable_CapacityAll.qbl b/_Main/BL/Relations/Relation_CapacityAllocationResults_GlobalOTDTable_GlobalOTDTable_CapacityAll.qbl
deleted file mode 100644
index 278c0e9..0000000
--- a/_Main/BL/Relations/Relation_CapacityAllocationResults_GlobalOTDTable_GlobalOTDTable_CapacityAll.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAllocationResults_GlobalOTDTable_GlobalOTDTable_CapacityAllocationResults
-{
-  #keys: '1[414702.0.340560333]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414702.0.340560335][414702.0.340560334][414702.0.340560336]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAllocationResults
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAllocationResults
-  {
-    #keys: '3[414702.0.340560338][414702.0.340560337][414702.0.340560339]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_GlobalOTDSOP_GlobalOTDSOP_Capacity.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_GlobalOTDSOP_GlobalOTDSOP_Capacity.qbl
new file mode 100644
index 0000000..9b5d714
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_GlobalOTDSOP_GlobalOTDSOP_Capacity.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeChartElement_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeChartElement
+{
+  #keys: '1[414384.0.999194645]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.999194647][414384.0.999194646][414384.0.999194648]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeChartElement
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeChartElement
+  {
+    #keys: '3[414384.0.999194650][414384.0.999194649][414384.0.999194651]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_GlobalOTDTable_GlobalOTDTable_Capa.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_GlobalOTDTable_GlobalOTDTable_Capa.qbl
deleted file mode 100644
index 2d5380f..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_GlobalOTDTable_GlobalOTDTable_Capa.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeChartElement_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeChartElement
-{
-  #keys: '1[414384.0.921264786]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264788][414384.0.921264787][414384.0.921264789]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeChartElement
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeChartElement
-  {
-    #keys: '3[414384.0.921264791][414384.0.921264790][414384.0.921264792]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_GlobalOTDSOP_GlobalOTDSOP_CapacityAndS.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_GlobalOTDSOP_GlobalOTDSOP_CapacityAndS.qbl
new file mode 100644
index 0000000..98fd182
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_GlobalOTDSOP_GlobalOTDSOP_CapacityAndS.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeChartRow_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeChartRow
+{
+  #keys: '1[414384.0.996881297]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.996881299][414384.0.996881298][414384.0.996881300]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeChartRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeChartRow
+  {
+    #keys: '3[414384.0.996881302][414384.0.996881301][414384.0.996881303]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_GlobalOTDTable_GlobalOTDTable_Capacity.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_GlobalOTDTable_GlobalOTDTable_Capacity.qbl
deleted file mode 100644
index a5fe974..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_GlobalOTDTable_GlobalOTDTable_Capacity.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeChartRow_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeChartRow
-{
-  #keys: '1[414384.0.921264769]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264771][414384.0.921264770][414384.0.921264772]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeChartRow
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeChartRow
-  {
-    #keys: '3[414384.0.921264774][414384.0.921264773][414384.0.921264775]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_GlobalOTDSOP_GlobalOTDSOP_Cap.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_GlobalOTDSOP_GlobalOTDSOP_Cap.qbl
new file mode 100644
index 0000000..bb2e1ee
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_GlobalOTDSOP_GlobalOTDSOP_Cap.qbl
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeCompareItemColumn_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeCompareItemColumn
+{
+  #keys: '1[414384.0.996881443]'
+  ProceduralSequenceRelationStrategy
+  {
+    #keys: '13[0.0.0][414384.0.996881465][414384.0.996881459][414384.0.996881466][414384.0.996881460][414384.0.996881467][414384.0.996881461][414384.0.996881468][414384.0.996881462][414384.0.996881469][414384.0.996881463][414384.0.996881470][414384.0.996881464]'
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.996881445][414384.0.996881444][414384.0.996881446]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeCompareItemColumn
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeCompareItemColumn
+  {
+    #keys: '3[414384.0.996881448][414384.0.996881447][414384.0.996881449]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_GlobalOTDTable_GlobalOTDTable.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_GlobalOTDTable_GlobalOTDTable.qbl
deleted file mode 100644
index 132284d..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_GlobalOTDTable_GlobalOTDTable.qbl
+++ /dev/null
@@ -1,24 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeCompareItemColumn_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeCompareItemColumn
-{
-  #keys: '1[414384.0.921264730]'
-  ProceduralSequenceRelationStrategy
-  {
-    #keys: '13[0.0.0][414384.0.921264749][414384.0.921264743][414384.0.921264750][414384.0.921264744][414384.0.921264751][414384.0.921264745][414384.0.921264752][414384.0.921264746][414384.0.921264753][414384.0.921264747][414384.0.921264754][414384.0.921264748]'
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264732][414384.0.921264731][414384.0.921264733]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeCompareItemColumn
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeCompareItemColumn
-  {
-    #keys: '3[414384.0.921264735][414384.0.921264734][414384.0.921264736]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_GlobalOTDSOP_GlobalOTDSOP_Capaci.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_GlobalOTDSOP_GlobalOTDSOP_Capaci.qbl
new file mode 100644
index 0000000..9fb092c
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_GlobalOTDSOP_GlobalOTDSOP_Capaci.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeCompareItemRow_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeCompareItemRow
+{
+  #keys: '1[414384.0.996881317]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.996881319][414384.0.996881318][414384.0.996881320]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeCompareItemRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeCompareItemRow
+  {
+    #keys: '3[414384.0.996881322][414384.0.996881321][414384.0.996881323]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_GlobalOTDTable_GlobalOTDTable_Ca.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_GlobalOTDTable_GlobalOTDTable_Ca.qbl
deleted file mode 100644
index d33c56f..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_GlobalOTDTable_GlobalOTDTable_Ca.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeCompareItemRow_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeCompareItemRow
-{
-  #keys: '1[414384.0.921264713]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264715][414384.0.921264714][414384.0.921264716]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeCompareItemRow
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeCompareItemRow
-  {
-    #keys: '3[414384.0.921264718][414384.0.921264717][414384.0.921264719]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_GlobalOTDSOP_GlobalOTDSOP_Ca.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_GlobalOTDSOP_GlobalOTDSOP_Ca.qbl
new file mode 100644
index 0000000..8e2a345
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_GlobalOTDSOP_GlobalOTDSOP_Ca.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeFilterBusinessType_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeFilterBusinessType
+{
+  #keys: '1[414384.0.996881340]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.996881342][414384.0.996881341][414384.0.996881343]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeFilterBusinessType
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeFilterBusinessType
+  {
+    #keys: '3[414384.0.996881345][414384.0.996881344][414384.0.996881346]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_GlobalOTDTable_GlobalOTDTabl.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_GlobalOTDTable_GlobalOTDTabl.qbl
deleted file mode 100644
index f0b0349..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_GlobalOTDTable_GlobalOTDTabl.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeFilterBusinessType_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeFilterBusinessType
-{
-  #keys: '1[414384.0.921264696]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264698][414384.0.921264697][414384.0.921264699]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeFilterBusinessType
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeFilterBusinessType
-  {
-    #keys: '3[414384.0.921264701][414384.0.921264700][414384.0.921264702]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_GlobalOTDSOP_GlobalOTDSOP_CapacityAn.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_GlobalOTDSOP_GlobalOTDSOP_CapacityAn.qbl
new file mode 100644
index 0000000..d2d3db4
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_GlobalOTDSOP_GlobalOTDSOP_CapacityAn.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeFilterItem_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeFilterItem
+{
+  #keys: '1[414384.0.996881358]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.996881360][414384.0.996881359][414384.0.996881361]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeFilterItem
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeFilterItem
+  {
+    #keys: '3[414384.0.996881363][414384.0.996881362][414384.0.996881364]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_GlobalOTDTable_GlobalOTDTable_Capaci.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_GlobalOTDTable_GlobalOTDTable_Capaci.qbl
deleted file mode 100644
index 7933192..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_GlobalOTDTable_GlobalOTDTable_Capaci.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeFilterItem_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeFilterItem
-{
-  #keys: '1[414384.0.921264679]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264681][414384.0.921264680][414384.0.921264682]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeFilterItem
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeFilterItem
-  {
-    #keys: '3[414384.0.921264684][414384.0.921264683][414384.0.921264685]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_GlobalOTDSOP_GlobalOTDSOP_CapacityA.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_GlobalOTDSOP_GlobalOTDSOP_CapacityA.qbl
new file mode 100644
index 0000000..5dcd675
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_GlobalOTDSOP_GlobalOTDSOP_CapacityA.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeFilterMonth_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeFilterMonth
+{
+  #keys: '1[414384.0.996881381]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.996881383][414384.0.996881382][414384.0.996881384]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeFilterMonth
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeFilterMonth
+  {
+    #keys: '3[414384.0.996881386][414384.0.996881385][414384.0.996881387]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_GlobalOTDTable_GlobalOTDTable_Capac.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_GlobalOTDTable_GlobalOTDTable_Capac.qbl
deleted file mode 100644
index d8b447f..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_GlobalOTDTable_GlobalOTDTable_Capac.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeFilterMonth_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeFilterMonth
-{
-  #keys: '1[414384.0.921264662]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264664][414384.0.921264663][414384.0.921264665]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeFilterMonth
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeFilterMonth
-  {
-    #keys: '3[414384.0.921264667][414384.0.921264666][414384.0.921264668]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDSOP_Glo.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDSOP_Glo.qbl
new file mode 100644
index 0000000..2a10a12
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDSOP_Glo.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+{
+  #keys: '1[414384.0.996881401]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.996881403][414384.0.996881402][414384.0.996881404]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+  {
+    #keys: '3[414384.0.996881406][414384.0.996881405][414384.0.996881407]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDTable_G.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDTable_G.qbl
deleted file mode 100644
index e10c202..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDTable_G.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
-{
-  #keys: '1[414384.0.921264645]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264647][414384.0.921264646][414384.0.921264648]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
-  {
-    #keys: '3[414384.0.921264650][414384.0.921264649][414384.0.921264651]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_GlobalOTDSOP_GlobalOTDSOP_CapacityAn.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_GlobalOTDSOP_GlobalOTDSOP_CapacityAn.qbl
new file mode 100644
index 0000000..74e2009
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_GlobalOTDSOP_GlobalOTDSOP_CapacityAn.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeFilterYear_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeFilterYear
+{
+  #keys: '1[414384.0.996881421]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.996881423][414384.0.996881422][414384.0.996881424]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeFilterYear
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeFilterYear
+  {
+    #keys: '3[414384.0.996881426][414384.0.996881425][414384.0.996881427]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_GlobalOTDTable_GlobalOTDTable_Capaci.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_GlobalOTDTable_GlobalOTDTable_Capaci.qbl
deleted file mode 100644
index 8df8fb7..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_GlobalOTDTable_GlobalOTDTable_Capaci.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeFilterYear_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeFilterYear
-{
-  #keys: '1[414384.0.921264628]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264630][414384.0.921264629][414384.0.921264631]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeFilterYear
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeFilterYear
-  {
-    #keys: '3[414384.0.921264633][414384.0.921264632][414384.0.921264634]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudge_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleB.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudge_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleB.qbl
deleted file mode 100644
index f900aee..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudge_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleB.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudge_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudge
-{
-  #keys: '1[414384.0.810464642]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.810464644][414384.0.810464643][414384.0.810464645]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudge
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudge
-  {
-    #keys: '3[414384.0.810464647][414384.0.810464646][414384.0.810464648]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_GlobalOTDLog_DataDistributionLog_DataDistributionLog_GlobalOTDLog.qbl b/_Main/BL/Relations/Relation_GlobalOTDLog_DataDistributionLog_DataDistributionLog_GlobalOTDLog.qbl
new file mode 100644
index 0000000..2a49fb7
--- /dev/null
+++ b/_Main/BL/Relations/Relation_GlobalOTDLog_DataDistributionLog_DataDistributionLog_GlobalOTDLog.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation GlobalOTDLog_DataDistributionLog_DataDistributionLog_GlobalOTDLog
+{
+  #keys: '1[414702.1.153774700]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide DataDistributionLog
+  {
+    #keys: '3[414702.1.153774702][414702.1.153774701][414702.1.153774703]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDLog
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide GlobalOTDLog
+  {
+    #keys: '3[414702.1.153774705][414702.1.153774704][414702.1.153774706]'
+    Cardinality: '0to1'
+    ObjectDefinition: DataDistributionLog
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_ManufactureLTImputation_GlobalOTDSOP_GlobalOTDSOP_ManufactureLTImpu.qbl b/_Main/BL/Relations/Relation_ManufactureLTImputation_GlobalOTDSOP_GlobalOTDSOP_ManufactureLTImpu.qbl
new file mode 100644
index 0000000..e739ff4
--- /dev/null
+++ b/_Main/BL/Relations/Relation_ManufactureLTImputation_GlobalOTDSOP_GlobalOTDSOP_ManufactureLTImpu.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation ManufactureLTImputation_GlobalOTDSOP_GlobalOTDSOP_ManufactureLTImputation
+{
+  #keys: '1[414384.0.1005451662]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.1005451664][414384.0.1005451663][414384.0.1005451665]'
+    Cardinality: '0to1'
+    ObjectDefinition: ManufactureLTImputation
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide ManufactureLTImputation
+  {
+    #keys: '3[414384.0.1005451667][414384.0.1005451666][414384.0.1005451668]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_ManufactureLTImputation_MacroPlan_MacroPlan_ManufactureLTImputation.qbl b/_Main/BL/Relations/Relation_ManufactureLTImputation_MacroPlan_MacroPlan_ManufactureLTImputation.qbl
deleted file mode 100644
index 7aa6d28..0000000
--- a/_Main/BL/Relations/Relation_ManufactureLTImputation_MacroPlan_MacroPlan_ManufactureLTImputation.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation ManufactureLTImputation_MacroPlan_MacroPlan_ManufactureLTImputation
-{
-  #keys: '1[414384.0.697090694]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MacroPlan
-  {
-    #keys: '3[414384.0.697090696][414384.0.697090695][414384.0.697090697]'
-    Cardinality: '0to1'
-    ObjectDefinition: ManufactureLTImputation
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide ManufactureLTImputation
-  {
-    #keys: '3[414384.0.697090699][414384.0.697090698][414384.0.697090700]'
-    Cardinality: '1toN'
-    ObjectDefinition: MacroPlan
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MappingCapacityAndSaleBudge_MPSync_MPSync_MappingCapacityAndSaleBud.qbl b/_Main/BL/Relations/Relation_MappingCapacityAndSaleBudge_MPSync_MPSync_MappingCapacityAndSaleBud.qbl
deleted file mode 100644
index 37b5f68..0000000
--- a/_Main/BL/Relations/Relation_MappingCapacityAndSaleBudge_MPSync_MPSync_MappingCapacityAndSaleBud.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MappingCapacityAndSaleBudge_MPSync_MPSync_MappingCapacityAndSaleBudge
-{
-  #keys: '1[414384.0.803580112]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MPSync
-  {
-    #keys: '3[414384.0.803580114][414384.0.803580113][414384.0.803580115]'
-    Cardinality: '0to1'
-    ObjectDefinition: MappingCapacityAndSaleBudge
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide MappingCapacityAndSaleBudge
-  {
-    #keys: '3[414384.0.803580117][414384.0.803580116][414384.0.803580118]'
-    Cardinality: '1toN'
-    ObjectDefinition: MPSync
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MappingVersionControl_GlobalOTDSOP_GlobalOTDSOP_MappingVersionContr.qbl b/_Main/BL/Relations/Relation_MappingVersionControl_GlobalOTDSOP_GlobalOTDSOP_MappingVersionContr.qbl
new file mode 100644
index 0000000..7415d35
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MappingVersionControl_GlobalOTDSOP_GlobalOTDSOP_MappingVersionContr.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MappingVersionControl_GlobalOTDSOP_GlobalOTDSOP_MappingVersionControl
+{
+  #keys: '1[412960.0.337760056]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[412960.0.337760058][412960.0.337760057][412960.0.337760059]'
+    Cardinality: '0to1'
+    ObjectDefinition: MappingVersionControl
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide MappingVersionControl
+  {
+    #keys: '3[412960.0.337760061][412960.0.337760060][412960.0.337760062]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MappingVersionControl_GlobalOTDTable_GlobalOTDTable_MappingVersionC.qbl b/_Main/BL/Relations/Relation_MappingVersionControl_GlobalOTDTable_GlobalOTDTable_MappingVersionC.qbl
deleted file mode 100644
index 39dd1eb..0000000
--- a/_Main/BL/Relations/Relation_MappingVersionControl_GlobalOTDTable_GlobalOTDTable_MappingVersionC.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MappingVersionControl_GlobalOTDTable_GlobalOTDTable_MappingVersionControl
-{
-  #keys: '1[412960.0.150120043]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[412960.0.150120045][412960.0.150120044][412960.0.150120046]'
-    Cardinality: '0to1'
-    ObjectDefinition: MappingVersionControl
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide MappingVersionControl
-  {
-    #keys: '3[412960.0.150120048][412960.0.150120047][412960.0.150120049]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyInputSource_GlobalOTDSOP_GlobalOTDSOP_.qbl b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyInputSource_GlobalOTDSOP_GlobalOTDSOP_.qbl
new file mode 100644
index 0000000..e11759e
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyInputSource_GlobalOTDSOP_GlobalOTDSOP_.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MatAttrSettingAndPlanStrategyInputSource_GlobalOTDSOP_GlobalOTDSOP_MatAttrSettingAndPlanStrategyInputSource
+{
+  #keys: '1[414702.1.128364612]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414702.1.128364614][414702.1.128364613][414702.1.128364615]'
+    Cardinality: '0to1'
+    ObjectDefinition: MatAttrSettingAndPlanStrategyInputSource
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide MatAttrSettingAndPlanStrategyInputSource
+  {
+    #keys: '3[414702.1.128364617][414702.1.128364616][414702.1.128364618]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyInputSource_GlobalOTDTable_GlobalOTDTa.qbl b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyInputSource_GlobalOTDTable_GlobalOTDTa.qbl
deleted file mode 100644
index 970e5b3..0000000
--- a/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyInputSource_GlobalOTDTable_GlobalOTDTa.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MatAttrSettingAndPlanStrategyInputSource_GlobalOTDTable_GlobalOTDTable_MatAttrSettingAndPlanStrategyInputSource
-{
-  #keys: '1[414384.0.763764705]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.763764707][414384.0.763764706][414384.0.763764708]'
-    Cardinality: '0to1'
-    ObjectDefinition: MatAttrSettingAndPlanStrategyInputSource
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide MatAttrSettingAndPlanStrategyInputSource
-  {
-    #keys: '3[414384.0.763764710][414384.0.763764709][414384.0.763764711]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategy_GlobalOTDSOP_GlobalOTDSOP_MatAttrSett.qbl b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategy_GlobalOTDSOP_GlobalOTDSOP_MatAttrSett.qbl
new file mode 100644
index 0000000..779034c
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategy_GlobalOTDSOP_GlobalOTDSOP_MatAttrSett.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MatAttrSettingAndPlanStrategy_GlobalOTDSOP_GlobalOTDSOP_MatAttrSettingAndPlanStrategy
+{
+  #keys: '1[414702.1.130145519]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414702.1.130145521][414702.1.130145520][414702.1.130145522]'
+    Cardinality: '0to1'
+    ObjectDefinition: MatAttrSettingAndPlanStrategy
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide MatAttrSettingAndPlanStrategy
+  {
+    #keys: '3[414702.1.130145524][414702.1.130145523][414702.1.130145525]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategy_GlobalOTDTable_GlobalOTDTable_MatAttr.qbl b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategy_GlobalOTDTable_GlobalOTDTable_MatAttr.qbl
deleted file mode 100644
index cedbcb8..0000000
--- a/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategy_GlobalOTDTable_GlobalOTDTable_MatAttr.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MatAttrSettingAndPlanStrategy_GlobalOTDTable_GlobalOTDTable_MatAttrSettingAndPlanStrategy
-{
-  #keys: '1[414384.0.763764622]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.763764624][414384.0.763764623][414384.0.763764625]'
-    Cardinality: '0to1'
-    ObjectDefinition: MatAttrSettingAndPlanStrategy
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide MatAttrSettingAndPlanStrategy
-  {
-    #keys: '3[414384.0.763764627][414384.0.763764626][414384.0.763764628]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_PRHistoryData_GlobalOTDSOP_GlobalOTDSOP_PRHistoryData.qbl b/_Main/BL/Relations/Relation_PRHistoryData_GlobalOTDSOP_GlobalOTDSOP_PRHistoryData.qbl
new file mode 100644
index 0000000..cdcda63
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PRHistoryData_GlobalOTDSOP_GlobalOTDSOP_PRHistoryData.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PRHistoryData_GlobalOTDSOP_GlobalOTDSOP_PRHistoryData
+{
+  #keys: '1[414384.0.999194777]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.999194779][414384.0.999194778][414384.0.999194780]'
+    Cardinality: '0to1'
+    ObjectDefinition: PRHistoryData
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PRHistoryData
+  {
+    #keys: '3[414384.0.999194782][414384.0.999194781][414384.0.999194783]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PRHistoryData_GlobalOTDTable_GlobalOTDTable_PRHistoryData.qbl b/_Main/BL/Relations/Relation_PRHistoryData_GlobalOTDTable_GlobalOTDTable_PRHistoryData.qbl
deleted file mode 100644
index f5e24f8..0000000
--- a/_Main/BL/Relations/Relation_PRHistoryData_GlobalOTDTable_GlobalOTDTable_PRHistoryData.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation PRHistoryData_GlobalOTDTable_GlobalOTDTable_PRHistoryData
-{
-  #keys: '1[414384.0.789498541]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.789498543][414384.0.789498542][414384.0.789498544]'
-    Cardinality: '0to1'
-    ObjectDefinition: PRHistoryData
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide PRHistoryData
-  {
-    #keys: '3[414384.0.789498546][414384.0.789498545][414384.0.789498547]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_PanelMaterialAll_GlobalOTDSOP_GlobalOTDSOP_PanelMaterialAll.qbl b/_Main/BL/Relations/Relation_PanelMaterialAll_GlobalOTDSOP_GlobalOTDSOP_PanelMaterialAll.qbl
new file mode 100644
index 0000000..9da7ad0
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PanelMaterialAll_GlobalOTDSOP_GlobalOTDSOP_PanelMaterialAll.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PanelMaterialAll_GlobalOTDSOP_GlobalOTDSOP_PanelMaterialAll
+{
+  #keys: '1[414702.1.138384587]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414702.1.138384589][414702.1.138384588][414702.1.138384590]'
+    Cardinality: '0to1'
+    ObjectDefinition: PanelMaterialAll
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PanelMaterialAll
+  {
+    #keys: '3[414702.1.138384592][414702.1.138384591][414702.1.138384593]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PanelMaterialAll_GlobalOTDTable_GlobalOTDTable_PanelMaterialAll.qbl b/_Main/BL/Relations/Relation_PanelMaterialAll_GlobalOTDTable_GlobalOTDTable_PanelMaterialAll.qbl
deleted file mode 100644
index f2cc83e..0000000
--- a/_Main/BL/Relations/Relation_PanelMaterialAll_GlobalOTDTable_GlobalOTDTable_PanelMaterialAll.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation PanelMaterialAll_GlobalOTDTable_GlobalOTDTable_PanelMaterialAll
-{
-  #keys: '1[414702.0.196798981]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414702.0.196798983][414702.0.196798982][414702.0.196798984]'
-    Cardinality: '0to1'
-    ObjectDefinition: PanelMaterialAll
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide PanelMaterialAll
-  {
-    #keys: '3[414702.0.196798986][414702.0.196798985][414702.0.196798987]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_VersionControl_GlobalOTDSOP_GlobalOTDSOP_VersionControl.qbl b/_Main/BL/Relations/Relation_VersionControl_GlobalOTDSOP_GlobalOTDSOP_VersionControl.qbl
new file mode 100644
index 0000000..7e3d31e
--- /dev/null
+++ b/_Main/BL/Relations/Relation_VersionControl_GlobalOTDSOP_GlobalOTDSOP_VersionControl.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation VersionControl_GlobalOTDSOP_GlobalOTDSOP_VersionControl
+{
+  #keys: '1[412960.0.337760078]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[412960.0.337760080][412960.0.337760079][412960.0.337760081]'
+    Cardinality: '0to1'
+    ObjectDefinition: VersionControl
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide VersionControl
+  {
+    #keys: '3[412960.0.337760083][412960.0.337760082][412960.0.337760084]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_VersionControl_GlobalOTDTable_GlobalOTDTable_VersionControl.qbl b/_Main/BL/Relations/Relation_VersionControl_GlobalOTDTable_GlobalOTDTable_VersionControl.qbl
deleted file mode 100644
index bb27705..0000000
--- a/_Main/BL/Relations/Relation_VersionControl_GlobalOTDTable_GlobalOTDTable_VersionControl.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation VersionControl_GlobalOTDTable_GlobalOTDTable_VersionControl
-{
-  #keys: '1[412960.0.134860006]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[412960.0.134860008][412960.0.134860007][412960.0.134860009]'
-    Cardinality: '0to1'
-    ObjectDefinition: VersionControl
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide VersionControl
-  {
-    #keys: '3[412960.0.134860011][412960.0.134860010][412960.0.134860012]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_VersionStatus_GlobalOTDSOP_GlobalOTDSOP_VersionStatus.qbl b/_Main/BL/Relations/Relation_VersionStatus_GlobalOTDSOP_GlobalOTDSOP_VersionStatus.qbl
new file mode 100644
index 0000000..2615f94
--- /dev/null
+++ b/_Main/BL/Relations/Relation_VersionStatus_GlobalOTDSOP_GlobalOTDSOP_VersionStatus.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation VersionStatus_GlobalOTDSOP_GlobalOTDSOP_VersionStatus
+{
+  #keys: '1[412960.0.337760095]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[412960.0.337760097][412960.0.337760096][412960.0.337760098]'
+    Cardinality: '0to1'
+    ObjectDefinition: VersionStatus
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide VersionStatus
+  {
+    #keys: '3[412960.0.337760100][412960.0.337760099][412960.0.337760101]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_VersionStatus_GlobalOTDTable_GlobalOTDTable_VersionStatus.qbl b/_Main/BL/Relations/Relation_VersionStatus_GlobalOTDTable_GlobalOTDTable_VersionStatus.qbl
deleted file mode 100644
index effee95..0000000
--- a/_Main/BL/Relations/Relation_VersionStatus_GlobalOTDTable_GlobalOTDTable_VersionStatus.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation VersionStatus_GlobalOTDTable_GlobalOTDTable_VersionStatus
-{
-  #keys: '1[412960.0.134830056]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[412960.0.134830058][412960.0.134830057][412960.0.134830059]'
-    Cardinality: '0to1'
-    ObjectDefinition: VersionStatus
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide VersionStatus
-  {
-    #keys: '3[412960.0.134830061][412960.0.134830060][412960.0.134830062]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_WorkOrderType_GlobalOTDSOP_GlobalOTDSOP_WorkOrderType.qbl b/_Main/BL/Relations/Relation_WorkOrderType_GlobalOTDSOP_GlobalOTDSOP_WorkOrderType.qbl
new file mode 100644
index 0000000..52848ab
--- /dev/null
+++ b/_Main/BL/Relations/Relation_WorkOrderType_GlobalOTDSOP_GlobalOTDSOP_WorkOrderType.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation WorkOrderType_GlobalOTDSOP_GlobalOTDSOP_WorkOrderType
+{
+  #keys: '1[414702.1.128394598]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414702.1.128394600][414702.1.128394599][414702.1.128394601]'
+    Cardinality: '0to1'
+    ObjectDefinition: WorkOrderType
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide WorkOrderType
+  {
+    #keys: '3[414702.1.128394603][414702.1.128394602][414702.1.128394604]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_WorkOrderType_GlobalOTDTable_GlobalOTDTable_WorkOrderType.qbl b/_Main/BL/Relations/Relation_WorkOrderType_GlobalOTDTable_GlobalOTDTable_WorkOrderType.qbl
deleted file mode 100644
index 2a94ff2..0000000
--- a/_Main/BL/Relations/Relation_WorkOrderType_GlobalOTDTable_GlobalOTDTable_WorkOrderType.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation WorkOrderType_GlobalOTDTable_GlobalOTDTable_WorkOrderType
-{
-  #keys: '1[414702.0.144781477]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414702.0.144781479][414702.0.144781478][414702.0.144781480]'
-    Cardinality: '0to1'
-    ObjectDefinition: WorkOrderType
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide WorkOrderType
-  {
-    #keys: '3[414702.0.144781482][414702.0.144781481][414702.0.144781483]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_YuxTest_MPSync_MPSync_YuxTest.qbl b/_Main/BL/Relations/Relation_YuxTest_MPSync_MPSync_YuxTest.qbl
deleted file mode 100644
index 743c739..0000000
--- a/_Main/BL/Relations/Relation_YuxTest_MPSync_MPSync_YuxTest.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation YuxTest_MPSync_MPSync_YuxTest
-{
-  #keys: '1[414384.0.915854641]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MPSync
-  {
-    #keys: '3[414384.0.915854643][414384.0.915854642][414384.0.915854644]'
-    Cardinality: '0to1'
-    ObjectDefinition: YuxTest
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide YuxTest
-  {
-    #keys: '3[414384.0.915854646][414384.0.915854645][414384.0.915854647]'
-    Cardinality: '1toN'
-    ObjectDefinition: MPSync
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Type_BaseConversionFactor/StaticMethod_DoASync.qbl b/_Main/BL/Type_BaseConversionFactor/StaticMethod_DoASync.qbl
new file mode 100644
index 0000000..2e257e4
--- /dev/null
+++ b/_Main/BL/Type_BaseConversionFactor/StaticMethod_DoASync.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DoASync (
+  MacroPlan macroPlan,
+  const GlobalOTDTable globalOTDTable
+)
+{
+  Description: '鍗曟鍚屾'
+  TextBody:
+  [*
+    // yypsybs Aug-17-2023 (created)
+    //info( "Product Finished, Start BaseConversionFactor Data Broker" )
+    //macroPlan.Broker_OTD_BaseConversionFactor().Execute();
+    info( "BaseConversionFactor Data Broker Finished, Start BaseConversionFactor Mapping" )
+    macroPlan.DoASyncMappingBaseConversionFactorData(globalOTDTable);
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/DeclarativeReferenceRelation_CalcCapacityAllocationResultsRuleConfiguration.qbl b/_Main/BL/Type_CapacityAllocationResults/DeclarativeReferenceRelation_CalcCapacityAllocationResultsRuleConfiguration.qbl
index 59c9af0..86a37a9 100644
--- a/_Main/BL/Type_CapacityAllocationResults/DeclarativeReferenceRelation_CalcCapacityAllocationResultsRuleConfiguration.qbl
+++ b/_Main/BL/Type_CapacityAllocationResults/DeclarativeReferenceRelation_CalcCapacityAllocationResultsRuleConfiguration.qbl
@@ -5,7 +5,7 @@
   #keys: '1[414702.0.388304510]'
   Expression:
   [*
-    targetCapacityAllocationResultsRuleConfiguration := select( this.GlobalOTDTable(), CapacityAllocationResultsRuleConfiguration, tempCARRC, 
+    targetCapacityAllocationResultsRuleConfiguration := select( this.GlobalOTDSOP(), CapacityAllocationResultsRuleConfiguration, tempCARRC, 
                                                                 tempCARRC.ModuleMaterialCode() = this.ModuleMaterialCode() and
                                                                 tempCARRC.PanelMaterialCode() = this.PanelMaterialCode() );
     
diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate.qbl
index 2340157..0f65a44 100644
--- a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate.qbl
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate.qbl
@@ -1,16 +1,16 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateDate (
-  GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP globalOTDSOP,
   MacroPlan macroPlan,
   Scenario scenario
 )
 {
   TextBody:
   [*
-    globalOTDTable.CapacityAllocationResults( relflush );
+    globalOTDSOP.CapacityAllocationResults( relflush );
     
-    finaleProductInStockingPoint_MPs := CapacityAllocationResults::ObtainTheFinalOutputProduct( macroPlan, globalOTDTable );
+    finaleProductInStockingPoint_MPs := CapacityAllocationResults::ObtainTheFinalOutputProduct( macroPlan, globalOTDSOP );
     
     period_MPS := null( Period_MPs );
     traverse ( macroPlan, PeriodSpecification_MP, psmp, psmp.ID() = "Planning periods" ) {
@@ -18,15 +18,15 @@
     }
     
     traverse ( finaleProductInStockingPoint_MPs, Elements, fpispmp ) {
-      capacityAllocationResultsRuleConfigurations := selectset( globalOTDTable, CapacityAllocationResultsRuleConfiguration, tempCARRC, tempCARRC.ModuleMaterialCode() = fpispmp.ProductID() and tempCARRC.StockingPointID() = fpispmp.StockingPointID() );
+      capacityAllocationResultsRuleConfigurations := selectset( globalOTDSOP, CapacityAllocationResultsRuleConfiguration, tempCARRC, tempCARRC.ModuleMaterialCode() = fpispmp.ProductID() and tempCARRC.StockingPointID() = fpispmp.StockingPointID() );
     //  info( "鐢熶骇鐨勪骇鍝侊細", fpispmp.ProductID(), "------浜у搧鍦ㄥ簱瀛樼偣-------锛�", fpispmp.StockingPointID() );
       traverse ( period_MPS, Elements, pmp ) {     
         // CapacityAllocationResults::IterativeGeneration( globalOTDTable, pisp, 1, null( NewSupply ), -1.0, pmp.StartDate() ); 鑰佺増
-        CapacityAllocationResults::IterativeGeneration2( globalOTDTable, fpispmp, pmp.StartDate(), capacityAllocationResultsRuleConfigurations, 0, null( NewSupply ), 0.0 );
+        CapacityAllocationResults::IterativeGeneration2( globalOTDSOP, fpispmp, pmp.StartDate(), capacityAllocationResultsRuleConfigurations, 0, null( NewSupply ), 0.0 );
       }
     }
     
-    traverse ( globalOTDTable, CapacityAllocationResults, car ) {
+    traverse ( globalOTDSOP, CapacityAllocationResults, car ) {
       car.VersionNumber( scenario.Name() );
     }
   *]
diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate1.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate1.qbl
new file mode 100644
index 0000000..867dabd
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate1.qbl
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateDate1 (
+  MacroPlan macroPlan,
+  GlobalOTDSOP globalOTDSOP,
+  DependentDemand dependentDemand,
+  NewSupply newSupply,
+  Supply_MP firstNewSupply,
+  CapacityAllocationResultsRuleConfiguration capacityAllocationResultsRuleConfiguration,
+  Real fulfillmentQuantity
+)
+{
+  TextBody:
+  [*
+    panelPISP := dependentDemand.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP();
+    info( "浜у搧ID锛�", panelPISP.ProductID(), "    搴撳瓨鐐笽D锛�", panelPISP.StockingPointID() );
+    productID := dependentDemand.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID();
+    
+    if ( capacityAllocationResultsRuleConfiguration.PanelMaterialCode() = productID ) {
+      info( "鎵惧埌浜嗭紒锛侊紒" );
+      globalOTDSOP.CapacityAllocationResults( relnew,
+                                              PanelBase             := panelPISP.StockingPointID(),
+                                              PanelMaterialCode     := panelPISP.ProductID(),
+                                              NumberOfPanels        := fulfillmentQuantity,
+                                              PanelMeasurementUnit  := panelPISP.UnitOfMeasure_MP().Name(),
+                                              ModuleMaterialCode    := firstNewSupply.ProductInStockingPointInPeriodPlanning().ProductInStockingPoint_MP().ProductID(),
+                                              NumberOfModules       := firstNewSupply.Quantity(),
+                                              ModuleMeasurementUnit := firstNewSupply.ProductInStockingPointInPeriodPlanning().ProductInStockingPoint_MP().UnitOfMeasureName(),
+                                              ModuleBase            := firstNewSupply.ProductInStockingPointInPeriodPlanning().ProductInStockingPoint_MP().StockingPointID(),
+                                              RequirementDate       := dependentDemand.Start().Date(),
+                                              // 瀵煎嚭澶栭儴渚涘簲瀛楁
+                                              Date                  := dependentDemand.Start().Date(),
+                                              Description           := "",
+                                              ID                    := OS::GenerateGUIDAsString(),
+                                              ProductID             := panelPISP.ProductID(),
+                                              StockingPointID       := panelPISP.StockingPointID(),
+                                              UserQuantity          := fulfillmentQuantity,
+                                              ManufacturedDate      := Date::MinDate()
+                                             );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration.qbl
index af2857c..92e3c7f 100644
--- a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration.qbl
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod IterativeGeneration (
-  GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP globalOTDSOP,
   ProductInStockingPoint_MP pisp,
   Number numberOfLayers,
   NewSupply finaleNewSupply,
@@ -27,7 +27,7 @@
             oi := dd.ProcessInput().astype( OperationInput );
             finaleDependentDemand := finaleDependentDemand * oo.Quantity() * oi.Quantity();
     //        info( "渚濊禆闇�姹備骇鍝両D锛�", dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(), "    渚濊禆鏁伴噺锛�", dd.Quantity(), "    褰撳墠鍛ㄦ湡浠诲姟Key锛�", dd.PeriodTask_MP().astype( PeriodTaskOperation ).Key() );
-            CapacityAllocationResults::IterativeGeneration( globalOTDTable, dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP(), numberOfLayers, finaleNewSupply, finaleDependentDemand, targetDate );
+            CapacityAllocationResults::IterativeGeneration( globalOTDSOP, dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP(), numberOfLayers, finaleNewSupply, finaleDependentDemand, targetDate );
           }
     //      info( "----------------------------------------------------" );
         } else {
@@ -35,17 +35,17 @@
     //      info( "======" );
           pispPanel := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP();
           pispModule := finaleNewSupply.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP();
-          globalOTDTable.CapacityAllocationResults( relnew,
-                                                    PanelBase             := pispPanel.StockingPointID(),
-                                                    PanelMaterialCode     := pispPanel.ProductID(),
-                                                    NumberOfPanels        := finaleDependentDemand,
-                                                    PanelMeasurementUnit  := pispPanel.UnitOfMeasure_MP().Name(),
-                                                    ModuleMaterialCode    := pispModule.ProductID(),
-                                                    NumberOfModules       := finaleNewSupply.Quantity(),
-                                                    ModuleMeasurementUnit := pispModule.UnitOfMeasure_MP().Name(),
-                                                    ModuleBase            := pispModule.StockingPointID(),
-                                                    RequirementDate       := finaleNewSupply.Start().Date()
-                                                   );
+          globalOTDSOP.CapacityAllocationResults( relnew,
+                                                  PanelBase             := pispPanel.StockingPointID(),
+                                                  PanelMaterialCode     := pispPanel.ProductID(),
+                                                  NumberOfPanels        := finaleDependentDemand,
+                                                  PanelMeasurementUnit  := pispPanel.UnitOfMeasure_MP().Name(),
+                                                  ModuleMaterialCode    := pispModule.ProductID(),
+                                                  NumberOfModules       := finaleNewSupply.Quantity(),
+                                                  ModuleMeasurementUnit := pispModule.UnitOfMeasure_MP().Name(),
+                                                  ModuleBase            := pispModule.StockingPointID(),
+                                                  RequirementDate       := finaleNewSupply.Start().Date()
+                                                 );
         }
         finaleNewSupply := null( NewSupply );
       }
diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl
index 226f832..36a59af 100644
--- a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod IterativeGeneration2 (
-  GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP globalOTDSOP,
   ProductInStockingPoint_MP pisp,
   Date targetDate,
   CapacityAllocationResultsRuleConfigurations carrcs,
@@ -21,7 +21,7 @@
         previous := pispippl.PreviousPlanningPISPIP().astype( ProductInStockingPointInPeriodPlanningLeaf );
         if ( not previous.Period_MP().IsHistorical() ) {
           previousDate := previous.Start().Date();
-          CapacityAllocationResults::IterativeGeneration2( globalOTDTable,
+          CapacityAllocationResults::IterativeGeneration2( globalOTDSOP,
                                                            pisp,
                                                            previousDate,
                                                            carrcs,
@@ -50,7 +50,7 @@
     //          info( "灞傛暟锛�", numberOfLayers, "    褰撳墠渚涘簲鐨刾isp锛�", ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), "    鎬讳緵搴斿�硷細", ns.Quantity(), "    闇�瑕佷緵搴斿�硷細", currentLayerDependentDemandQuantity,
     //                "    褰撳墠闇�姹俻isp锛�", dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), "    闇�姹傚�硷細", currentLayerDependentDemandQuantity );
     //          info( "-----------------------------------------------------------------------------------------------------------------" );
-              CapacityAllocationResults::IterativeGeneration2( globalOTDTable,
+              CapacityAllocationResults::IterativeGeneration2( globalOTDSOP,
                                                                dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP(),
                                                                targetDate,
                                                                carrcs,
@@ -62,25 +62,25 @@
             carrc := select( carrcs, Elements, carrc, carrc.PanelMaterialCode() = ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() );
             if ( not isnull( carrc ) ) {
     //          info( "鎵惧埌闈㈡澘鐗╂枡..." );
-              globalOTDTable.CapacityAllocationResults( relnew,
-                                                        PanelBase             := pto.Operation().UnitID(),
-                                                        PanelMaterialCode     := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(),
-                                                        NumberOfPanels        := currentLayerDependentDemandQuantity,
-                                                        PanelMeasurementUnit  := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().UnitOfMeasureName(),
-                                                        ModuleMaterialCode    := firstLevelSupply.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(),
-                                                        NumberOfModules       := firstLevelSupply.Quantity(),
-                                                        ModuleMeasurementUnit := firstLevelSupply.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().UnitOfMeasureName(),
-                                                        ModuleBase            := guard( firstLevelSupply.PeriodTask_MP().astype( PeriodTaskOperation ).Operation().UnitID(), "杞﹂亾杩愯緭" ),
-                                                        Division              := carrc.Division(),
-                                                        RequirementDate       := firstLevelSupply.Start().Date(),
-                                                        Date                  := firstLevelSupply.Start().Date(),
-                                                        Description           := "",
-                                                        ID                    := OS::GenerateGUIDAsString(),
-                                                        ProductID             := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(),
-                                                        StockingPointID       := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().StockingPointID(),
-                                                        UserQuantity          := currentLayerDependentDemandQuantity,
-                                                        ManufacturedDate      := Date::MinDate()
-                                                       );
+              globalOTDSOP.CapacityAllocationResults( relnew,
+                                                      PanelBase             := pto.Operation().UnitID(),
+                                                      PanelMaterialCode     := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(),
+                                                      NumberOfPanels        := currentLayerDependentDemandQuantity,
+                                                      PanelMeasurementUnit  := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().UnitOfMeasureName(),
+                                                      ModuleMaterialCode    := firstLevelSupply.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(),
+                                                      NumberOfModules       := firstLevelSupply.Quantity(),
+                                                      ModuleMeasurementUnit := firstLevelSupply.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().UnitOfMeasureName(),
+                                                      ModuleBase            := guard( firstLevelSupply.PeriodTask_MP().astype( PeriodTaskOperation ).Operation().UnitID(), "杞﹂亾杩愯緭" ),
+                                                      Division              := carrc.Division(),
+                                                      RequirementDate       := firstLevelSupply.Start().Date(),
+                                                      Date                  := firstLevelSupply.Start().Date(),
+                                                      Description           := "",
+                                                      ID                    := OS::GenerateGUIDAsString(),
+                                                      ProductID             := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(),
+                                                      StockingPointID       := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().StockingPointID(),
+                                                      UserQuantity          := currentLayerDependentDemandQuantity,
+                                                      ManufacturedDate      := Date::MinDate()
+                                                     );
                                                         
             }
             //info( "-----------------------------------------------------------------------------------------------------------------" );
@@ -93,7 +93,7 @@
     //              "    褰撳墠闇�姹俻isp锛�", targetDependentDemand.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), "    闇�姹傚�硷細", currentLayerDependentDemandQuantity );
     //        info( "LaneLeg鍛ㄦ湡浠诲姟..." );
             //info( "-----------------------------------------------------------------------------------------------------------------" );
-            CapacityAllocationResults::IterativeGeneration2( globalOTDTable,
+            CapacityAllocationResults::IterativeGeneration2( globalOTDSOP,
                                                              targetDependentDemand.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP(),
                                                              targetDate,
                                                              carrcs,
diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration3.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration3.qbl
index a3edaf0..a10d437 100644
--- a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration3.qbl
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration3.qbl
@@ -1,9 +1,13 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod IterativeGeneration3 (
+  MacroPlan macroPlan,
+  GlobalOTDSOP globalOTDSOP,
   Supply_MP smp,
+  Supply_MP firstSMP,
   Number numberOfPlies,
-  Real fulfillmentQuantity
+  Real fulfillmentQuantity,
+  CapacityAllocationResultsRuleConfiguration capacityAllocationResultsRuleConfiguration
 )
 {
   TextBody:
@@ -20,10 +24,12 @@
               traverse ( dd, Fulfillment, f ) {
                 smp1 := f.Supply_MP();
                 numberOfPlies++;
+                fulfillmentQuantity := ( dd.Quantity() / ns.Quantity() ) * fulfillmentQuantity;
                 info( "--------------------------------------------------------------" );
-                fulfillmentQuantity := fulfillmentQuantity * ns.ProcessOutput().astype( OperationOutput ).Quantity() *
-                                                             dd.ProcessInput().astype( OperationInput ).Quantity();
-                CapacityAllocationResults::IterativeGeneration3( smp1, numberOfPlies, fulfillmentQuantity );
+                if ( not isnull( capacityAllocationResultsRuleConfiguration ) ) {
+                  CapacityAllocationResults::CreateDate1( macroPlan, globalOTDSOP, dd, ns, firstSMP, capacityAllocationResultsRuleConfiguration, fulfillmentQuantity );
+                }
+                CapacityAllocationResults::IterativeGeneration3( macroPlan, globalOTDSOP, smp1, firstSMP, numberOfPlies, fulfillmentQuantity, capacityAllocationResultsRuleConfiguration );
                 numberOfPlies--;
               }
             }
@@ -33,14 +39,17 @@
             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(), "    ", 
-                  targetDependentDemand.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name() );
+                  ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name() );
             traverse ( targetDependentDemand, Fulfillment, f ) {
               smp1 := f.Supply_MP();
               numberOfPlies++;
               info( "--------------------------------------------------------------" );
-              CapacityAllocationResults::IterativeGeneration3( smp1, numberOfPlies, f.Quantity() );
+              if ( not isnull( capacityAllocationResultsRuleConfiguration ) ) {
+                CapacityAllocationResults::CreateDate1( macroPlan, globalOTDSOP, targetDependentDemand, ns, firstSMP, capacityAllocationResultsRuleConfiguration, f.Quantity() );
+              }
+              CapacityAllocationResults::IterativeGeneration3( macroPlan, globalOTDSOP, smp1, firstSMP, numberOfPlies, f.Quantity(), capacityAllocationResultsRuleConfiguration );
               numberOfPlies--;
-            } 
+            }
           }
         }
       }
diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_ObtainTheFinalOutputProduct.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_ObtainTheFinalOutputProduct.qbl
index 6501563..f0f089a 100644
--- a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_ObtainTheFinalOutputProduct.qbl
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_ObtainTheFinalOutputProduct.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 StaticMethod ObtainTheFinalOutputProduct (
   MacroPlan macroPlan,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDSOP globalOTDSOP
 ) as owning ProductInStockingPoint_MPs
 {
   TextBody:
@@ -22,7 +22,7 @@
     //}
     
     finaleProductInStockingPoint_MPs := selectset( macroPlan, Product_MP.ProductInStockingPoint_MP, tempPISPMP, 
-                                                   exists( globalOTDTable, CapacityAllocationResultsRuleConfiguration, tempCARRC, tempCARRC.ModuleMaterialCode() = tempPISPMP.ProductID() and tempCARRC.StockingPointID() = tempPISPMP.StockingPointID() )
+                                                   exists( globalOTDSOP, CapacityAllocationResultsRuleConfiguration, tempCARRC, tempCARRC.ModuleMaterialCode() = tempPISPMP.ProductID() and tempCARRC.StockingPointID() = tempPISPMP.StockingPointID() )
                                                   );
     
     return &finaleProductInStockingPoint_MPs;
diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Test.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Test.qbl
index 7000af7..bc20514 100644
--- a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Test.qbl
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Test.qbl
@@ -1,17 +1,24 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Test (
-  MacroPlan macroPlan
+  MacroPlan macroPlan,
+  GlobalOTDSOP globalOTDSOP
 )
 {
   TextBody:
   [*
+    globalOTDSOP.CapacityAllocationResults( relflush );
+    
+    capacityAllocationResultsRuleConfiguration := select( globalOTDSOP, CapacityAllocationResultsRuleConfiguration, carrc, 
+                                                          carrc.ModuleMaterialCode() = "ProXOver 1 D2.6 A" and
+                                                          carrc.StockingPointID() = "Carco Philadelphia" );
+    
     traverse ( macroPlan, Product_MP.ProductInStockingPoint_MP, pisp, pisp.ProductID() = "ProXOver 1 D2.6 A"        and 
                                                                       pisp.StockingPointID() = "Carco Philadelphia" ) {
       traverse ( pisp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ).Supply_MP, smp, 
-               smp.ProductInStockingPointInPeriodPlanning().Start().Date() = Date::Construct( 2020, 4, 7 ) and
-               smp.Quantity() > 0 ) {                                                                  
-        CapacityAllocationResults::IterativeGeneration3( smp, 1, smp.Quantity() );
+                 /*smp.ProductInStockingPointInPeriodPlanning().Start().Date() = Date::Construct( 2020, 4, 7 ) and*/
+                 smp.Quantity() > 0 ) {                                                                  
+        CapacityAllocationResults::IterativeGeneration3( macroPlan, globalOTDSOP, smp, smp, 1, smp.Quantity(), capacityAllocationResultsRuleConfiguration );
       }
     }
   *]
diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Test1.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Test1.qbl
new file mode 100644
index 0000000..e12a971
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Test1.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Test1 (
+  MacroPlan macroPlan,
+  GlobalOTDSOP globalOTDSOP,
+  CapacityAllocationResultsRuleConfigurations capacityAllocationResultsRuleConfigurations
+)
+{
+  TextBody:
+  [*
+    traverse ( capacityAllocationResultsRuleConfigurations, Elements, carrc ) {
+      pisp := select( macroPlan, Product_MP.ProductInStockingPoint_MP, tempPISP, tempPISP.ProductID() = carrc.ModuleMaterialCode() and
+                                                                       tempPISP.StockingPointID() = carrc.StockingPointID() );
+      traverse ( pisp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ).Supply_MP, smp, 
+                 /*smp.ProductInStockingPointInPeriodPlanning().Start().Date() = Date::Construct( 2020, 4, 7 ) and*/
+                 smp.Quantity() > 0 ) {                                                                  
+        CapacityAllocationResults::IterativeGeneration3( macroPlan, globalOTDSOP, smp, smp, 1, smp.Quantity(), carrc );
+        info( "=======================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Export.qbl b/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Export.qbl
index 4397413..a6abe7c 100644
--- a/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Export.qbl
+++ b/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Export.qbl
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Export (
-  GlobalOTDTable globalOTDTable
+  GlobalOTDSOP globalOTDSOP
 ) as BinaryValue
 {
   TextBody:
   [*
     // hongjli Sep-25-2023 (created)
-    binaryValue := globalOTDTable.GlobalOTDTable_CARRC_Export().ExecuteToXLS( true ).AsBinaryValue();
+    binaryValue := globalOTDSOP.GlobalOTDSOP_CARRC_Export().ExecuteToXLS( true ).AsBinaryValue();
     
     return binaryValue;
   *]
diff --git a/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Import.qbl b/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Import.qbl
index a4eddc6..e18f952 100644
--- a/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Import.qbl
+++ b/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Import.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Import (
-  GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP globalOTDSOP,
   String base64String
 )
 {
@@ -9,6 +9,6 @@
   [*
     binaryData := BinaryData::FromBase64EncodedString( base64String );
     
-    globalOTDTable.GlobalOTDTable_CARRC_Import().ExecuteFromXLS( &binaryData, true );
+    globalOTDSOP.GlobalOTDSOP_CARRC_Import().ExecuteFromXLS( &binaryData, true );
   *]
 }
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_BusinessType.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_BusinessType.qbl
deleted file mode 100644
index a8afdb0..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_BusinessType.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute BusinessType
-{
-  #keys: '3[414384.0.810464687][414384.0.810464686][414384.0.810464688]'
-  Description: '涓氬姟绫诲瀷(浜嬩笟閮�)'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityEquivalent.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityEquivalent.qbl
deleted file mode 100644
index 119a291..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityEquivalent.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityEquivalent
-{
-  #keys: '3[414384.0.810464711][414384.0.810464710][414384.0.810464712]'
-  Description: '浜ц兘褰撻噺'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth1.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth1.qbl
deleted file mode 100644
index c8e3695..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth1.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth1
-{
-  #keys: '3[414384.0.810464717][414384.0.810464716][414384.0.810464718]'
-  Description: '1鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth10.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth10.qbl
deleted file mode 100644
index 62d88ee..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth10.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth10
-{
-  #keys: '3[414384.0.810464744][414384.0.810464743][414384.0.810464745]'
-  Description: '10鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth11.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth11.qbl
deleted file mode 100644
index ea88f28..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth11.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth11
-{
-  #keys: '3[414384.0.810464747][414384.0.810464746][414384.0.810464748]'
-  Description: '11鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth12.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth12.qbl
deleted file mode 100644
index 6e299ff..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth12.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth12
-{
-  #keys: '3[414384.0.810464750][414384.0.810464749][414384.0.810464751]'
-  Description: '12鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth2.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth2.qbl
deleted file mode 100644
index 650954b..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth2.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth2
-{
-  #keys: '3[414384.0.810464720][414384.0.810464719][414384.0.810464721]'
-  Description: '2鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth3.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth3.qbl
deleted file mode 100644
index be704be..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth3.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth3
-{
-  #keys: '3[414384.0.810464723][414384.0.810464722][414384.0.810464724]'
-  Description: '3鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth4.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth4.qbl
deleted file mode 100644
index 2f36f6d..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth4.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth4
-{
-  #keys: '3[414384.0.810464726][414384.0.810464725][414384.0.810464727]'
-  Description: '4鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth5.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth5.qbl
deleted file mode 100644
index 1839d8f..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth5.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth5
-{
-  #keys: '3[414384.0.810464729][414384.0.810464728][414384.0.810464730]'
-  Description: '5鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth6.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth6.qbl
deleted file mode 100644
index a6f3dd4..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth6.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth6
-{
-  #keys: '3[414384.0.810464732][414384.0.810464731][414384.0.810464733]'
-  Description: '6鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth7.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth7.qbl
deleted file mode 100644
index 44b13ba..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth7.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth7
-{
-  #keys: '3[414384.0.810464735][414384.0.810464734][414384.0.810464736]'
-  Description: '7鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth8.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth8.qbl
deleted file mode 100644
index 2f1152c..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth8.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth8
-{
-  #keys: '3[414384.0.810464738][414384.0.810464737][414384.0.810464739]'
-  Description: '8鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth9.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth9.qbl
deleted file mode 100644
index 5eb6d08..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSInMonth9.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth9
-{
-  #keys: '3[414384.0.810464741][414384.0.810464740][414384.0.810464742]'
-  Description: '9鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSTotal.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSTotal.qbl
deleted file mode 100644
index c299a64..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInPCSTotal.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSTotal
-{
-  #keys: '3[414384.0.810464866][414384.0.810464865][414384.0.810464867]'
-  Description: '骞翠骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth1.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth1.qbl
deleted file mode 100644
index 92e048b..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth1.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth1
-{
-  #keys: '3[414384.0.810464753][414384.0.810464752][414384.0.810464754]'
-  Description: '1鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth10.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth10.qbl
deleted file mode 100644
index b3cf0ce..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth10.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth10
-{
-  #keys: '3[414384.0.810464780][414384.0.810464779][414384.0.810464781]'
-  Description: '10鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth11.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth11.qbl
deleted file mode 100644
index 2c3252d..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth11.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth11
-{
-  #keys: '3[414384.0.810464783][414384.0.810464782][414384.0.810464784]'
-  Description: '11鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth12.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth12.qbl
deleted file mode 100644
index fbfb32a..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth12.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth12
-{
-  #keys: '3[414384.0.810464786][414384.0.810464785][414384.0.810464787]'
-  Description: '12鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth2.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth2.qbl
deleted file mode 100644
index b4caec2..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth2.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth2
-{
-  #keys: '3[414384.0.810464756][414384.0.810464755][414384.0.810464757]'
-  Description: '2鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth3.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth3.qbl
deleted file mode 100644
index c2b8d77..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth3.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth3
-{
-  #keys: '3[414384.0.810464759][414384.0.810464758][414384.0.810464760]'
-  Description: '3鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth4.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth4.qbl
deleted file mode 100644
index 40591a6..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth4.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth4
-{
-  #keys: '3[414384.0.810464762][414384.0.810464761][414384.0.810464763]'
-  Description: '4鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth5.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth5.qbl
deleted file mode 100644
index 2910ff3..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth5.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth5
-{
-  #keys: '3[414384.0.810464765][414384.0.810464764][414384.0.810464766]'
-  Description: '5鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth6.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth6.qbl
deleted file mode 100644
index 350f3f0..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth6.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth6
-{
-  #keys: '3[414384.0.810464768][414384.0.810464767][414384.0.810464769]'
-  Description: '6鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth7.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth7.qbl
deleted file mode 100644
index efe11d8..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth7.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth7
-{
-  #keys: '3[414384.0.810464771][414384.0.810464770][414384.0.810464772]'
-  Description: '7鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth8.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth8.qbl
deleted file mode 100644
index 2deff94..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth8.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth8
-{
-  #keys: '3[414384.0.810464774][414384.0.810464773][414384.0.810464775]'
-  Description: '8鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth9.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth9.qbl
deleted file mode 100644
index 1da1c48..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetInMonth9.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth9
-{
-  #keys: '3[414384.0.810464777][414384.0.810464776][414384.0.810464778]'
-  Description: '9鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetTotal.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetTotal.qbl
deleted file mode 100644
index fd6f847..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_CapacityInSheetTotal.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetTotal
-{
-  #keys: '3[414384.0.810464850][414384.0.810464849][414384.0.810464851]'
-  Description: '骞翠骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_Deleted.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_Deleted.qbl
deleted file mode 100644
index f3217fc..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_Deleted.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Deleted
-{
-  #keys: '3[414384.0.810464681][414384.0.810464680][414384.0.810464682]'
-  Description: '宸插垹闄�'
-  ValueType: Boolean
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_DisplayTechnology.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_DisplayTechnology.qbl
deleted file mode 100644
index ed65a10..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_DisplayTechnology.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DisplayTechnology
-{
-  #keys: '3[414384.0.810464684][414384.0.810464683][414384.0.810464685]'
-  Description: '鏄剧ず鎶�鏈垎绫�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_LineAndSpec.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_LineAndSpec.qbl
deleted file mode 100644
index cfd9d06..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_LineAndSpec.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute LineAndSpec
-{
-  #keys: '3[414384.0.810464690][414384.0.810464689][414384.0.810464691]'
-  Description: '浜у搧绾�/浜у搧瑙勬牸'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_NumberOfCut.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_NumberOfCut.qbl
deleted file mode 100644
index 67da312..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_NumberOfCut.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute NumberOfCut
-{
-  #keys: '3[414384.0.810464708][414384.0.810464707][414384.0.810464709]'
-  Description: '鍒囧壊鏁�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_NumberOfMask.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_NumberOfMask.qbl
deleted file mode 100644
index c7fcdef..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_NumberOfMask.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute NumberOfMask
-{
-  #keys: '3[414384.0.810464714][414384.0.810464713][414384.0.810464715]'
-  Description: 'mask鏁�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_OrgCode.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_OrgCode.qbl
deleted file mode 100644
index 38f5383..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_OrgCode.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrgCode
-{
-  #keys: '3[414384.0.810464668][414384.0.810464667][414384.0.810464669]'
-  Description: '涓氬姟閮ㄩ棬'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_PlaceOfProductionOfArray.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_PlaceOfProductionOfArray.qbl
deleted file mode 100644
index eb76c2b..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_PlaceOfProductionOfArray.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute PlaceOfProductionOfArray
-{
-  #keys: '3[414384.0.810464696][414384.0.810464695][414384.0.810464697]'
-  Description: 'Array浜у湴锛堥潰鏉垮熀鍦帮級'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_PlaceOfProductionOfEvaporation.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_PlaceOfProductionOfEvaporation.qbl
deleted file mode 100644
index 077836e..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_PlaceOfProductionOfEvaporation.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute PlaceOfProductionOfEvaporation
-{
-  #keys: '3[414384.0.810464699][414384.0.810464698][414384.0.810464700]'
-  Description: '钂搁晙浜у湴'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_ProductCode.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_ProductCode.qbl
deleted file mode 100644
index 65504ec..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_ProductCode.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductCode
-{
-  #keys: '3[414384.0.810464693][414384.0.810464692][414384.0.810464694]'
-  Description: '浜у搧鏂欏彿'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_Resolution.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_Resolution.qbl
deleted file mode 100644
index 24dc3a6..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_Resolution.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Resolution
-{
-  #keys: '3[414384.0.810464702][414384.0.810464701][414384.0.810464703]'
-  Description: '鍒嗚鲸鐜�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth1.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth1.qbl
deleted file mode 100644
index 8095702..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth1.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth1
-{
-  #keys: '3[414384.0.810464789][414384.0.810464788][414384.0.810464790]'
-  Description: '1鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth10.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth10.qbl
deleted file mode 100644
index 061f898..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth10.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth10
-{
-  #keys: '3[414384.0.810464816][414384.0.810464815][414384.0.810464817]'
-  Description: '10鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth11.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth11.qbl
deleted file mode 100644
index e5b0339..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth11.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth11
-{
-  #keys: '3[414384.0.810464819][414384.0.810464818][414384.0.810464820]'
-  Description: '11鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth12.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth12.qbl
deleted file mode 100644
index 1891382..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth12.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth12
-{
-  #keys: '3[414384.0.810464822][414384.0.810464821][414384.0.810464823]'
-  Description: '12鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth2.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth2.qbl
deleted file mode 100644
index 9affb8b..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth2.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth2
-{
-  #keys: '3[414384.0.810464792][414384.0.810464791][414384.0.810464793]'
-  Description: '2鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth3.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth3.qbl
deleted file mode 100644
index 73de89c..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth3.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth3
-{
-  #keys: '3[414384.0.810464795][414384.0.810464794][414384.0.810464796]'
-  Description: '3鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth4.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth4.qbl
deleted file mode 100644
index 2c0a7b3..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth4.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth4
-{
-  #keys: '3[414384.0.810464798][414384.0.810464797][414384.0.810464799]'
-  Description: '4鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth5.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth5.qbl
deleted file mode 100644
index cd253f3..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth5.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth5
-{
-  #keys: '3[414384.0.810464801][414384.0.810464800][414384.0.810464802]'
-  Description: '5鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth6.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth6.qbl
deleted file mode 100644
index 47c19c1..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth6.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth6
-{
-  #keys: '3[414384.0.810464804][414384.0.810464803][414384.0.810464805]'
-  Description: '6鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth7.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth7.qbl
deleted file mode 100644
index b10a2cb..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth7.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth7
-{
-  #keys: '3[414384.0.810464807][414384.0.810464806][414384.0.810464808]'
-  Description: '7鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth8.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth8.qbl
deleted file mode 100644
index 12afc72..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth8.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth8
-{
-  #keys: '3[414384.0.810464810][414384.0.810464809][414384.0.810464811]'
-  Description: '8鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth9.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth9.qbl
deleted file mode 100644
index 7359c75..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountInMonth9.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth9
-{
-  #keys: '3[414384.0.810464813][414384.0.810464812][414384.0.810464814]'
-  Description: '9鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountTotal.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountTotal.qbl
deleted file mode 100644
index c01058f..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_SaleAmountTotal.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountTotal
-{
-  #keys: '3[414384.0.810464840][414384.0.810464839][414384.0.810464841]'
-  Description: '骞撮攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_ShippingForm.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_ShippingForm.qbl
deleted file mode 100644
index 7a1c0ff..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_ShippingForm.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ShippingForm
-{
-  #keys: '3[414384.0.810464705][414384.0.810464704][414384.0.810464706]'
-  Description: '鍑鸿揣褰㈡��'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Method_GetCapacityInPCSInYear.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Method_GetCapacityInPCSInYear.qbl
deleted file mode 100644
index 8e5ce5e..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Method_GetCapacityInPCSInYear.qbl
+++ /dev/null
@@ -1,15 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method GetCapacityInPCSInYear () as Real
-{
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := 0.0;
-    for( i := 1; i <= 12; i := i + 1 ) {
-      field := Reflection::FindAttribute( "CapacityAndSaleBudge", "CapacityInPCSInMonth" + [String]i );
-      result := result + field.GetReal( this );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Method_GetCapacityInSheetInHalfYear.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Method_GetCapacityInSheetInHalfYear.qbl
deleted file mode 100644
index 54eecdf..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Method_GetCapacityInSheetInHalfYear.qbl
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method GetCapacityInSheetInHalfYear (
-  Number halfNo
-) as Real
-{
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := 0.0;
-    fromMonth := 1 + ( halfNo - 1 ) * 6;
-    toMonth := 6 + ( halfNo - 1 ) * 6;
-    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
-      field := Reflection::FindAttribute( "CapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]i );
-      result := result + field.GetReal( this );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Method_GetCapacityInSheetInSeason.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Method_GetCapacityInSheetInSeason.qbl
deleted file mode 100644
index 5af224d..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Method_GetCapacityInSheetInSeason.qbl
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method GetCapacityInSheetInSeason (
-  Number seasonNo
-) as Real
-{
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := 0.0;
-    fromMonth := 1 + ( seasonNo - 1 ) * 3;
-    toMonth := 3 + ( seasonNo - 1 ) * 3;
-    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
-      field := Reflection::FindAttribute( "CapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]i );
-      result := result + field.GetReal( this );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Method_GetCapacityInSheetInYear.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Method_GetCapacityInSheetInYear.qbl
deleted file mode 100644
index 561b9d9..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Method_GetCapacityInSheetInYear.qbl
+++ /dev/null
@@ -1,15 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method GetCapacityInSheetInYear () as Real
-{
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := 0.0;
-    for( i := 1; i <= 12; i := i + 1 ) {
-      field := Reflection::FindAttribute( "CapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]i );
-      result := result + field.GetReal( this );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Method_GetSaleAmountInYear.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Method_GetSaleAmountInYear.qbl
deleted file mode 100644
index 04efa9c..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/Method_GetSaleAmountInYear.qbl
+++ /dev/null
@@ -1,15 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method GetSaleAmountInYear () as Real
-{
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := 0.0;
-    for( i := 1; i <= 12; i := i + 1 ) {
-      field := Reflection::FindAttribute( "CapacityAndSaleBudge", "SaleAmountInMonth" + [String]i );
-      result := result + field.GetReal( this );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSaleByMonth.qbl b/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSaleByMonth.qbl
deleted file mode 100644
index be9cd98..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSaleByMonth.qbl
+++ /dev/null
@@ -1,22 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSaleByMonth (
-  Strings productNo,
-  GlobalOTDTable parent,
-  Number yearNo,
-  Number monthNo
-) as Real
-{
-  Description: '閿�鍞锛圵锛�'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    field := Reflection::FindAttribute( "CapacityAndSaleBudge", "SaleAmountInMonth" + [String]monthNo );
-    value := sum( parent, 
-                  CapacityAndSaleBudge, 
-                  item, 
-                  productNo.Find( item.ProductCode() ) > -1,
-                  field.GetReal( item ) );
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSaleByYear.qbl b/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSaleByYear.qbl
deleted file mode 100644
index ef150ed..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSaleByYear.qbl
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSaleByYear (
-  Strings productNo,
-  GlobalOTDTable parent,
-  Number yearNo
-) as Real
-{
-  Description: '閿�鍞锛圵锛�'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := sum( parent, 
-                   CapacityAndSaleBudge, 
-                   item, 
-                   productNo.Find( item.ProductCode() ) > -1,
-                   item.GetSaleAmountInYear() );
-    return result;
-  *]
-}
diff --git "a/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSheetByHalfYear\0431.qbl" "b/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSheetByHalfYear\0431.qbl"
deleted file mode 100644
index 7f929c7..0000000
--- "a/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSheetByHalfYear\0431.qbl"
+++ /dev/null
@@ -1,21 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSheetByHalfYear (
-  Strings productNo,
-  GlobalOTDTable parent,
-  Number yearNo,
-  Number halfNo
-) as Real
-{
-  Description: '浜ц兘 - 瀹炴暟澶у紶'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := sum( parent, 
-                   CapacityAndSaleBudge, 
-                   item, 
-                   productNo.Find( item.ProductCode() ) > -1,
-                   item.GetCapacityInSheetInHalfYear( halfNo ) );
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSheetByMonth.qbl b/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSheetByMonth.qbl
deleted file mode 100644
index 35ab669..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSheetByMonth.qbl
+++ /dev/null
@@ -1,22 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSheetByMonth (
-  Strings productNo,
-  GlobalOTDTable parent,
-  Number yearNo,
-  Number monthNo
-) as Real
-{
-  Description: '浜ц兘-瀹炴暟澶у紶'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    field := Reflection::FindAttribute( "CapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]monthNo );
-    value := sum( parent, 
-                  CapacityAndSaleBudge, 
-                  item, 
-                  productNo.Find( item.ProductCode() ) > -1,
-                  field.GetReal( item ) );
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSheetBySeason.qbl b/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSheetBySeason.qbl
deleted file mode 100644
index a0193ae..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSheetBySeason.qbl
+++ /dev/null
@@ -1,21 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSheetBySeason (
-  Strings productNo,
-  GlobalOTDTable parent,
-  Number yearNo,
-  Number seasonNo
-) as Real
-{
-  Description: '浜ц兘 - 瀹炴暟澶у紶'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := sum( parent, 
-                   CapacityAndSaleBudge, 
-                   item, 
-                   productNo.Find( item.ProductCode() ) > -1,
-                   item.GetCapacityInSheetInSeason( seasonNo ) );
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSheetByYear.qbl b/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSheetByYear.qbl
deleted file mode 100644
index 997d801..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/StaticMethod_GetSheetByYear.qbl
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSheetByYear (
-  Strings productNo,
-  GlobalOTDTable parent,
-  Number yearNo
-) as Real
-{
-  Description: '浜ц兘 - 瀹炴暟澶у紶'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := sum( parent, 
-                   CapacityAndSaleBudge, 
-                   item, 
-                   productNo.Find( item.ProductCode() ) > -1,
-                   item.GetCapacityInSheetInYear() );
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/_ROOT_Type_CapacityAndSaleBudge.qbl b/_Main/BL/Type_CapacityAndSaleBudge/_ROOT_Type_CapacityAndSaleBudge.qbl
deleted file mode 100644
index 650ea87..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudge/_ROOT_Type_CapacityAndSaleBudge.qbl
+++ /dev/null
@@ -1,10 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type CapacityAndSaleBudge
-{
-  #keys: '5[414384.0.810464639][414384.0.810464637][0.0.0][414384.0.810464638][414384.0.810464640]'
-  BaseType: Object
-  Description: '浜ч攢棰勭畻 锛侊紒锛佸純鐢紒锛侊紒'
-  StructuredName: 'CapacityAndSaleBudges'
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_TestData.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_TestData.qbl
index 3d1269f..db5dca4 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_TestData.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_TestData.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod TestData (
-  GlobalOTDTable parent
+  GlobalOTDSOP parent
 )
 {
   Description: '鐢熸垚娴嬭瘯鏁版嵁'
@@ -12,7 +12,6 @@
     info( "鐢熸垚骞村害浜ч攢棰勭畻鎶ヨ〃娴嬭瘯鏁版嵁" )
     
     parent.CapacityAndSaleBudgeChartElement( relflush );
-    
     for( sc := 0; sc < 4; sc := sc + 1 ) {
       scenarioName := "SC" + [String]sc;
       for( i := 0; i < 4; i := i + 1 ) {
@@ -20,9 +19,9 @@
         for( j := 1; j <= 12; j := j + 1 ) {
           monthString := "MONTH" + ifexpr( j < 10, "0" + [String]j, [String]j );
           parent.CapacityAndSaleBudgeChartElement( relnew, 
-                                                            BusinessTypeOrPlaceOfProductionOfArray := businessTypeString, 
-                                                            TimeStringAndScenarioName := monthString + " - " + scenarioName, 
-                                                            Quantity := Real::Random( 20.0, 30.0 ) );
+                                                   BusinessTypeOrPlaceOfProductionOfArray := businessTypeString, 
+                                                   TimeStringAndScenarioName := monthString + " - " + scenarioName, 
+                                                   Quantity := Real::Random( 20.0, 30.0 ) );
         }
       }
     }
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_CreateIfNotExist.qbl
index 76a61fb..920eb5b 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateIfNotExist (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   String businessType,
   String placeOfProductionOfArray
 ) as CapacityAndSaleBudgeChartRow
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/StaticMethod_CreateIfNotExist.qbl
index 77bfe99..7caa364 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateIfNotExist (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   String columnName
 ) as CapacityAndSaleBudgeCompareItemColumn
 {
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl
index 7a485f5..230f93e 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateIfNotExist (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   String businessType,
   String placeOfProductionOfArray
 ) as CapacityAndSaleBudgeCompareItemRow
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_CreateIfNotExist.qbl
index 33a800b..08b6273 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateIfNotExist (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   String value
 )
 {
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_CreateIfNotExist.qbl
index e05188e..b012fc8 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateIfNotExist (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   String itemName
 )
 {
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_Initial.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_Initial.qbl
index 14b634a..3601509 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_Initial.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_Initial.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Initial (
-  GlobalOTDTable parent
+  GlobalOTDSOP parent
 )
 {
   Description: '鍒濆鍖栧姣旈」'
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl
index f14808d..8159900 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Initial (
-  GlobalOTDTable parent
+  GlobalOTDSOP parent
 )
 {
   Description: '鍒濆鍖栧勾浠�'
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl
index 3e96143..f8c8fc9 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateIfNotExist (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   String value
 )
 {
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl
index dc5898d..72badb3 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Initial (
-  GlobalOTDTable parent
+  GlobalOTDSOP parent
 )
 {
   Description: '鍒濆鍖栧勾浠�'
diff --git a/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateData.qbl b/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateData.qbl
index bb13b39..9109ec9 100644
--- a/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateData.qbl
+++ b/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateData.qbl
@@ -12,7 +12,7 @@
     traverse ( macroPlan, SalesDemand.astype( CustomerOrder ), co, true ) {
       macroPlan.CustomerAndForecastOrder( relnew,
                                           VerNo             := scenario.Name(),
-                                          OrderID           := co.OrderID(),
+                                          OrderID           := co.ID(),
                                           ProductID         := co.ProductID(),
                                           BusinessType      := co.BusinessType(),
                                           Customer          := co.CustomerName(),
diff --git a/_Main/BL/Type_CustomerOrder/StaticMethod_DoASync.qbl b/_Main/BL/Type_CustomerOrder/StaticMethod_DoASync.qbl
new file mode 100644
index 0000000..dd7d7c9
--- /dev/null
+++ b/_Main/BL/Type_CustomerOrder/StaticMethod_DoASync.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DoASync (
+  MacroPlan macroPlan,
+  Strings businessTypes,
+  const GlobalOTDTable globalOTDTable,
+  Strings organcodelist
+)
+{
+  TextBody:
+  [*
+    // yypsybs Aug-17-2023 (created)
+    //info( "Forecast Finished, Start CustomerOrder Data Broker" );
+    //macroPlan.Broker_OTD_CustomerOrder().Execute();
+    info( "CustomerOrder Data Broker Finished, Start CustomerOrder Mapping" );
+    macroPlan.DoASyncMappingCustomerOrderData( businessTypes,globalOTDTable, organcodelist );
+  *]
+}
diff --git a/_Main/BL/Type_DMF_CustomLogic/Method_OnFinished.qbl b/_Main/BL/Type_DMF_CustomLogic/Method_OnFinished.qbl
index 2298751..d2c5af4 100644
--- a/_Main/BL/Type_DMF_CustomLogic/Method_OnFinished.qbl
+++ b/_Main/BL/Type_DMF_CustomLogic/Method_OnFinished.qbl
@@ -28,6 +28,12 @@
     // 鍒涘缓澶╅┈鍏ㄥ眬鏁版嵁闆�
     GlobalOTDTable::OnServerStartup();
     
+    // 鍒涘缓澶╅┈SOP鍏ㄥ眬鏁版嵁闆�
+    GlobalOTDSOP::OnServerStartup();
+    
+    // 鍒涘缓澶╅┈鍏ㄥ眬鏃ュ織鏁版嵁闆�
+    GlobalOTDLog::OnServerStartup();
+    
     // Create a MemoryOnly-dataset that is used to receive SOAP-calls from the DataManager.
     MDSScenarioManager::CreateMemoryOnlyMDS( ScenarioManager::GetDatasetNameReceiver() );
     
diff --git a/_Main/BL/Type_DataDistributionLog/Attribute_ErrorMessage.qbl b/_Main/BL/Type_DataDistributionLog/Attribute_ErrorMessage.qbl
new file mode 100644
index 0000000..eb0383f
--- /dev/null
+++ b/_Main/BL/Type_DataDistributionLog/Attribute_ErrorMessage.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ErrorMessage
+{
+  #keys: '3[414702.1.153847470][414702.1.153847469][414702.1.153847471]'
+  Description: '閿欒娑堟伅'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_DataDistributionLog/Attribute_ErrorNo.qbl b/_Main/BL/Type_DataDistributionLog/Attribute_ErrorNo.qbl
new file mode 100644
index 0000000..15c0f4e
--- /dev/null
+++ b/_Main/BL/Type_DataDistributionLog/Attribute_ErrorNo.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ErrorNo
+{
+  #keys: '3[414702.1.153847460][414702.1.153847459][414702.1.153847461]'
+  Description: '閿欒鍙�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_DataDistributionLog/Attribute_ExecuteStatus.qbl b/_Main/BL/Type_DataDistributionLog/Attribute_ExecuteStatus.qbl
new file mode 100644
index 0000000..a085ee8
--- /dev/null
+++ b/_Main/BL/Type_DataDistributionLog/Attribute_ExecuteStatus.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ExecuteStatus
+{
+  #keys: '3[414702.1.153847412][414702.1.153847411][414702.1.153847413]'
+  Description:
+  [*
+    鎵ц鐘舵��
+    Running
+    Success
+    Error
+  *]
+  ValueType: String
+}
diff --git a/_Main/BL/Type_DataDistributionLog/Attribute_ExecuteUser.qbl b/_Main/BL/Type_DataDistributionLog/Attribute_ExecuteUser.qbl
new file mode 100644
index 0000000..b2cbfe4
--- /dev/null
+++ b/_Main/BL/Type_DataDistributionLog/Attribute_ExecuteUser.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ExecuteUser
+{
+  #keys: '3[414702.1.153847399][414702.1.153847398][414702.1.153847400]'
+  Description: '鎵ц鐢ㄦ埛'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_DataDistributionLog/Attribute_MacroPlanMDSID.qbl b/_Main/BL/Type_DataDistributionLog/Attribute_MacroPlanMDSID.qbl
new file mode 100644
index 0000000..2f6b4b0
--- /dev/null
+++ b/_Main/BL/Type_DataDistributionLog/Attribute_MacroPlanMDSID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MacroPlanMDSID
+{
+  #keys: '3[414702.1.153847422][414702.1.153847421][414702.1.153847423]'
+  Description: 'MacroPlan鏁版嵁闆嗙殑ID'
+  ValueType: Key
+}
diff --git a/_Main/BL/Type_DataDistributionLog/Attribute_ScenarioName.qbl b/_Main/BL/Type_DataDistributionLog/Attribute_ScenarioName.qbl
new file mode 100644
index 0000000..966147d
--- /dev/null
+++ b/_Main/BL/Type_DataDistributionLog/Attribute_ScenarioName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ScenarioName
+{
+  #keys: '3[414702.1.153820151][414702.1.153820150][414702.1.153820152]'
+  Description: '鍦烘櫙鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_DataDistributionLog/StaticMethod_Create.qbl b/_Main/BL/Type_DataDistributionLog/StaticMethod_Create.qbl
new file mode 100644
index 0000000..1bd9437
--- /dev/null
+++ b/_Main/BL/Type_DataDistributionLog/StaticMethod_Create.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Create (
+  GlobalOTDLog globalOTDLog,
+  String executeUser,
+  Key macroPlanMDSID,
+  String scenarioName
+)
+{
+  TextBody:
+  [*
+    globalOTDLog.DataDistributionLog( relnew,
+                                      ExecuteStatus  := "Running",
+                                      ExecuteUser    := executeUser,
+                                      MacroPlanMDSID := macroPlanMDSID,
+                                      ScenarioName   := scenarioName
+                                     );
+  *]
+}
diff --git a/_Main/BL/Type_DataDistributionLog/StaticMethod_OnError.qbl b/_Main/BL/Type_DataDistributionLog/StaticMethod_OnError.qbl
new file mode 100644
index 0000000..45dd941
--- /dev/null
+++ b/_Main/BL/Type_DataDistributionLog/StaticMethod_OnError.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnError (
+  GlobalOTDLog globalOTDLog,
+  Key macroPlanMDSID,
+  Number errorNo,
+  String errorMessage
+)
+{
+  TextBody:
+  [*
+    targetDataDistributionLog := select( globalOTDLog, DataDistributionLog, tempDDL, tempDDL.MacroPlanMDSID() = macroPlanMDSID );
+    
+    targetDataDistributionLog.ExecuteStatus( "Error" );
+    targetDataDistributionLog.ErrorNo( errorNo );
+    targetDataDistributionLog.ErrorMessage( errorMessage );
+  *]
+}
diff --git a/_Main/BL/Type_DataDistributionLog/StaticMethod_OnSuccess.qbl b/_Main/BL/Type_DataDistributionLog/StaticMethod_OnSuccess.qbl
new file mode 100644
index 0000000..0d4b122
--- /dev/null
+++ b/_Main/BL/Type_DataDistributionLog/StaticMethod_OnSuccess.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnSuccess (
+  GlobalOTDLog globalOTDLog,
+  Key macroPlanMDSID
+)
+{
+  TextBody:
+  [*
+    targetDataDistributionLog := select( globalOTDLog, DataDistributionLog, tempDDL, tempDDL.MacroPlanMDSID() = macroPlanMDSID );
+    
+    targetDataDistributionLog.ExecuteStatus( "Success" );
+  *]
+}
diff --git a/_Main/BL/Type_DataDistributionLog/_ROOT_Type_DataDistributionLog.qbl b/_Main/BL/Type_DataDistributionLog/_ROOT_Type_DataDistributionLog.qbl
new file mode 100644
index 0000000..ce88a55
--- /dev/null
+++ b/_Main/BL/Type_DataDistributionLog/_ROOT_Type_DataDistributionLog.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type DataDistributionLog
+{
+  #keys: '5[414702.1.153774697][414702.1.153774695][0.0.0][414702.1.153774696][414702.1.153774698]'
+  BaseType: Object
+  StructuredName: 'DataDistributionLogs'
+}
diff --git a/_Main/BL/Type_FillingCapacityOrder/StaticMethod_CreateFillingCapacityOrder.qbl b/_Main/BL/Type_FillingCapacityOrder/StaticMethod_CreateFillingCapacityOrder.qbl
new file mode 100644
index 0000000..38c7f8a
--- /dev/null
+++ b/_Main/BL/Type_FillingCapacityOrder/StaticMethod_CreateFillingCapacityOrder.qbl
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateFillingCapacityOrder (
+  MacroPlan macroPlan,
+  String id,
+  Real quantity,
+  Date demandDate,
+  Date forecastDemandDate,
+  String orderType,
+  String verNo
+)
+{
+  TextBody:
+  [*
+    targetCustomOrder := select( macroPlan, SalesDemand.astype( CustomerOrder ), tempCO, tempCO.ID() = id );
+    info( "id锛�", id, "    ", not isnull( targetCustomOrder ), "    鐗堟湰鍙凤細", verNo );
+    if ( not isnull( targetCustomOrder ) ) {
+      macroPlan.FillingCapacityOrder( relnew,
+                                      ID                 := OS::GenerateGUIDAsString(),
+                                      ProductID          := targetCustomOrder.ProductID(),
+                                      BusinessType       := targetCustomOrder.BusinessType(),
+                                      SalesSegmentName   := targetCustomOrder.SalesSegmentName(),
+                                      StockingPointID    := targetCustomOrder.StockingPointID(),
+                                      Customer           := targetCustomOrder.CustomerName(),
+                                      CustomerID         := targetCustomOrder.CustomerID(),
+                                      Quantity           := quantity,
+                                      UnitOfMeasureName  := targetCustomOrder.UnitOfMeasureName(),
+                                      ForecastDemandDate := forecastDemandDate,
+                                      DemandDate         := demandDate,
+                                      OrderType          := orderType,
+                                      SalesAmount        := [Number]quantity,
+                                      CurrencyID         := targetCustomOrder.CurrencyID(),
+                                      VerNo              := verNo
+                                     );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Forecast/StaticMethod_DoASync.qbl b/_Main/BL/Type_Forecast/StaticMethod_DoASync.qbl
new file mode 100644
index 0000000..84406b6
--- /dev/null
+++ b/_Main/BL/Type_Forecast/StaticMethod_DoASync.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DoASync (
+  MacroPlan macroPlan,
+  Strings businessTypes,
+  const GlobalOTDTable globalOTDTable,
+  Strings organcodelist
+)
+{
+  TextBody:
+  [*
+    // yypsybs Aug-17-2023 (created)
+    //info( "OperationCost Finished, Start Forecast Data Broker" );
+    //macroPlan.Broker_OTD_Forecast().Execute();
+    info( "Forecast Data Broker Finished, Start Forecast Mapping" );
+    macroPlan.DoASyncMappingForecastData( businessTypes,globalOTDTable, organcodelist );
+  *]
+}
diff --git "a/_Main/BL/Type_GlobalDTOTable/Method_InitTestData\04312.qbl" "b/_Main/BL/Type_GlobalDTOTable/Method_InitTestData\04312.qbl"
index f59360c..b83e909 100644
--- "a/_Main/BL/Type_GlobalDTOTable/Method_InitTestData\04312.qbl"
+++ "b/_Main/BL/Type_GlobalDTOTable/Method_InitTestData\04312.qbl"
@@ -6,34 +6,35 @@
 {
   TextBody:
   [*
-    // yypsybs Oct-7-2023 (created)
-    productCodeList := selectuniquevalues( macroPlan, Product_MP, item, item.ID() );
-    debuginfo( "productCodeList : " + [String]productCodeList.Size() );
-    
-    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() );
-    }
+    //// 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
index 2cb4752..abebe3c 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl
@@ -7,14 +7,14 @@
     //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, "涓撶敤", "鐭懆鏈�" );
+    //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
new file mode 100644
index 0000000..c84f323
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/Method_InitTestDataByYear.qbl
@@ -0,0 +1,68 @@
+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_ProductInLane.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_ProductInLane.qbl
index 5bf60a9..c137daf 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_ProductInLane.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_ProductInLane.qbl
@@ -5,16 +5,5 @@
   String errorMessage
 )
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName    := "GlobalOTDTable_ProductInLane",
-                                  ElementTotal  := 0,
-                                  ErrorMessage  := errorMessage,
-                                  IsSuccess     := false,
-                                  Name          := "浜у搧鍦ㄨ溅閬撴暟鎹�",
-                                  ErrorNo       := errorNo,
-                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
-                                 );
-  *]
+  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_ProductInLane", "浜у搧鍦ㄨ溅閬撴暟鎹�" );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_RefreshCapacityAndSaleBudgeFilter.qbl b/_Main/BL/Type_GlobalDTOTable/Method_RefreshCapacityAndSaleBudgeFilter.qbl
deleted file mode 100644
index 15f1b3b..0000000
--- a/_Main/BL/Type_GlobalDTOTable/Method_RefreshCapacityAndSaleBudgeFilter.qbl
+++ /dev/null
@@ -1,26 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method RefreshCapacityAndSaleBudgeFilter (
-  Boolean deleteBeforeCreate
-)
-{
-  TextBody:
-  [*
-    if( deleteBeforeCreate ) {
-      this.CapacityAndSaleBudgeFilterBusinessType( relflush );
-      this.CapacityAndSaleBudgeFilterPlaceOfProductionOfArray( relflush );  
-    }
-    // yypsybs Sep-21-2023 (created)
-    debuginfo( "=====RefreshCapacityAndSaleBudgeFilter====" );
-    businessTypes := selectuniquevalues( this, Global_MappingAnnualBudgetData, item, item.BusinessType() );
-    debuginfo( [String]businessTypes.Size() );
-    traverse( businessTypes, Elements, businessType ) {
-      CapacityAndSaleBudgeFilterBusinessType::CreateIfNotExist( this, businessType );
-    }
-    placeOfProductionOfArrays := selectuniquevalues( this, Global_MappingAnnualBudgetData, item, item.OrgCodeFromBom() );
-    debuginfo( [String]placeOfProductionOfArrays.Size() );
-    traverse( placeOfProductionOfArrays, Elements, placeOfProductionOfArray ) {
-      CapacityAndSaleBudgeFilterPlaceOfProductionOfArray::CreateIfNotExist( this, placeOfProductionOfArray );
-    }
-  *]
-}
diff --git "a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl" "b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
index 6d84c07..12a5633 100644
--- "a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
+++ "b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
@@ -47,6 +47,8 @@
       organcodelist := selectvalues( this, Global_MappingOperationBOM, bom,true, bom.OrganCode() );
       }
     
+    macroPlan.InitialUnitAndStockingPoint();
+    
     if ( isUnitOfMeasure_MP ) {
       Global_MappingUnitOfMeasure_MP::SynchronizeMacroPlanData( this, macroPlan );
     }
@@ -106,35 +108,25 @@
     //if ( isCustomerGrade ) {
     //  Global_MappingCustomerGrade::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_CustomerGrade" );
     //}
-    //
-    //if ( isStockingPoint_MP ) {
-    //  this.Global_MappingStockingPoint_MP( relflush );
-    //  Global_BrokerExecuteLog::CreateInOperation( this, "StockingPoint_MP", executionUser );
-    ////  this -> Global_MappingStockingPoint_MP::CreateByAPI() -> Exception() -> Global_MappingStockingPoint_MP::OnException( this );
-    //}
-    //
-    //if ( isCurrency_MP ) {
-    //  this.Global_MappingCurrency_MP( relflush );
-    //  Global_BrokerExecuteLog::CreateInOperation( this, "Currency_MP", executionUser );
-    ////  this -> Global_MappingCurrency_MP::CreateByAPI() -> Exception() -> Global_MappingCurrency_MP::OnException( this );
-    //}
-    //
-    //if ( isCurrencyRate_MP ) {
-    //  this.Global_MappingCurrencyRate_MP( relflush );
-    //  Global_BrokerExecuteLog::CreateInOperation( this, "CurrencyRate_MP", executionUser );
-    ////  this -> Global_MappingCurrencyRate_MP::CreateByAPI() -> Exception() -> Global_MappingCurrencyRate_MP::OnException( this );
-    //}
-    //
-    //if ( isLane ) {
-    //  this.Global_MappingLane( relflush );
-    //  Global_BrokerExecuteLog::CreateInOperation( this, "Lane", executionUser );
-    ////  this -> Global_MappingLane::CreateByAPI() -> Exception() -> Global_MappingLane::OnException( this );
-    //}
-    //
-    //if ( isLaneLeg ) {
-    //  this.Global_MappingLaneLeg( relflush );
-    //  Global_BrokerExecuteLog::CreateInOperation( this, "LaneLeg", executionUser );
-    ////  this -> Global_MappingLaneLeg::CreateByAPI() -> Exception() -> Global_MappingLaneLeg::OnException( this );
-    //}
+    
+    if ( isStockingPoint_MP ) {
+      Global_MappingStockingPoint_MP::SynchronizeMacroPlanData( this, macroPlan, executionUser );
+    }
+    
+    if ( isCurrency_MP ) {
+      Global_MappingCurrency_MP::SynchronizeMacroPlanData( this, macroPlan, executionUser );
+    }
+    
+    if ( isCurrencyRate_MP ) {
+      Global_MappingCurrencyRate_MP::SynchronizeMacroPlanData( this, macroPlan, executionUser );
+    }
+    
+    if ( isLane ) {
+      Global_MappingLane::SynchronizeMacroPlanData( this, macroPlan, executionUser );
+    }
+    
+    if ( isLaneLeg ) {
+      Global_MappingLaneLeg::SynchronizeMacroPlanData( this, macroPlan, executionUser );
+    }
   *]
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetBusnessStrings.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetBusnessStrings.qbl
new file mode 100644
index 0000000..fe29518
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetBusnessStrings.qbl
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetBusnessStrings (
+  const GlobalOTDTable globalOTDTable
+) as String
+{
+  TextBody:
+  [*
+    // NBoTk Sep-7-2023 (created)
+    // 鑾峰彇businessType 闆嗗悎
+    result := "";
+    scenarioNameList := construct( structured[String]);
+    
+    traverse( globalOTDTable,BusinessType,b)
+    {
+        scenarioNameList.Add( b.ScenarioName() ); 
+    }
+    
+    // 濡傛灉瀛樺湪businessType鏁版嵁 鍒欒繑鍥� : a,b,c
+    
+    if( not isnull( scenarioNameList ) )
+    {
+        result := scenarioNameList.Concatenate( ";" );
+    }
+    
+    // 娴嬭瘯鏁版嵁
+    //result := "闆嗗洟闈㈡澘;涓撲笟鏄剧ず浜嬩笟閮�;澶栧崠CELL;闈炴樉;杩愬姩鍋ュ悍;杩愬姩鍋ュ悍浜嬩笟閮�;鎵嬫満浜嬩笟閮�;鐗圭鏄剧ず;姹借溅鐢靛瓙浜嬩笟閮�;杞﹁浇鏄剧ず浜嬩笟閮�;IT浜嬩笟閮�";
+    
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/_ROOT_Type_GlobalOTDTable.qbl b/_Main/BL/Type_GlobalDTOTable/_ROOT_Type_GlobalOTDTable.qbl
index c3d49d2..0518307 100644
--- a/_Main/BL/Type_GlobalDTOTable/_ROOT_Type_GlobalOTDTable.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/_ROOT_Type_GlobalOTDTable.qbl
@@ -5,17 +5,5 @@
 {
   #keys: '5[414702.0.83354588][414702.0.83354586][0.0.0][414702.0.83354587][414702.0.83354589]'
   BaseType: Object
-  OnCreate:
-  [*
-    this.BusinessType( relnew, BusinessTypeName := "鎵嬫満浜嬩笟閮∣LED" );
-    this.BusinessType( relnew, BusinessTypeName := "涓撲笟鏄剧ず浜嬩笟閮�" );
-    this.BusinessType( relnew, BusinessTypeName := "澶栧崠CELLOLED" );
-    this.BusinessType( relnew, BusinessTypeName := "鎵嬫満浜嬩笟閮�" );
-    this.BusinessType( relnew, BusinessTypeName := "姹借溅鐢靛瓙浜嬩笟閮�" );
-    this.BusinessType( relnew, BusinessTypeName := "鐗圭鏄剧ず" );
-    this.BusinessType( relnew, BusinessTypeName := "杩愬姩鍋ュ悍浜嬩笟閮�" );
-    this.BusinessType( relnew, BusinessTypeName := "杞﹁浇鏄剧ず浜嬩笟閮�" );
-    this.BusinessType( relnew, BusinessTypeName := "IT浜嬩笟閮�" );
-  *]
   StructuredName: 'GlobalOTDTables'
 }
diff --git a/_Main/BL/Type_GlobalOTDLog/StaticMethod_GetDatasetName.qbl b/_Main/BL/Type_GlobalOTDLog/StaticMethod_GetDatasetName.qbl
new file mode 100644
index 0000000..71c12d1
--- /dev/null
+++ b/_Main/BL/Type_GlobalOTDLog/StaticMethod_GetDatasetName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDatasetName () as String
+{
+  TextBody: 'return typeof( GlobalOTDLog ).ShortName();'
+}
diff --git a/_Main/BL/Type_GlobalOTDLog/StaticMethod_GetLoadedDataset.qbl b/_Main/BL/Type_GlobalOTDLog/StaticMethod_GetLoadedDataset.qbl
new file mode 100644
index 0000000..cdc29f7
--- /dev/null
+++ b/_Main/BL/Type_GlobalOTDLog/StaticMethod_GetLoadedDataset.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetLoadedDataset () as owning MDSID
+{
+  TextBody:
+  [*
+    mds := null( MDSID, owning );
+    folder := '/root';
+    datasetName := GlobalOTDLog::GetDatasetName();
+    
+    oinfo := MDSEditor::Editor().LoadedObjectInfo( datasetName, folder, datasetName );
+    
+    if(  not isnull( oinfo ) )
+    {
+      mds := oinfo.MDSID();
+    }  
+    
+    return &mds;
+  *]
+}
diff --git a/_Main/BL/Type_GlobalOTDLog/StaticMethod_OnServerStartup.qbl b/_Main/BL/Type_GlobalOTDLog/StaticMethod_OnServerStartup.qbl
new file mode 100644
index 0000000..e2ce947
--- /dev/null
+++ b/_Main/BL/Type_GlobalOTDLog/StaticMethod_OnServerStartup.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnServerStartup
+{
+  TextBody:
+  [*
+    debuginfo( '================================ GlobalOTDLog =======================================')
+    folder := DomainModel::Domain().MDSFolderDefinitions().FindFolder( "/root" );
+    
+    datasetName := GlobalOTDLog::GetDatasetName();
+    
+    oinfo := MDSEditor::Editor().ObjectInfos( datasetName, folder.FolderID(), datasetName );
+    
+    o := select( oinfo, Elements, o, not o.IsLoaded() );
+    emptydataset := isnull( o );
+    
+    if( emptydataset )
+    {
+      MDSGlobalOTDLog::CreateMDS( datasetName, GlobalParameters_MP::GetStorageState() );
+      GlobalOTDLog::GetLoadedDataset();
+    }
+    else
+    {
+      MDSGlobalOTDLog::LoadMDSAndConvert( o.MDSID(), GlobalParameters_MP::GetStorageState() );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_GlobalOTDLog/_ROOT_Type_GlobalOTDLog.qbl b/_Main/BL/Type_GlobalOTDLog/_ROOT_Type_GlobalOTDLog.qbl
new file mode 100644
index 0000000..289fd9a
--- /dev/null
+++ b/_Main/BL/Type_GlobalOTDLog/_ROOT_Type_GlobalOTDLog.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type GlobalOTDLog
+{
+  #keys: '5[414702.1.146900046][414702.1.146900044][0.0.0][414702.1.146900045][414702.1.146900047]'
+  BaseType: Object
+  StructuredName: 'GlobalOTDLogs'
+}
diff --git "a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart\043156.qbl" b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl
similarity index 100%
rename from "_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart\043156.qbl"
rename to _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompare.qbl b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
similarity index 91%
rename from _Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompare.qbl
rename to _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
index ccbd232..64a208a 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompare.qbl
+++ b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
@@ -5,7 +5,7 @@
   CapacityAndSaleBudgeFilterItems items,
   CapacityAndSaleBudgeFilterYears years,
   CapacityAndSaleBudgeFilterMonths months,
-  GlobalOTDTable otdTable
+  const GlobalOTDTable otdTable
 )
 {
   Description: 'todo : mappingParent鏀逛负mpSync, random鍒犱簡'
@@ -35,23 +35,24 @@
     this.CapacityAndSaleBudgeCompareItemRow( relflush );
     this.CapacityAndSaleBudgeCompareItemColumn( relflush );
     // ====姹囨�绘墍鏈夊嚭鐜扮殑浜у搧====
-    historyData := selectset( this, Global_MappingAnnualBudgetData, item, true );
-    debuginfo( "historyData : " + [String]historyData.Size() )
+    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();
+    //  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, businessType, placeOfProductionOfArray );
+        row := CapacityAndSaleBudgeCompareItemRow::CreateIfNotExist( this, one.BusinessType(), one.OrgCodeFromBom() );
         // 璁板綍姣忚鍖呭惈鍝簺product
         CapacityAndSaleBudgeCompareItemRowProduct::CreateIfNotExist( row, productCode );
-      } else {
-        debuginfo( "no boms for product : " + productCode );
-      }
+    //  } else {
+    //    debuginfo( "no boms for product : " + productCode );
+    //  }
     }
     debuginfo( "CapacityAndSaleBudgeCompareItemRow : " + [String]selectset( this, CapacityAndSaleBudgeCompareItemRow, item, true ).Size() );
     // ====浠庡乏鍚戝彸鐢熸垚鍒楀ご涓庡唴瀹�====
@@ -76,14 +77,14 @@
         traverse( months, Elements, month ) {
           columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
           traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-            cellReal := Global_MappingForecast::GetQuantityByMonth( row.GetProductCodes(), this, DateTime::Now().Year(), month.MonthNo() );
+            cellReal := Global_MappingForecast::GetQuantityByMonth( row.GetProductCodes(), otdTable, DateTime::Now().Year(), month.MonthNo() );
             cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
             cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
           }
         }
         columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-骞村害棰勭畻" );
         traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-          cellReal := Global_MappingForecast::GetQuantityByYear( row.GetProductCodes(), this, year.YearNo() );
+          cellReal := Global_MappingForecast::GetQuantityByYear( row.GetProductCodes(), otdTable, year.YearNo() );
           cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
           cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
         }
@@ -119,14 +120,14 @@
         traverse( months, Elements, month ) {
           columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
           traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-            cellReal := Global_MappingAnnualBudgetData::GetSaleByMonth( row.GetProductCodes(), this, year.YearNo(), month.MonthNo() );
+            cellReal := Global_MappingAnnualBudgetData::GetSaleByMonth( row.GetProductCodes(), otdTable, year.YearNo(), month.MonthNo() );
             cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
             cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
           }
         }
         columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-骞村害棰勭畻" );
         traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-          cellReal := Global_MappingAnnualBudgetData::GetSaleByYear( row.GetProductCodes(), this, year.YearNo() );
+          cellReal := Global_MappingAnnualBudgetData::GetSaleByYear( row.GetProductCodes(), otdTable, year.YearNo() );
           cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
           cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
         }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompareExport.qbl b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompareExport.qbl
similarity index 100%
rename from _Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompareExport.qbl
rename to _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompareExport.qbl
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_ReceivingPanelMaterials.qbl b/_Main/BL/Type_GlobalOTDSOP/Method_ReceivingPanelMaterials.qbl
similarity index 100%
rename from _Main/BL/Type_GlobalDTOTable/Method_ReceivingPanelMaterials.qbl
rename to _Main/BL/Type_GlobalOTDSOP/Method_ReceivingPanelMaterials.qbl
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeOrders.qbl b/_Main/BL/Type_GlobalOTDSOP/Method_SynchronizeOrders.qbl
similarity index 100%
rename from _Main/BL/Type_GlobalDTOTable/Method_SynchronizeOrders.qbl
rename to _Main/BL/Type_GlobalOTDSOP/Method_SynchronizeOrders.qbl
diff --git a/_Main/BL/Type_GlobalOTDSOP/StaticMethod_GetDatasetName.qbl b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_GetDatasetName.qbl
new file mode 100644
index 0000000..17e0441
--- /dev/null
+++ b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_GetDatasetName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDatasetName () as String
+{
+  TextBody: 'return typeof( GlobalOTDSOP ).ShortName();'
+}
diff --git a/_Main/BL/Type_GlobalOTDSOP/StaticMethod_GetLoadedDataset.qbl b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_GetLoadedDataset.qbl
new file mode 100644
index 0000000..7dd1b25
--- /dev/null
+++ b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_GetLoadedDataset.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetLoadedDataset () as owning MDSID
+{
+  TextBody:
+  [*
+    mds := null( MDSID, owning );
+    folder := '/root';
+    datasetName := GlobalOTDSOP::GetDatasetName();
+    
+    oinfo := MDSEditor::Editor().LoadedObjectInfo( datasetName, folder, datasetName );
+    
+    if(  not isnull( oinfo ) )
+    {
+      mds := oinfo.MDSID();
+    }  
+    
+    return &mds;
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetOutputVersionData.qbl b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_GetOutputVersionData.qbl
similarity index 96%
rename from _Main/BL/Type_GlobalDTOTable/StaticMethod_GetOutputVersionData.qbl
rename to _Main/BL/Type_GlobalOTDSOP/StaticMethod_GetOutputVersionData.qbl
index a8610b8..14bc629 100644
--- a/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetOutputVersionData.qbl
+++ b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_GetOutputVersionData.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod GetOutputVersionData (
-  GlobalOTDTable owner,
+  GlobalOTDSOP owner,
   MacroPlan macroplan,
   String businessname
 )
@@ -66,6 +66,6 @@
       }
     
     // Send Data To DB
-    owner.Broker_OTD_VersionControlToDB().Execute();
+    // owner.Broker_OTD_VersionControlToDB().Execute();
   *]
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetVersionData.qbl b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_GetVersionData.qbl
similarity index 95%
rename from _Main/BL/Type_GlobalDTOTable/StaticMethod_GetVersionData.qbl
rename to _Main/BL/Type_GlobalOTDSOP/StaticMethod_GetVersionData.qbl
index b094140..7a8a609 100644
--- a/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetVersionData.qbl
+++ b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_GetVersionData.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod GetVersionData (
-  GlobalOTDTable owner,
+  GlobalOTDSOP owner,
   String businessname
 )
 {
@@ -17,7 +17,7 @@
     }
     
     // Get Data From DB
-    owner.Broker_OTD_VersionControl().Execute();
+    //owner.Broker_OTD_VersionControl().Execute();
     
     // Get Data list to deal
     listtodeal := selectset( owner, MappingVersionControl, item, item.DataTo() = businesstype );
diff --git a/_Main/BL/Type_GlobalOTDSOP/StaticMethod_OnServerStartup.qbl b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_OnServerStartup.qbl
new file mode 100644
index 0000000..d951e07
--- /dev/null
+++ b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_OnServerStartup.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnServerStartup
+{
+  TextBody:
+  [*
+    debuginfo( '================================ GlobalOTDSOP =======================================')
+    folder := DomainModel::Domain().MDSFolderDefinitions().FindFolder( "/root" );
+    
+    datasetName := GlobalOTDSOP::GetDatasetName();
+    
+    oinfo := MDSEditor::Editor().ObjectInfos( datasetName, folder.FolderID(), datasetName );
+    
+    o := select( oinfo, Elements, o, not o.IsLoaded() );
+    emptydataset := isnull( o );
+    
+    if( emptydataset )
+    {
+      MDSGlobalOTDSOP::CreateMDS( datasetName, GlobalParameters_MP::GetStorageState() );
+      GlobalOTDSOP::GetLoadedDataset();
+    }
+    else
+    {
+      MDSGlobalOTDSOP::LoadMDSAndConvert( o.MDSID(), GlobalParameters_MP::GetStorageState() );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_ReceivingPanelMaterials.qbl b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_ReceivingPanelMaterials.qbl
similarity index 62%
rename from _Main/BL/Type_GlobalDTOTable/StaticMethod_ReceivingPanelMaterials.qbl
rename to _Main/BL/Type_GlobalOTDSOP/StaticMethod_ReceivingPanelMaterials.qbl
index ad3eacc..31a3c66 100644
--- a/_Main/BL/Type_GlobalDTOTable/StaticMethod_ReceivingPanelMaterials.qbl
+++ b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_ReceivingPanelMaterials.qbl
@@ -2,11 +2,11 @@
 #parent: #root
 StaticMethod ReceivingPanelMaterials (
   NamedValueTree requestnvt
-) as stream[NamedValueTree]
+)
 {
   TextBody:
   [*
-    MDSGlobalOTDTable::Find( DatasetFindOptions::Construct("GlobalOTDTable")) -> ( c ) {
+    MDSGlobalOTDSOP::Find( DatasetFindOptions::Construct("GlobalOTDSOP")) -> ( c ) {
       return c.ReceivingPanelMaterials( requestnvt );
     }
   *]
diff --git a/_Main/BL/Type_GlobalOTDSOP/StaticMethod_RefreshCapacityAndSaleBudgeFilter.qbl b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_RefreshCapacityAndSaleBudgeFilter.qbl
new file mode 100644
index 0000000..cda1cca
--- /dev/null
+++ b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_RefreshCapacityAndSaleBudgeFilter.qbl
@@ -0,0 +1,29 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod RefreshCapacityAndSaleBudgeFilter (
+  Boolean deleteBeforeCreate,
+  const GlobalOTDTable otdTable,
+  GlobalOTDSOP otdSop
+)
+{
+  TextBody:
+  [*
+    // yypsybs Oct-17-2023 (created)
+    if( deleteBeforeCreate ) {
+      otdSop.CapacityAndSaleBudgeFilterBusinessType( relflush );
+      otdSop.CapacityAndSaleBudgeFilterPlaceOfProductionOfArray( relflush );  
+    }
+    // yypsybs Sep-21-2023 (created)
+    debuginfo( "=====RefreshCapacityAndSaleBudgeFilter====" );
+    businessTypes := selectuniquevalues( otdTable, Global_MappingAnnualBudgetData, item, item.BusinessType() );
+    debuginfo( [String]businessTypes.Size() );
+    traverse( businessTypes, Elements, businessType ) {
+      CapacityAndSaleBudgeFilterBusinessType::CreateIfNotExist( otdSop, businessType );
+    }
+    placeOfProductionOfArrays := selectuniquevalues( otdTable, Global_MappingAnnualBudgetData, item, item.OrgCodeFromBom() );
+    debuginfo( [String]placeOfProductionOfArrays.Size() );
+    traverse( placeOfProductionOfArrays, Elements, placeOfProductionOfArray ) {
+      CapacityAndSaleBudgeFilterPlaceOfProductionOfArray::CreateIfNotExist( otdSop, placeOfProductionOfArray );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_GlobalOTDSOP/_ROOT_Type_GlobalOTDSOP.qbl b/_Main/BL/Type_GlobalOTDSOP/_ROOT_Type_GlobalOTDSOP.qbl
new file mode 100644
index 0000000..7dbfe2a
--- /dev/null
+++ b/_Main/BL/Type_GlobalOTDSOP/_ROOT_Type_GlobalOTDSOP.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type GlobalOTDSOP
+{
+  #keys: '5[414702.1.113455880][414702.1.113455878][0.0.0][414702.1.113455879][414702.1.113455881]'
+  BaseType: Object
+  StructuredName: 'GlobalOTDSOPs'
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInPCSInYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInPCSInYear.qbl
index 947ff12..68956ea 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInPCSInYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInPCSInYear.qbl
@@ -1,15 +1,23 @@
 Quintiq file version 2.0
 #parent: #root
-Method GetCapacityInPCSInYear () as Real
+Method GetCapacityInPCSInYear () const as Real
 {
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
     result := 0.0;
-    for( i := 1; i <= 12; i := i + 1 ) {
-      field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlyModCapacity" + [String]i );
-      result := result + [Real]field.GetString( this );
-    }
+    result := result + [Real]this.MonthlyModCapacity1();
+    result := result + [Real]this.MonthlyModCapacity2();
+    result := result + [Real]this.MonthlyModCapacity3();
+    result := result + [Real]this.MonthlyModCapacity4();
+    result := result + [Real]this.MonthlyModCapacity5();
+    result := result + [Real]this.MonthlyModCapacity6();
+    result := result + [Real]this.MonthlyModCapacity7();
+    result := result + [Real]this.MonthlyModCapacity8();
+    result := result + [Real]this.MonthlyModCapacity9();
+    result := result + [Real]this.MonthlyModCapacity10();
+    result := result + [Real]this.MonthlyModCapacity11();
+    result := result + [Real]this.MonthlyModCapacity12();
     return result;
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl
index cfe0c10..a9c7789 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl
@@ -2,17 +2,27 @@
 #parent: #root
 Method GetCapacityInSheetInHalfYear (
   Number halfNo
-) as Real
+) const as Real
 {
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
     result := 0.0;
-    fromMonth := 1 + ( halfNo - 1 ) * 6;
-    toMonth := 6 + ( halfNo - 1 ) * 6;
-    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
-      field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySheetCapacity" + [String]i );
-      result := result + [Real]field.GetString( this );
+    if( halfNo = 1 ) {
+      result := result + [Real]this.MonthlySheetCapacity1();
+      result := result + [Real]this.MonthlySheetCapacity2();
+      result := result + [Real]this.MonthlySheetCapacity3();
+      result := result + [Real]this.MonthlySheetCapacity4();
+      result := result + [Real]this.MonthlySheetCapacity5();
+      result := result + [Real]this.MonthlySheetCapacity6();
+    }
+    if( halfNo = 2 ) {
+      result := result + [Real]this.MonthlySheetCapacity7();
+      result := result + [Real]this.MonthlySheetCapacity8();
+      result := result + [Real]this.MonthlySheetCapacity9();
+      result := result + [Real]this.MonthlySheetCapacity10();
+      result := result + [Real]this.MonthlySheetCapacity11();
+      result := result + [Real]this.MonthlySheetCapacity12();
     }
     return result;
   *]
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl
index 7da4592..66432bd 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl
@@ -2,17 +2,31 @@
 #parent: #root
 Method GetCapacityInSheetInSeason (
   Number seasonNo
-) as Real
+) const as Real
 {
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
     result := 0.0;
-    fromMonth := 1 + ( seasonNo - 1 ) * 3;
-    toMonth := 3 + ( seasonNo - 1 ) * 3;
-    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
-      field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySheetCapacity" + [String]i );
-      result := result + [Real]field.GetString( this );
+    if( seasonNo = 1 ) {
+      result := result + [Real]this.MonthlySheetCapacity1();
+      result := result + [Real]this.MonthlySheetCapacity2();
+      result := result + [Real]this.MonthlySheetCapacity3();
+    }
+    if( seasonNo = 2 ) {
+      result := result + [Real]this.MonthlySheetCapacity4();
+      result := result + [Real]this.MonthlySheetCapacity5();
+      result := result + [Real]this.MonthlySheetCapacity6();
+    }
+    if( seasonNo = 3 ) {
+      result := result + [Real]this.MonthlySheetCapacity7();
+      result := result + [Real]this.MonthlySheetCapacity8();
+      result := result + [Real]this.MonthlySheetCapacity9();
+    }
+    if( seasonNo = 4 ) {
+      result := result + [Real]this.MonthlySheetCapacity10();
+      result := result + [Real]this.MonthlySheetCapacity11();
+      result := result + [Real]this.MonthlySheetCapacity12();
     }
     return result;
   *]
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInYear.qbl
index d044dac..e4e1ff1 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInYear.qbl
@@ -1,15 +1,23 @@
 Quintiq file version 2.0
 #parent: #root
-Method GetCapacityInSheetInYear () as Real
+Method GetCapacityInSheetInYear () const as Real
 {
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
     result := 0.0;
-    for( i := 1; i <= 12; i := i + 1 ) {
-      field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySheetCapacity" + [String]i );
-      result := result + [Real]field.GetString( this );
-    }
+    result := result + [Real]this.MonthlySheetCapacity1();
+    result := result + [Real]this.MonthlySheetCapacity2();
+    result := result + [Real]this.MonthlySheetCapacity3();
+    result := result + [Real]this.MonthlySheetCapacity4();
+    result := result + [Real]this.MonthlySheetCapacity5();
+    result := result + [Real]this.MonthlySheetCapacity6();
+    result := result + [Real]this.MonthlySheetCapacity7();
+    result := result + [Real]this.MonthlySheetCapacity8();
+    result := result + [Real]this.MonthlySheetCapacity9();
+    result := result + [Real]this.MonthlySheetCapacity10();
+    result := result + [Real]this.MonthlySheetCapacity11();
+    result := result + [Real]this.MonthlySheetCapacity12();
     return result;
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl
index d882fef..bbddd8b 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl
@@ -2,17 +2,27 @@
 #parent: #root
 Method GetSaleAmountInHalfYear (
   Number halfNo
-) as Real
+) const as Real
 {
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
     result := 0.0;
-    fromMonth := 1 + ( halfNo - 1 ) * 6;
-    toMonth := 6 + ( halfNo - 1 ) * 6;
-    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
-      field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySales" + [String]i );
-      result := result + [Real]field.GetString( this );
+    if( halfNo = 1 ) {
+      result := result + [Real]this.MonthlySales1();
+      result := result + [Real]this.MonthlySales2();
+      result := result + [Real]this.MonthlySales3();
+      result := result + [Real]this.MonthlySales4();
+      result := result + [Real]this.MonthlySales5();
+      result := result + [Real]this.MonthlySales6();
+    }
+    if( halfNo = 2 ) {
+      result := result + [Real]this.MonthlySales7();
+      result := result + [Real]this.MonthlySales8();
+      result := result + [Real]this.MonthlySales9();
+      result := result + [Real]this.MonthlySales10();
+      result := result + [Real]this.MonthlySales11();
+      result := result + [Real]this.MonthlySales12();
     }
     return result;
   *]
diff --git "a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason\043000.qbl" "b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason\043000.qbl"
index c35dd6e..767082c 100644
--- "a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason\043000.qbl"
+++ "b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason\043000.qbl"
@@ -2,17 +2,31 @@
 #parent: #root
 Method GetSaleAmountInSeason (
   Number seasonNo
-) as Real
+) const as Real
 {
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
     result := 0.0;
-    fromMonth := 1 + ( seasonNo - 1 ) * 3;
-    toMonth := 3 + ( seasonNo - 1 ) * 3;
-    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
-      field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySales" + [String]i );
-      result := result + [Real]field.GetString( this );
+    if( seasonNo = 1 ) {
+      result := result + [Real]this.MonthlySales1();
+      result := result + [Real]this.MonthlySales2();
+      result := result + [Real]this.MonthlySales3();
+    }
+    if( seasonNo = 2 ) {
+      result := result + [Real]this.MonthlySales4();
+      result := result + [Real]this.MonthlySales5();
+      result := result + [Real]this.MonthlySales6();
+    }
+    if( seasonNo = 3 ) {
+      result := result + [Real]this.MonthlySales7();
+      result := result + [Real]this.MonthlySales8();
+      result := result + [Real]this.MonthlySales9();
+    }
+    if( seasonNo = 4 ) {
+      result := result + [Real]this.MonthlySales10();
+      result := result + [Real]this.MonthlySales11();
+      result := result + [Real]this.MonthlySales12();
     }
     return result;
   *]
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInYear.qbl
index 0b05b26..1ac640e 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInYear.qbl
@@ -1,15 +1,23 @@
 Quintiq file version 2.0
 #parent: #root
-Method GetSaleAmountInYear () as Real
+Method GetSaleAmountInYear () const as Real
 {
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
     result := 0.0;
-    for( i := 1; i <= 12; i := i + 1 ) {
-      field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySales" + [String]i );
-      result := result + [Real]field.GetString( this );
-    }
+    result := result + [Real]this.MonthlySales1();
+    result := result + [Real]this.MonthlySales2();
+    result := result + [Real]this.MonthlySales3();
+    result := result + [Real]this.MonthlySales4();
+    result := result + [Real]this.MonthlySales5();
+    result := result + [Real]this.MonthlySales6();
+    result := result + [Real]this.MonthlySales7();
+    result := result + [Real]this.MonthlySales8();
+    result := result + [Real]this.MonthlySales9();
+    result := result + [Real]this.MonthlySales10();
+    result := result + [Real]this.MonthlySales11();
+    result := result + [Real]this.MonthlySales12();
     return result;
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByHalfYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByHalfYear.qbl
index a73decb..949e701 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByHalfYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByHalfYear.qbl
@@ -5,7 +5,7 @@
   GlobalOTDTable parent,
   Number yearNo,
   Number halfNo
-) as Real
+) const as Real
 {
   Description: '浜ц兘 - 瀹炴暟澶у紶'
   TextBody:
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByMonth.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByMonth.qbl
index 287c1d6..64a2694 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByMonth.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByMonth.qbl
@@ -2,21 +2,100 @@
 #parent: #root
 StaticMethod GetSaleByMonth (
   Strings productNo,
-  GlobalOTDTable parent,
+  const GlobalOTDTable parent,
   Number yearNo,
   Number monthNo
-) as Real
+) const as Real
 {
   Description: '閿�鍞锛圵锛�'
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
-    field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySales" + [String]monthNo );
-    value := sum( parent, 
-                  Global_MappingAnnualBudgetData, 
-                  item, 
-                  item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
-                  [Real]field.GetString( item ) );
+    value := 0.0;
+    if( monthNo = 1 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales1() );
+    }
+    if( monthNo = 2 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales2() );
+    }
+    if( monthNo = 3 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales3() );
+    }
+    if( monthNo = 4 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales4() );
+    }
+    if( monthNo = 5 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales5() );
+    }
+    if( monthNo = 6 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales6() );
+    }
+    if( monthNo = 7 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales7() );
+    }
+    if( monthNo = 8 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales8() );
+    }
+    if( monthNo = 9 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales9() );
+    }
+    if( monthNo = 10 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales10() );
+    }
+    if( monthNo = 11 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales11() );
+    }
+    if( monthNo = 12 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales12() );
+    }
     return value;
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleBySeason.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleBySeason.qbl
index e7f39db..2f2c0b8 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleBySeason.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleBySeason.qbl
@@ -5,7 +5,7 @@
   GlobalOTDTable parent,
   Number yearNo,
   Number seasonNo
-) as Real
+) const as Real
 {
   Description: '浜ц兘 - 瀹炴暟澶у紶'
   TextBody:
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl
index 5377001..5084897 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl
@@ -2,9 +2,9 @@
 #parent: #root
 StaticMethod GetSaleByYear (
   Strings productNo,
-  GlobalOTDTable parent,
+  const GlobalOTDTable parent,
   Number yearNo
-) as Real
+) const as Real
 {
   Description: '閿�鍞锛圵锛�'
   TextBody:
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl
index d356e4c..75c58df 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl
@@ -5,7 +5,7 @@
   GlobalOTDTable parent,
   Number yearNo,
   Number halfNo
-) as Real
+) const as Real
 {
   Description: '浜ц兘 - 瀹炴暟澶у紶'
   TextBody:
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByMonth.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByMonth.qbl
index 86986c8..f8ea529 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByMonth.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByMonth.qbl
@@ -5,18 +5,97 @@
   GlobalOTDTable parent,
   Number yearNo,
   Number monthNo
-) as Real
+) const as Real
 {
   Description: '浜ц兘-瀹炴暟澶у紶'
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
-    field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySheetCapacity" + [String]monthNo );
-    value := sum( parent, 
-                  Global_MappingAnnualBudgetData, 
-                  item, 
-                  item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
-                  [Real]field.GetString( item ) );
+    value := 0.0;
+    if( monthNo = 1 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity1() );
+    }
+    if( monthNo = 2 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity2() );
+    }
+    if( monthNo = 3 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity3() );
+    }
+    if( monthNo = 4 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity4() );
+    }
+    if( monthNo = 5 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity5() );
+    }
+    if( monthNo = 6 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity6() );
+    }
+    if( monthNo = 7 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity7() );
+    }
+    if( monthNo = 8 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity8() );
+    }
+    if( monthNo = 9 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity9() );
+    }
+    if( monthNo = 10 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity10() );
+    }
+    if( monthNo = 11 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity11() );
+    }
+    if( monthNo = 12 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity12() );
+    }
     return value;
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl
index 4b9775a..0825f00 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl
@@ -5,7 +5,7 @@
   GlobalOTDTable parent,
   Number yearNo,
   Number seasonNo
-) as Real
+) const as Real
 {
   Description: '浜ц兘 - 瀹炴暟澶у紶'
   TextBody:
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl
index a98de35..d09d253 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl
@@ -4,7 +4,7 @@
   Strings productNo,
   GlobalOTDTable parent,
   Number yearNo
-) as Real
+) const as Real
 {
   Description: '浜ц兘 - 瀹炴暟澶у紶'
   TextBody:
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_SetOrgCodeFromForecast.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_SetOrgCodeFromForecast.qbl
index 149ef2e..67f51c6 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_SetOrgCodeFromForecast.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_SetOrgCodeFromForecast.qbl
@@ -7,18 +7,19 @@
   TextBody:
   [*
     // yypsybs Oct-7-2023 (created)
+    
     traverse( parent, Global_MappingAnnualBudgetData, item ) {
-      productCode := item.ProductID();
-      Global_MappingOperationBOM::CreateTestData( parent, "浜嬩笟閮�" + [String](productCode.Length() mod 3), "闈㈡澘鍩哄湴" + [String](productCode.Length() mod 4), productCode );
-      boms := selectset( parent, Global_MappingOperationBOM, bom, bom.ProductCode() = productCode );
-      if( boms.Size() > 0 ) {
-        bom := boms.First();
-        placeOfProductionOfArray := bom.OrganCode();
-        item.OrgCodeFromBom( placeOfProductionOfArray );
-      } else {
-        debuginfo( "no boms for product : " + productCode );
+    //  productCode := item.ProductID();
+    ////  Global_MappingOperationBOM::CreateTestData( parent, "浜嬩笟閮�" + [String](productCode.Length() mod 3), "闈㈡澘鍩哄湴" + [String](productCode.Length() mod 4), productCode );
+    //  boms := selectset( parent, Global_MappingOperationBOM, bom, bom.ProductCode() = productCode );
+    //  if( boms.Size() > 0 ) {
+    //    bom := boms.First();
+    //    placeOfProductionOfArray := bom.OrganCode();
+    //    item.OrgCodeFromBom( placeOfProductionOfArray );
+    //  } else {
+    //    debuginfo( "no boms for product : " + productCode );
         item.OrgCodeFromBom( item.OrganCode() );
-      }
+    //  }
     }
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..5913ebe
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,45 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan,
+  String executionUser
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name        := "鍚屾璐у竵姹囩巼鏁版嵁",
+                                                                       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();
+        }
+      
+      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_MappingCurrency_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..38ac6bb
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,45 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan,
+  String executionUser
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name        := "鍚屾璐у竵鏁版嵁",
+                                                                       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();
+        }
+      
+      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_MappingForecast/StaticMethod_GetQuantityByMonth.qbl b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByMonth.qbl
index 8b16514..d4be7f7 100644
--- a/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByMonth.qbl
+++ b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByMonth.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 StaticMethod GetQuantityByMonth (
   Strings productCodes,
-  GlobalOTDTable parent,
+  const GlobalOTDTable parent,
   Number yearNo,
   Number monthNo
 ) as Real
diff --git a/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByYear.qbl b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByYear.qbl
index f922dcf..a0df7e4 100644
--- a/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByYear.qbl
+++ b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByYear.qbl
@@ -2,11 +2,10 @@
 #parent: #root
 StaticMethod GetQuantityByYear (
   Strings productCodes,
-  GlobalOTDTable parent,
+  const GlobalOTDTable parent,
   Number yearNo
 ) as Real
 {
-  Description: ''
   TextBody:
   [*
     // yypsybs Sep-19-2023 (created)
diff --git a/_Main/BL/Type_Global_MappingLane/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingLane/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..60224b2
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingLane/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,77 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan,
+  String executionUser
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name        := "鍚屾杞﹂亾鏁版嵁",
+                                                                       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();
+        }
+      
+      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_MappingLaneLeg/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..d1743ec
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,60 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan,
+  String executionUser
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name        := "鍚屾杞﹂亾璺嚎鏁版嵁",
+                                                                       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();
+        }
+      
+      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_MappingOperation/StaticMethod_DoASyncFindMinSeq.qbl b/_Main/BL/Type_Global_MappingOperation/StaticMethod_DoASyncFindMinSeq.qbl
new file mode 100644
index 0000000..554a652
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingOperation/StaticMethod_DoASyncFindMinSeq.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DoASyncFindMinSeq (
+  const GlobalOTDTable globalOTDTable,
+  String orgCode,
+  String productId,
+  String processSection
+) as Number
+{
+  TextBody:
+  [*
+    // renhao Sep-20-2023 (created)
+    return guard (min( globalOTDTable, Global_MappingOperation, item, 
+                item.OrganCode() = orgCode and item.ProductID() = productId and item.ProcessSection() = processSection,
+                item.SequenceNumber() ), Number::MinNumber() );
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingOperation/StaticMethod_GetByProductId.qbl b/_Main/BL/Type_Global_MappingOperation/StaticMethod_GetByProductId.qbl
index 314d139..e11666f 100644
--- a/_Main/BL/Type_Global_MappingOperation/StaticMethod_GetByProductId.qbl
+++ b/_Main/BL/Type_Global_MappingOperation/StaticMethod_GetByProductId.qbl
@@ -1,9 +1,9 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod GetByProductId (
-  GlobalOTDTable otdTable,
+  const GlobalOTDTable otdTable,
   String productId
-) as Global_MappingOperation
+) as const Global_MappingOperation
 {
   TextBody:
   [*
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_GetByProductId.qbl b/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_GetByProductId.qbl
index ef81738..6dcd0ec 100644
--- a/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_GetByProductId.qbl
+++ b/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_GetByProductId.qbl
@@ -1,9 +1,9 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod GetByProductId (
-  GlobalOTDTable parent,
+  const GlobalOTDTable parent,
   String productId
-) as Global_MappingProduct_MP
+) as const Global_MappingProduct_MP
 {
   Description: '鏍规嵁鏂欏彿鏌ヨ褰�'
   TextBody:
diff --git a/_Main/BL/Type_Global_MappingProviderCapacity/StaticMethod_GetByProductId.qbl b/_Main/BL/Type_Global_MappingProviderCapacity/StaticMethod_GetByProductId.qbl
index 9038655..074991b 100644
--- a/_Main/BL/Type_Global_MappingProviderCapacity/StaticMethod_GetByProductId.qbl
+++ b/_Main/BL/Type_Global_MappingProviderCapacity/StaticMethod_GetByProductId.qbl
@@ -1,13 +1,14 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod GetByProductId (
-  GlobalOTDTable parent,
+  const GlobalOTDTable parent,
   String productId
-) as Global_MappingProviderCapacity
+) as const Global_MappingProviderCapacity
 {
   TextBody:
   [*
     // yypsybs Oct-10-2023 (created)
-    return select( parent, Global_MappingProviderCapacity, item, item.ProductID() = productId );
+    value := select( parent, Global_MappingProviderCapacity, item, item.ProductID() = productId )
+    return value;
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..7db4814
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,45 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan,
+  String executionUser
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name        := "鍚屾搴撳瓨鐐规暟鎹�",
+                                                                       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();
+        }
+      
+      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_H_FunctionClass/StaticMethod_SM_GetMaterialData.qbl b/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetMaterialData.qbl
index 2f75b5f..4cc3e53 100644
--- a/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetMaterialData.qbl
+++ b/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetMaterialData.qbl
@@ -63,7 +63,7 @@
                 MaterialType:= ObjProduct.ParentID();
                 MaterialName:=ObjProduct.Name();
               }
-              ObjUnit:= H_FunctionClass::SM_GetUnitBySKU( Owner,Obj.ComponentCode());
+              ObjUnit:= H_FunctionClass::SM_GetUnitBySKU( Owner,Obj.ComponentCode(),GlobData);
               if( not isnull( ObjUnit))
               {
                 StockPoint:= ObjUnit.Name();
@@ -83,6 +83,7 @@
       // 娌℃湁BOM 娣诲姞娴嬭瘯鏁版嵁
       else
       {
+        //error( "BOM 鏁版嵁鑾峰彇澶辫触锛屾棤娉曟墿灞曞師鏉愭枡淇℃伅锛�");
         nCount :=Owner.H_MaterialInfo(relsize );
         Owner.H_MaterialInfo(relnew,ParentSKU := ParentSKU,SKU := "SKU"+ nCount.AsQUILL() ,ForecastID := ForecastId,OrgCode := "ORG_000",VCode := VCode
                                     ,ID := H_FunctionClass::SM_GenerateID( "MI"),MaterialType := "鍘熸潗鏂�",NeedDate := NDate
diff --git a/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetUnitBySKU.qbl b/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetUnitBySKU.qbl
index cfa808a..1be87a9 100644
--- a/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetUnitBySKU.qbl
+++ b/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetUnitBySKU.qbl
@@ -2,7 +2,8 @@
 #parent: #root
 StaticMethod SM_GetUnitBySKU (
   MacroPlan Owner,
-  String SKU
+  String SKU,
+  GlobalOTDTable GlobData
 ) as Unit
 {
   Description: '閫氳繃SKU鑾峰彇搴撳瓨鐐逛俊鎭�'
@@ -11,7 +12,7 @@
     Obj :=null( Unit,constcontent );
     if( not isnull( Owner) and SKU.Length()>0)
     {
-      OrgCode := select( Owner,MappingBOM,ObjM,ObjM.ProductCode()=SKU);
+      OrgCode := select( GlobData,Global_MappingOperationBOM,ObjM,ObjM.ProductCode()=SKU);
       if( not isnull( OrgCode))
       {
         Obj := select( Owner,Unit,ObjU,ObjU.ID()=  OrgCode.OrganCode());
diff --git a/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedging.qbl b/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedging.qbl
index 88c8f1d..02a2296 100644
--- a/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedging.qbl
+++ b/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedging.qbl
@@ -15,6 +15,10 @@
     *鍒涘缓浜猴細yunying
     *鍒涘缓鏃堕棿锛�20230-09-24
     *鎻忚堪锛氱郴缁熷唴璁㈠崟鍐插噺璋冪敤鍑芥暟锛孖sNew=true鏃讹紝閲嶆柊澶勭悊棰勬祴淇℃伅锛孖sNew=false鏃讹紝鐢ㄩ娴嬬疮璁′俊鎭��
+    *鍙傛暟锛欼sNew 鏄惁鏃舵柊鐨勮绠楄〃绀�
+    *     Operator 鎿嶄綔浜�
+    *     OperatorType 鎿嶄綔绫诲瀷[鍙嶇,鎺堟潈,ERP璁㈠崟]锛岃繖閲屽簲璇ユ槸ERP璁㈠崟
+    *澶囨敞锛氬鎴峰叏閮ㄤ娇鐢ㄥ鎴峰悕绉帮紝涓嶈浣跨敤瀹㈡埛ID锛岄娴嬪師濮嬫暟鎹病鏈夊鎴稩D淇℃伅
     *****************************************************************************/
     // 鍒濆鍖栫粨鏋�
     bStatus := false;
@@ -58,9 +62,9 @@
               nHaveForecastQty :=0; //鏈夐娴嬫暟閲�
               nNoHaveForecastQty:=0;//浜旈娴嬫暟閲�
               OrderQuantity := 0;   //鍓╀綑璁㈠崟鏁伴噺
-              // 鑾峰彇棰勬祴鏁伴噺锛堝鎴�+SKU+鏈堜唤 鐞嗚鏄病鏈夌墿鏂欓娴嬶級
+              // 鑾峰彇棰勬祴鏁伴噺锛堝鎴峰悕绉�+SKU+鏈堜唤 鐞嗚鏄病鏈夌墿鏂欓娴嬶級
               OrderForecast := select(Owner, H_OrderForecastRealQty , Obj, Obj.SKU() = ObjOrder.ProductID() 
-                                                    and Obj.CustomCode() = ObjOrder.CustomerName() 
+                                                    and Obj.CustomName() = ObjOrder.CustomerName() 
                                                     and Obj.Month().Format( "YM2") =ObjOrder.EndDate().Format( "YM2"));
               if ( not isnull(OrderForecast))
               {
@@ -74,9 +78,9 @@
                   nReverseQtyOld := ObjReverse.ReverseRealQty();
                   nReverseQtyNew := nReverseQtyOld;
               }
-              // 鑾峰彇鎺堟潈鏁伴噺锛堝鎴稩D+SKU锛�
+              // 鑾峰彇鎺堟潈鏁伴噺锛堝鎴峰悕绉�+SKU锛�
               ObjAuthorize := select(Owner, H_AuthorizeRealQty , Obj, Obj.SKU() = ObjOrder.ProductID() 
-                                                                      and Obj.CustomID() = ObjOrder.CustomerName());
+                                                                      and Obj.CustomName() = ObjOrder.CustomerName());
               if ( not isnull(ObjAuthorize))
               {
                   nAuthorizeQtyOld := ObjAuthorize.AuthorizeRealQty();
diff --git a/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedgingEx.qbl b/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedgingEx.qbl
index 4379bdc..1143233 100644
--- a/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedgingEx.qbl
+++ b/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedgingEx.qbl
@@ -170,9 +170,9 @@
     {
       strMsg :="濉骇鍚庤鍗曞啿鍑忓彂鐢熼敊璇紝璇疯仈绯荤郴缁熺鐞嗗憳锛�";
       // 璁板綍閿欒鏃ュ織
-    //  Owner.H_ErrorLogs(relnew,EClassName := "H_FunctionClass",EDateTime := DateTime::ActualGMTTime(),EFunctionName := "SM_OrderHedgingEx",
-    //                     DeveloperInformation :=  e.DeveloperInformation(),ErrorNr := e.ErrorNr(),DetailedInformation := e.DetailedInformation(),
-    //                     GeneralInformation := e.GeneralInformation());                
+      Owner.H_ErrorLogs(relnew,EClassName := "H_FunctionClass",EDateTime := DateTime::ActualGMTTime(),EFunctionName := "SM_OrderHedgingEx",
+                         DeveloperInformation :=  e.DeveloperInformation(),ErrorNr := e.ErrorNr(),DetailedInformation := e.DetailedInformation(),
+                         GeneralInformation := e.GeneralInformation());                
     }
     return JSON::Object().Add( "Status",bStatus)
                          .Add( "Count",nCount)
diff --git a/_Main/BL/Type_InventoryValueAndCost/StaticMethod_DoASync.qbl b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_DoASync.qbl
new file mode 100644
index 0000000..076964d
--- /dev/null
+++ b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_DoASync.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DoASync (
+  MacroPlan macroPlan,
+  const GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    // yypsybs Aug-17-2023 (created)
+    //info( "ActualPISPIP Finished, Start InventoryCost Data Broker" );
+    //macroPlan.Broker_OTD_InventoryCost().Execute();
+    info( "InventoryCost Data Broker Finished, Start InventoryCost Mapping" );
+    macroPlan.DoASyncMappingInventoryValueAndCostData(globalOTDTable);
+  *]
+}
diff --git a/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeBusinessTypeString.qbl b/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeBusinessTypeString.qbl
deleted file mode 100644
index 717a4f8..0000000
--- a/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeBusinessTypeString.qbl
+++ /dev/null
@@ -1,11 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method CapacityAndSaleBudgeBusinessTypeString () as owning String
-{
-  TextBody:
-  [*
-    // yypsybs Sep-19-2023 (created)
-    result := selectuniquevalues( this, MappingCapacityAndSaleBudge, item, true, item.BusinessType() );
-    return result.Concatenate( ";" ) ;
-  *]
-}
diff --git a/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeExport.qbl b/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeExport.qbl
deleted file mode 100644
index 0048b94..0000000
--- a/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeExport.qbl
+++ /dev/null
@@ -1,143 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method CapacityAndSaleBudgeExport () as BinaryValue
-{
-  Description: '瀵煎嚭姣旇緝缁撴灉'
-  TextBody:
-  [*
-    // generate by generate_export.py
-    info( "export start" );
-    text:= '<?xml version="1.0" encoding="utf-8" standalone="yes"?><table><name>骞村害浜ч攢棰勭畻</name>
-    <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>浜у搧鏂欏彿</name><type>String</type></column>
-    <column><name>Array浜у湴</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>mask鏁�</name><type>String</type></column>
-    <column><name>1鏈堜骇鑳�(PCS)</name><type>Real</type></column>
-    <column><name>2鏈堜骇鑳�(PCS)</name><type>Real</type></column>
-    <column><name>3鏈堜骇鑳�(PCS)</name><type>Real</type></column>
-    <column><name>4鏈堜骇鑳�(PCS)</name><type>Real</type></column>
-    <column><name>5鏈堜骇鑳�(PCS)</name><type>Real</type></column>
-    <column><name>6鏈堜骇鑳�(PCS)</name><type>Real</type></column>
-    <column><name>7鏈堜骇鑳�(PCS)</name><type>Real</type></column>
-    <column><name>8鏈堜骇鑳�(PCS)</name><type>Real</type></column>
-    <column><name>9鏈堜骇鑳�(PCS)</name><type>Real</type></column>
-    <column><name>10鏈堜骇鑳�(PCS)</name><type>Real</type></column>
-    <column><name>11鏈堜骇鑳�(PCS)</name><type>Real</type></column>
-    <column><name>12鏈堜骇鑳�(PCS)</name><type>Real</type></column>
-    <column><name>骞翠骇鑳�(PCS)</name><type>Real</type></column>
-    <column><name>1鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
-    <column><name>2鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
-    <column><name>3鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
-    <column><name>4鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
-    <column><name>5鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
-    <column><name>6鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
-    <column><name>7鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
-    <column><name>8鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
-    <column><name>9鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
-    <column><name>10鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
-    <column><name>11鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
-    <column><name>12鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
-    <column><name>骞翠骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
-    <column><name>1鏈堥攢鍞(W)</name><type>Real</type></column>
-    <column><name>2鏈堥攢鍞(W)</name><type>Real</type></column>
-    <column><name>3鏈堥攢鍞(W)</name><type>Real</type></column>
-    <column><name>4鏈堥攢鍞(W)</name><type>Real</type></column>
-    <column><name>5鏈堥攢鍞(W)</name><type>Real</type></column>
-    <column><name>6鏈堥攢鍞(W)</name><type>Real</type></column>
-    <column><name>7鏈堥攢鍞(W)</name><type>Real</type></column>
-    <column><name>8鏈堥攢鍞(W)</name><type>Real</type></column>
-    <column><name>9鏈堥攢鍞(W)</name><type>Real</type></column>
-    <column><name>10鏈堥攢鍞(W)</name><type>Real</type></column>
-    <column><name>11鏈堥攢鍞(W)</name><type>Real</type></column>
-    <column><name>12鏈堥攢鍞(W)</name><type>Real</type></column>
-    <column><name>骞撮攢鍞(W)</name><type>Real</type></column>
-    </table>';
-    xmlDOMImplementation := XMLDOMImplementation::Create();
-    xmlDOMDocument := xmlDOMImplementation.CreateDocumentFromString( text );
-    
-    tableElement:= xmlDOMDocument.GetElementByTagName( "table", 0 );
-    
-    toExportList := selectsortedset( this, MappingCapacityAndSaleBudge, item, true, item.OrgCode() + "_" + item.PlaceOfProductionOfArray() );
-    info( "export size : " + [String]toExportList.Size() );
-    nowNo := 1;
-    traverse ( toExportList, Elements, toExport ) {
-      info( "nowNo : " + [String]nowNo );
-      nowNo := nowNo + 1;
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, ifexpr( toExport.Deleted(), "Y", "N"), "鍒犻櫎鏍囪" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.YearNo(), "骞翠唤" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.OrgCode(), "涓氬姟閮ㄩ棬" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.DisplayTechnology(), "鏄剧ず鎶�鏈垎绫�" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.BusinessType(), "涓氬姟鍒嗙被" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.LineAndSpecification(), "浜у搧绾�/浜у搧瑙勬牸" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductCode(), "浜у搧鏂欏彿" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.PlaceOfProductionOfArray(), "Array浜у湴" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.PlaceOfProductionOfEvaporation(), "钂搁晙浜у湴" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.Resolution(), "鍒嗚鲸鐜�" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ShippingForm(), "鍑鸿揣褰㈡��" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.NumberOfCut(), "鍒囧壊鏁�" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.CapacityEquivalent(), "浜ц兘褰撻噺" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.NumberOfMask(), "mask鏁�" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth1(), "1鏈堜骇鑳�(PCS)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth2(), "2鏈堜骇鑳�(PCS)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth3(), "3鏈堜骇鑳�(PCS)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth4(), "4鏈堜骇鑳�(PCS)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth5(), "5鏈堜骇鑳�(PCS)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth6(), "6鏈堜骇鑳�(PCS)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth7(), "7鏈堜骇鑳�(PCS)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth8(), "8鏈堜骇鑳�(PCS)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth9(), "9鏈堜骇鑳�(PCS)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth10(), "10鏈堜骇鑳�(PCS)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth11(), "11鏈堜骇鑳�(PCS)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth12(), "12鏈堜骇鑳�(PCS)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSTotal(), "骞翠骇鑳�(PCS)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth1(), "1鏈堜骇鑳�(瀹炴暟澶у紶)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth2(), "2鏈堜骇鑳�(瀹炴暟澶у紶)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth3(), "3鏈堜骇鑳�(瀹炴暟澶у紶)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth4(), "4鏈堜骇鑳�(瀹炴暟澶у紶)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth5(), "5鏈堜骇鑳�(瀹炴暟澶у紶)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth6(), "6鏈堜骇鑳�(瀹炴暟澶у紶)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth7(), "7鏈堜骇鑳�(瀹炴暟澶у紶)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth8(), "8鏈堜骇鑳�(瀹炴暟澶у紶)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth9(), "9鏈堜骇鑳�(瀹炴暟澶у紶)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth10(), "10鏈堜骇鑳�(瀹炴暟澶у紶)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth11(), "11鏈堜骇鑳�(瀹炴暟澶у紶)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth12(), "12鏈堜骇鑳�(瀹炴暟澶у紶)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetTotal(), "骞翠骇鑳�(瀹炴暟澶у紶)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth1(), "1鏈堥攢鍞(W)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth2(), "2鏈堥攢鍞(W)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth3(), "3鏈堥攢鍞(W)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth5(), "4鏈堥攢鍞(W)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth4(), "5鏈堥攢鍞(W)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth6(), "6鏈堥攢鍞(W)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth7(), "7鏈堥攢鍞(W)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth8(), "8鏈堥攢鍞(W)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth9(), "9鏈堥攢鍞(W)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth10(), "10鏈堥攢鍞(W)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth11(), "11鏈堥攢鍞(W)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth12(), "12鏈堥攢鍞(W)" );
-      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountTotal(), "骞撮攢鍞(W)" );
-    }
-    
-    xmlDOMSerializer := xmlDOMImplementation.CreateSerializer();
-    xmlTableString := xmlDOMSerializer.WriteToString( xmlDOMDocument );
-    
-    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTableString ) );
-    tableGroupHandle := TableGroupHandle::Create( "骞村害浜ч攢棰勭畻" );
-    tableGroupHandle.Add( tableHandle );
-    tableBinaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
-    
-    info( "export end" );
-    
-    return tableBinaryData.AsBinaryValue();
-  *]
-}
diff --git a/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgePlaceOfProductionOfArrayString.qbl b/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgePlaceOfProductionOfArrayString.qbl
deleted file mode 100644
index 2612296..0000000
--- a/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgePlaceOfProductionOfArrayString.qbl
+++ /dev/null
@@ -1,11 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method CapacityAndSaleBudgePlaceOfProductionOfArrayString () as owning String
-{
-  TextBody:
-  [*
-    // yypsybs Sep-19-2023 (created)
-    result := selectuniquevalues( this, MappingCapacityAndSaleBudge, item, true, item.PlaceOfProductionOfArray() );
-    return result.Concatenate( ";" ) ;
-  *]
-}
diff --git a/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl b/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl
index c720051..5d66729 100644
--- a/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl
+++ b/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl
@@ -7,37 +7,37 @@
 {
   TextBody:
   [*
-    // yypsybs Sep-20-2023 (created)
-    
-    debuginfo( "MPSync::TestData" );
-    
-    productCodeList := selectuniquevalues( macroPlan, Product_MP, item, item.ID() );
-    debuginfo( "productCodeList : " + [String]productCodeList.Size() );
-    
-    mpSync.MappingCapacityAndSaleBudge( relflush );
-    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 );
-        mappingCapacityAndSaleBudge := mpSync.MappingCapacityAndSaleBudge( relnew, 
-                                                                           YearNo := year,
-                                                                           ProductCode := productCode,
-                                                                           BusinessType := "浜嬩笟閮�" + [String](productCode.Length() mod 3 + 1), 
-                                                                           PlaceOfProductionOfArray := "闈㈡澘鍩哄湴" + [String](productCode.Length() mod 4 + 1)
-                                                                            );
-        for( month := 1; month <= 12; month := month + 1 ) {
-          field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInPCSInMonth" + [String]month );
-          field.Set( mappingCapacityAndSaleBudge, Real::Random( 20000.0, 30000.0 ) );
-          field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]month );
-          field.Set( mappingCapacityAndSaleBudge, Real::Random( 20000.0, 30000.0 ) );
-          field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "SaleAmountInMonth" + [String]month );
-          field.Set( mappingCapacityAndSaleBudge, Real::Random( 20000.0, 30000.0 ) );
-        }
-        mappingCapacityAndSaleBudge.CapacityInPCSTotal( mappingCapacityAndSaleBudge.GetCapacityInPCSInYear() );
-        mappingCapacityAndSaleBudge.CapacityInSheetTotal( mappingCapacityAndSaleBudge.GetCapacityInSheetInYear() );
-        mappingCapacityAndSaleBudge.SaleAmountTotal( mappingCapacityAndSaleBudge.GetSaleAmountInYear() );
-      }
-    }
-    result1 := selectset( mpSync, MappingCapacityAndSaleBudge, item, true );
-    debuginfo( "test MappingCapacityAndSaleBudge size : " + [String]result1.Size() );
+    //// yypsybs Sep-20-2023 (created)
+    //
+    //debuginfo( "MPSync::TestData" );
+    //
+    //productCodeList := selectuniquevalues( macroPlan, Product_MP, item, item.ID() );
+    //debuginfo( "productCodeList : " + [String]productCodeList.Size() );
+    //
+    //mpSync.MappingCapacityAndSaleBudge( relflush );
+    //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 );
+    //    mappingCapacityAndSaleBudge := mpSync.MappingCapacityAndSaleBudge( relnew, 
+    //                                                                       YearNo := year,
+    //                                                                       ProductCode := productCode,
+    //                                                                       BusinessType := "浜嬩笟閮�" + [String](productCode.Length() mod 3 + 1), 
+    //                                                                       PlaceOfProductionOfArray := "闈㈡澘鍩哄湴" + [String](productCode.Length() mod 4 + 1)
+    //                                                                        );
+    //    for( month := 1; month <= 12; month := month + 1 ) {
+    //      field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInPCSInMonth" + [String]month );
+    //      field.Set( mappingCapacityAndSaleBudge, Real::Random( 20000.0, 30000.0 ) );
+    //      field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]month );
+    //      field.Set( mappingCapacityAndSaleBudge, Real::Random( 20000.0, 30000.0 ) );
+    //      field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "SaleAmountInMonth" + [String]month );
+    //      field.Set( mappingCapacityAndSaleBudge, Real::Random( 20000.0, 30000.0 ) );
+    //    }
+    //    mappingCapacityAndSaleBudge.CapacityInPCSTotal( mappingCapacityAndSaleBudge.GetCapacityInPCSInYear() );
+    //    mappingCapacityAndSaleBudge.CapacityInSheetTotal( mappingCapacityAndSaleBudge.GetCapacityInSheetInYear() );
+    //    mappingCapacityAndSaleBudge.SaleAmountTotal( mappingCapacityAndSaleBudge.GetSaleAmountInYear() );
+    //  }
+    //}
+    //result1 := selectset( mpSync, MappingCapacityAndSaleBudge, item, true );
+    //debuginfo( "test MappingCapacityAndSaleBudge size : " + [String]result1.Size() );
   *]
 }
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingActualPISPIPData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingActualPISPIPData.qbl
new file mode 100644
index 0000000..f9c40e7
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingActualPISPIPData.qbl
@@ -0,0 +1,55 @@
+Quintiq file version 2.0
+#parent: #root
+Method DoASyncMappingActualPISPIPData (
+  Strings businessTypes,
+  const GlobalOTDTable globalOTDTable,
+  Boolean nuclear,
+  Strings organcodelist
+)
+{
+  TextBody:
+  [*
+    // renhao Aug-14-2023 (created)
+    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" );
+    
+    count := 0;
+    traverse( listtodeal,Elements,actual){
+      count := count + 1;
+      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)){
+      if( not isnull(businessTypes)){
+      
+        for( i :=0 ;i < businessTypes.Size();i++ ){
+          businessType := businessTypes.Element( i );
+          if( product.BusinessType() = businessType and not product.IsCommon()){
+            ActualProductInStockingPointInPeriod::CreateOrUpdate( this,
+                                                                  actual.ProductID(),
+                                                                  actual.StockingPointID(),
+                                                                  actual.Description(),
+                                                                  actual.ActualInventoryLevelEnd(),
+                                                                  actual.ManufacturedDate());
+          }
+        }
+        
+      }else{
+        ActualProductInStockingPointInPeriod::CreateOrUpdate( this,
+                                                              actual.ProductID(),
+                                                              actual.StockingPointID(),
+                                                              actual.Description(),
+                                                              actual.ActualInventoryLevelEnd(),
+                                                              actual.ManufacturedDate());
+      }
+        
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingBaseConversionFactorData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingBaseConversionFactorData.qbl
new file mode 100644
index 0000000..1a82f50
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingBaseConversionFactorData.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+Method DoASyncMappingBaseConversionFactorData (
+  const GlobalOTDTable globalOTDTable
+)
+{
+  Description: 'ETL鏁版嵁杞ā鍨嬫暟鎹�'
+  TextBody:
+  [*
+    // yypsybs Aug-15-2023 (created)
+    traverse( globalOTDTable, Global_MappingConversionFactor, item ) {
+      //濡傛灉ProductID涓嶄负绌猴紝涓斿尮閰嶄笉鍒癙roduct锛屽垯涓嶅垱寤猴紝杩斿洖涓虹┖
+    //    info( item.ProductId().AsQUILL() );
+        BaseConversionFactor::CreateOrUpdate( this, 
+                                              item.SourceUnitOfMeasureName(), 
+                                              item.TargetUnitOfMeasureName(), 
+                                              item.IsEnabled(), 
+                                              item.ProductID(), 
+                                              item.Factor() );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingCustomerOrderData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingCustomerOrderData.qbl
new file mode 100644
index 0000000..e56a4f7
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingCustomerOrderData.qbl
@@ -0,0 +1,58 @@
+Quintiq file version 2.0
+#parent: #root
+Method DoASyncMappingCustomerOrderData (
+  Strings businessTypes,
+  const GlobalOTDTable globalOTDTable,
+  Strings organcodelist
+)
+{
+  Description: 'ETL璁㈠崟棰勬祴'
+  TextBody:
+  [*
+    // yypsybs Aug-15-2023 (created)
+    // 寰呭鐞嗘暟鎹�
+    listToDeal := construct( Global_MappingCustomOrders, constcontent );
+    if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
+        listToDeal := selectset( globalOTDTable, Global_MappingCustomOrder, item, true );
+    } else {
+        listToDeal := selectset( globalOTDTable, 
+                                 Global_MappingCustomOrder, 
+                                 item, 
+                                 ( businessTypes.Find( item.BusinessType() ) <> -1 ) and 
+                                 ( 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() );
+    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();
+    info( "CustomerOrder has " + totalcount.AsQUILL() + " rows in total" );
+    
+    count := 0;
+    priorityName :="Normal";
+    // 澶勭悊
+    traverse( listToDeal, Elements, item ) {
+      count := count + 1;
+      if( count - [Number](count/100) * 100 = 0 or count = totalcount ){
+        info( "Now is dealing with the " + count.AsQUILL() + "CustomerOrder " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
+        }
+    //  if( not isnull( Product_MP::FindById( this, item.ProductID() ) ) ){
+    //    info( item.ProductID().AsQUILL() );
+      customOrder := CustomerOrder::CreateOrUpdate( this, item.CurrencyID(), item.Customer(), item.CustomerID(), item.ID(), 
+                                                    item.OrderDate(), item.OrderID(), item.OrderLineID(), item.Price(), 
+                                                    priorityName, item.ProductID(), 
+                                                    item.StockingPointID(), 
+                                                    item.SalesSegmentName(), 
+                                                    item.Quantity(), item.UnitOfMeasureName(), item.OrderType(), item.IsAvailable());
+      customOrder.BusinessType( item.BusinessType() );
+      customOrder.OrderType( item.OrderType() );
+      customOrder.OrderTime( item.OrderTime() );
+      customOrder.ProductGrade( item.ProductGrade() );
+      customOrder.SegmentPriority( item.SegmentPriority() );
+      customOrder.SheetProfitability( item.SheetProfitability() );
+    //  }else{
+    //    info( "invaild product: " + item.ProductID().AsQUILL() );
+    //    }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl
new file mode 100644
index 0000000..e8950bc
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl
@@ -0,0 +1,67 @@
+Quintiq file version 2.0
+#parent: #root
+Method DoASyncMappingExternalSupplyData (
+  Strings businessTypes,
+  Boolean nuclear,
+  const GlobalOTDTable globalOTDTable,
+  Strings organcodelist
+)
+{
+  TextBody:
+  [*
+    // 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*/);
+    totalcount := listtodeal.Size();
+    description := "鍦ㄩ�斿湪鍒�";
+    info( "ExternalSupply has " + totalcount.AsQUILL() + " rows in total" );
+    
+    count := 0;
+    traverse( listtodeal,Elements,externalSupply){
+      count := count + 1;
+      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);
+      
+      
+      if( not isnull( product)){
+        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()){
+              InventorySupply::CreateOrUpdate( externalSupply.ID(),
+                                               productMP,
+                                               stockingpoint,
+                                               externalSupply.Date(),
+                                               externalSupply.ManufacturedDate(),
+                                               externalSupply.UserQuantity(),description);
+            }
+          }
+          
+        }else{
+          
+            InventorySupply::CreateOrUpdate( externalSupply.ID(),
+                                           productMP,
+                                           stockingpoint,
+                                           externalSupply.Date(),
+                                           externalSupply.ManufacturedDate(),
+                                           externalSupply.UserQuantity(),description);
+          }
+      
+        }
+        
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingForecastData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingForecastData.qbl
new file mode 100644
index 0000000..e49c4b4
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingForecastData.qbl
@@ -0,0 +1,50 @@
+Quintiq file version 2.0
+#parent: #root
+Method DoASyncMappingForecastData (
+  Strings businessTypes,
+  const GlobalOTDTable globalOTDTable,
+  Strings organcodelist
+)
+{
+  Description: 'ETL璁㈠崟棰勬祴'
+  TextBody:
+  [*
+    // yypsybs Aug-15-2023 (created)
+    // 寰呭鐞嗘暟鎹�
+    listToDeal := construct( Global_MappingForecasts, constcontent );
+    if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
+        listToDeal := selectset( globalOTDTable, Global_MappingForecast, item, item.Quantity() > 0 );
+    } else {
+        listToDeal := selectset( globalOTDTable, 
+                                 Global_MappingForecast, 
+                                 item, 
+                                 ( businessTypes.Find( item.BusinessType() ) <> -1 ) and 
+                                 ( item.Quantity()>0 ) and 
+                                 ( 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() );
+    listToDeal := selectset( listToDeal, Elements, item, item.StartDate() >= queryStartDate and item.EndDate() <= 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();
+    info( "Forecast has " + totalcount.AsQUILL() + " rows in total" );
+    
+    count := 0;
+    priorityName := "Normal";
+    // 澶勭悊
+    traverse( listToDeal, Elements, item ) {
+      count := count + 1;
+      if( count - [Number](count/100) * 100 = 0 or count = totalcount ){
+        info( "Now is dealing with the " + count.AsQUILL() + "Forecast " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
+        }
+    //  if( not isnull( Product_MP::FindById( this, item.ProductID() ) ) ){
+      Forecast::CreateOrUpdate( this, 
+                                item.ProductID(), item.SalesSegmentName(), item.StockingPointID(), priorityName,
+                                item.CurrencyID(), item.UnitOfMeasureName(),
+                                item.ID(), item.StartDate(), item.EndDate(), item.Quantity(), item.Price());
+    //  }else{
+    //    info( "invaild product" + item.ProductID().AsQUILL() );
+    //    }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingInventoryValueAndCostData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingInventoryValueAndCostData.qbl
new file mode 100644
index 0000000..b0e0349
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingInventoryValueAndCostData.qbl
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: #root
+Method DoASyncMappingInventoryValueAndCostData (
+  const GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    // yypsybs Aug-15-2023 (created)
+    listtodeal := selectset( globalOTDTable,Global_MappingStockingPointCost,item,true );
+    totalcount := listtodeal.Size();
+    
+    info( "InventoryCost has " + totalcount.AsQUILL() + " rows in total" );
+    
+    count := 0;
+    traverse( listtodeal, Elements, item ) {
+        count := count + 1;
+        if( count - [Number](count/1000) * 1000 = 0 or count = totalcount ){
+          info( "Now is dealing with the " + count.AsQUILL() + "InventoryCost " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
+        }
+        
+        InventoryValueAndCost::CreateOrUpdate( this, item.ID(), item.ProductID(), 
+                                                 item.StockingPointID(), 
+                                                 item.AccountName(), item.CostDriver(), item.Start(), item.Cost());
+    //  if( not isnull( Product_MP::FindProductTypeIndex( item.ProductID() ) )  and not isnull( StockingPoint_MP :: FindStockingPointTypeIndex( item.StockingPointID()))){
+    //      
+    //  }else{
+    //    info( "invaild product: " + item.ProductID().AsQUILL() );
+    //    }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMData.qbl
new file mode 100644
index 0000000..8c1a8e4
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMData.qbl
@@ -0,0 +1,160 @@
+Quintiq file version 2.0
+#parent: #root
+Method DoASyncMappingOperationBOMData (
+  Strings businessTypes,
+  Boolean isKeyProduct,
+  Boolean createPurchaseSupplyMaterial,
+  const GlobalOTDTable globalOTDTable,
+  Strings organcodelist
+)
+{
+  TextBody:
+  [*
+    // yypsybs Aug-21-2023 (created)
+    keyProductList := construct( Strings );
+    if( isKeyProduct ) {
+        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, 
+                                         true, 
+    //                                     businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0 )
+                                         ( businessTypes.Find( item.BusinessType() ) >= 0 ) and 
+                                         ( organcodelist.Find( item.OrganCode() ) >= 0 ) )
+    //                             and ifexpr( isKeyProduct, 
+    //                                         keyProductList.Size() > 0 and keyProductList.Find( item.ComponentCode() ) >= 0,
+    //                                         true )
+                                 ,
+                                 item.OrganCode() + "_" + item.ProductCode() + "_" + item.ProcessSection() );
+    // 鎸塺outing鍙妑outingStep鍒嗙粍
+    routingIds := selectuniquevalues( bomList, Elements, item, true, item.OrganCode() + "_" + item.ProductCode() );
+    traverse( routingIds, Elements, routingId ) {
+        routingRows := selectset( bomList, Elements, item, true, routingId = item.OrganCode() + "_" + item.ProductCode() );
+        if( routingRows.Size() > 0 ) {
+            firstRow := routingRows.Element( 0 );
+    //        stockingPointId := firstRow.OrganCode()  + "_" + firstRow.ProductType() + "_Stock";
+    //        inputStockingPointId := firstRow.OrganCode()  + "_" + firstRow.ComponentType() + "_Stock";
+            stockingPointId := firstRow.OrganCode()  + "_Stock";
+    
+            // ========妫�鏌�========
+            product := Product_MP::FindProductTypeIndex( firstRow.ProductCode() );
+            if( not isnull( product ) ) {
+    //              error( "product : " + firstRow.ProductCode() + " not found" );
+              stockingPoint := StockingPoint_MP::FindStockingPointTypeIndex( stockingPointId );
+    
+    //          info( stockingPointId.AsQUILL() );
+      //        if( isnull( stockingPoint ) ) {
+      //            error( "stockingPoint : " + stockingPointId + " not found" );
+      //        }
+              routing := Routing::FindRoutingTypeIndex(  routingId );
+              if( not isnull( routing ) ) {
+    //              error( "routing : " + routingId + " not found" );
+                // ========澶勭悊杈撳嚭========
+                if( not isnull( stockingPoint ) ) {
+    //              info( 1 );
+                  operationsInLastSteps := Operation::FindFinalOperationsByRoutingId( this, routingId );
+                  traverse( operationsInLastSteps, Elements, operationsInLastStep ) {
+                      operationsInLastStep.CreateOperationBOM( product, stockingPoint, false, true );
+                      operationsInLastStep.GetOperationBOM( product.ID(), stockingPoint.ID(), false ).Quantity( 1 );
+                  }
+                  // ========鍒嗙粍澶勭悊杈撳叆========
+                  
+                }
+                
+                if( not isnull( stockingPoint)){
+                  if( isKeyProduct){
+                      keyRows := selectset( routingRows,Elements,routingrow,keyProductList.Find( routingrow.ComponentCode())>=0);
+                      this.DoASyncMappingOperationBOMDataRouting( routing,globalOTDTable,keyRows);
+                    }else{
+                      this.DoASyncMappingOperationBOMDataRouting( routing,globalOTDTable,routingRows);
+                    }
+                    
+                }
+              }
+           }
+        }
+    }
+    if( createPurchaseSupplyMaterial ) {
+        toCreateBomList := selectuniquevalues( bomList, Elements, item, 
+                                               item.ComponentType() = "P" and keyProductList.Find( item.ComponentCode())>=0, item.OrganCode() + item.ComponentCode());
+        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());
+        }
+    }
+    
+    
+    //
+    //keyProductList := construct( Strings );
+    //if( isKeyProduct ) {
+    //    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, 
+    //                                     true, 
+    ////                                     businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0 )
+    //                                     businessTypes.Find( item.BusinessType() ) >= 0 )
+    ////                             and ifexpr( isKeyProduct, 
+    ////                                         keyProductList.Size() > 0 and keyProductList.Find( item.ComponentCode() ) >= 0,
+    ////                                         true )
+    //                             ,
+    //                             item.OrganCode() + "_" + item.ProductCode() + "_" + item.ProcessSection() );
+    //// 鎸塺outing鍙妑outingStep鍒嗙粍
+    //routingIds := selectuniquevalues( bomList, Elements, item, true, item.OrganCode() + "_" + item.ProductCode() );
+    //traverse( routingIds, Elements, routingId ) {
+    //    routingRows := selectset( bomList, Elements, item, true, routingId = item.OrganCode() + "_" + item.ProductCode() );
+    //    if( routingRows.Size() > 0 ) {
+    //        firstRow := routingRows.Element( 0 );
+    ////        stockingPointId := firstRow.OrganCode()  + "_" + firstRow.ProductType() + "_Stock";
+    ////        inputStockingPointId := firstRow.OrganCode()  + "_" + firstRow.ComponentType() + "_Stock";
+    //        stockingPointId := firstRow.OrganCode()  + "_Stock";
+    //
+    //        // ========妫�鏌�========
+    //        product := Product_MP::FindProductTypeIndex( firstRow.ProductCode() );
+    //        if( not isnull( product ) ) {
+    ////              error( "product : " + firstRow.ProductCode() + " not found" );
+    //          stockingPoint := StockingPoint_MP::FindStockingPointTypeIndex( stockingPointId );
+    //
+    ////          info( stockingPointId.AsQUILL() );
+    //  //        if( isnull( stockingPoint ) ) {
+    //  //            error( "stockingPoint : " + stockingPointId + " not found" );
+    //  //        }
+    //          routing := Routing::FindRoutingTypeIndex(  routingId );
+    //          if( not isnull( routing ) ) {
+    ////              error( "routing : " + routingId + " not found" );
+    //            // ========澶勭悊杈撳嚭========
+    //            if( not isnull( stockingPoint ) ) {
+    ////              info( 1 );
+    //              operationsInLastSteps := Operation::FindFinalOperationsByRoutingId( this, routingId );
+    //              traverse( operationsInLastSteps, Elements, operationsInLastStep ) {
+    //                  operationsInLastStep.CreateOperationBOM( product, stockingPoint, false, true );
+    //                  operationsInLastStep.GetOperationBOM( product.ID(), stockingPoint.ID(), false ).Quantity( 1 );
+    //              }
+    //              // ========鍒嗙粍澶勭悊杈撳叆========
+    //              
+    //            }
+    //            if( not isnull( stockingPoint)){
+    //              if( isKeyProduct){
+    //                  keyRows := selectset( routingRows,Elements,routingrow,keyProductList.Find( routingrow.ComponentCode())>=0);
+    //                  this.MappingOperationBOMDataRouting( routing,globalOTDTable,keyRows);
+    //                }else{
+    //                  this.MappingOperationBOMDataRouting( routing,globalOTDTable,routingRows);
+    //                }
+    //                
+    //            }
+    //          }
+    //       }
+    //    }
+    //}
+    //if( createPurchaseSupplyMaterial ) {
+    //    toCreateBomList := selectuniquevalues( bomList, Elements, item, 
+    //                                           item.ComponentType() = "P", item.OrganCode() + item.ComponentCode());
+    //    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());
+    //    }
+    //}
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMDataRouting.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMDataRouting.qbl
new file mode 100644
index 0000000..43f35a0
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMDataRouting.qbl
@@ -0,0 +1,102 @@
+Quintiq file version 2.0
+#parent: #root
+Method DoASyncMappingOperationBOMDataRouting (
+  Routing routing,
+  const GlobalOTDTable globalOTDTable,
+  constcontent Global_MappingOperationBOMs routingRows
+)
+{
+  TextBody:
+  [*
+    // yypsybs Aug-21-2023 (created)
+    
+    // 鏍规嵁宸ヨ壓娈垫眹鎬诲鐞�
+    processSections := selectuniquevalues( routingRows, Elements, row, true, row.ProcessSection() );
+    traverse( processSections, Elements, processSection ) {
+        rows := selectset( routingRows, Elements, row, row.ProcessSection() = processSection );
+        firstRow := rows.Element( 0 );
+        // 鎵緊rgCode/productId/processSection鍖归厤涓攕equence鏈�灏忕殑涓�缁勬暟鎹�
+        minSeq := Global_MappingOperation::DoASyncFindMinSeq( globalOTDTable, firstRow.OrganCode(), firstRow.ProductCode(), processSection );
+        routingStepId := processSection + "_" + [String]minSeq;
+        // 鎵惧搴攔outingStep
+        routingStep := RoutingStep::FindByName( routing, routingStepId );
+        if( not isnull( routingStep ) ) {
+    //        error( "routing step : " + routing.ID() + "|" + routingStepId + " not found" );  
+        // 浠呬富鏂欙紝缁熶竴澶勭悊
+          noAlterRows := selectset( rows, Elements, noAlterRow, noAlterRow.AlternativeMaterialCode() = "" );
+          traverse( noAlterRows, Elements, noAlterRow ) {
+              traverse( routingStep, Operation, toLink ) {
+                  // 妫�鏌ヤ富鏂�
+                  component := Product_MP::FindById( this, noAlterRow.ComponentCode() );
+                  if( not isnull( component ) ) {
+    //                  error( "component : " + noAlterRow.ComponentCode() + " not found" );
+                  // 杩炴帴浜у搧涓巓peration
+    //              inputStockingPointId := noAlterRow.OrganCode()  + "_" + noAlterRow.ComponentType() + "_Stock";
+                  inputStockingPointId := noAlterRow.OrganCode() + "_Stock";
+                  stockingPoint := StockingPoint_MP::FindStockingPointTypeIndex( inputStockingPointId);
+                  pisp := ProductInStockingPoint_MP::CreateIfNotFound( component, stockingPoint );
+                  trash := construct( OperationBOMs );
+                  operationBOM := toLink.LinkProduct( component, true, BaseOperationLink::GetGroupID( toLink, true, false ), pisp, 
+                                                      true, trash );
+                  operationBOM.MinQuantityInGroup( 0 );
+                  operationBOM.Quantity( noAlterRow.UnitUsageOfComponents() / noAlterRow.ComponentOutputRate() );
+                  operationBOM.MaxQuantityInGroup( noAlterRow.UnitUsageOfComponents() / noAlterRow.ComponentOutputRate() );
+                  }
+              }
+          }
+          // 鏇挎崲鏂欙紝鎸変富鏂欏垎缁勫鐞�
+          alterComponentIds := selectuniquevalues( rows, Elements, row, row.AlternativeMaterialCode() <> "", row.ComponentCode() );
+          traverse( alterComponentIds, Elements, alterComponentId ) {
+              alterRows := selectset( rows, Elements, row, row.ComponentCode() = alterComponentId );
+              firstAlterRow := alterRows.Element( 0 );
+              // 妫�鏌ヤ富鏂�
+              component := Product_MP::FindById( this, firstAlterRow.ComponentCode() );
+              if( not isnull( component ) ) {
+    //              error( "component : " + firstAlterRow.ComponentCode() + " not found" );
+    //          }
+                traverse( routingStep, Operation, toLink ) {
+                    // 杩炴帴浜у搧涓巓peration
+    //                inputStockingPointId := firstAlterRow.OrganCode()  + "_" + firstAlterRow.ComponentType() + "_Stock";
+                    inputStockingPointId := firstAlterRow.OrganCode() + "_Stock";
+                    stockingPoint := StockingPoint_MP::FindStockingPointTypeIndex( inputStockingPointId);
+                    pisp := ProductInStockingPoint_MP::CreateIfNotFound( component, stockingPoint );
+                    trash := construct( OperationBOMs );
+                    mainBOM := toLink.LinkProduct( component, true, BaseOperationLink::GetGroupID( toLink, true, false ), pisp, 
+                                                        true, trash );
+                    mainBOM.Quantity( firstAlterRow.UnitUsageOfComponents() / firstAlterRow.ComponentOutputRate() );
+                    mainBOM.MaxQuantityInGroup( firstAlterRow.UnitUsageOfComponents() / firstAlterRow.ComponentOutputRate() );
+                    mainQty := mainBOM.Quantity();
+                    Transaction::Transaction().Propagate();
+                    // 娣诲姞杈呮枡
+                    traverse( alterRows, Elements, alterRow ) {
+                        alterProd := Product_MP::FindById( this, alterRow.AlternativeMaterialCode() );
+                        if( not isnull( alterProd ) ) {
+        //                    error( "alterProd : " + alterRow.AlternativeMaterialCode() + " not found" );
+    //                      stockingPointIdAlter := alterRow.OrganCode()  + "_" + alterRow.ComponentType() + "_Stock";
+                          stockingPointIdAlter := alterRow.OrganCode() + "_Stock";
+                          stockingPointAlter := StockingPoint_MP::FindById( this, stockingPointIdAlter );
+                          if( isnull( stockingPointAlter ) ) {
+                              error( "stockingPoint : " + stockingPointIdAlter + " not found" );
+                          }
+                          pispAlter := ProductInStockingPoint_MP::CreateIfNotFound( alterProd, stockingPointAlter );
+                          //mainInput := toLink.LastOperationInput(); 
+                          mainInput := select( toLink,OperationInput,operationInut,operationInut.ProductID()=alterRow.ComponentCode());
+                          trash := construct( OperationBOMs );
+                          if( not isnull( mainInput ) ) {
+                              alterBom := mainInput.Operation().LinkPISP( pispAlter, true, mainInput.OperationLinkGroupID(), trash );
+                              alterBom.Quantity( mainBOM.MaxQuantityInGroup() * alterRow.AlternativeRate() );
+                              alterBom.MaxQuantityInGroup( mainBOM.MaxQuantityInGroup() );
+    //                          info( "Quantity" + [String]alterBom.Quantity() )
+    //                          info( "MaxQuantityInGroup" + [String]alterBom.MaxQuantityInGroup() )
+                              mainQty := mainQty - alterBom.Quantity();
+                          }
+                      }
+                      mainBOM.Quantity( mainQty );
+                   }
+                }
+              }
+          }
+       }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationCostData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationCostData.qbl
new file mode 100644
index 0000000..af739ac
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationCostData.qbl
@@ -0,0 +1,75 @@
+Quintiq file version 2.0
+#parent: #root
+Method DoASyncMappingOperationCostData (
+  const GlobalOTDTable globalOTDTable,
+  Strings businesstypes,
+  Strings organcodelist
+)
+{
+  Description: 'Get operation cost data from operation mapping'
+  TextBody:
+  [*
+    // Administrator Aug-21-2023 (created)
+    // list to deal
+    listtodeal := construct( structured[Global_MappingOperation], constcontent );
+    
+    if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
+        listtodeal := selectset( globalOTDTable, Global_MappingOperation, item, true );
+    } else {
+        listtodeal := selectset( globalOTDTable, Global_MappingOperation, 
+                                 item, 
+                                 ( businesstypes.Find( item.BusinessType() ) <> -1 ) and 
+                                 ( organcodelist.Find( item.OrganCode() ) >= 0 ) );
+    }
+    
+    // Get the list to deal with max sequence number
+    listtodealwithmaxsn := construct( structured[Global_MappingOperation], constcontent );
+    traverse( listtodeal, Elements, item ){
+      maxsn := maxselect( globalOTDTable, Global_MappingOperation, 
+                          moperation, 
+                          moperation.OrganCode() = item.OrganCode(), 
+                          moperation.ProductID() = item.ProductID(), 
+                          moperation.SequenceNumber() ).SequenceNumber()
+      if( item.SequenceNumber() = maxsn ){
+          listtodealwithmaxsn.Add( item );
+        }
+      }
+    
+    totalcount := listtodealwithmaxsn.Size();
+    info( "OperationCost has " + totalcount.AsQUILL() + " rows in total" );
+    
+    count := 0;
+    // Get the operation cost data
+    traverse( listtodealwithmaxsn, Elements, item ){
+      count := count + 1;
+      if( count - [Number](count/1000) * 1000 = 0 or count = totalcount ){
+        info( "Now is dealing with the " + count.AsQUILL() + "OperationCost " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
+        }
+      id := item.OrganCode() + "_" + item.ProductID() + "_" + item.ProcessSection()+"_" + [String]item.SequenceNumber();
+      if( guard( item.Line(), "" ).Length() > 0 ) {
+          id := id + "_" + item.Line();
+        }
+      operation := Operation::FindOperationTypeIndex( id );
+      if(not isnull(operation)){
+            account := Account_MP::FindByName( this, "Operating cost" );
+            isfromdb := false;
+            existoperationcost := OperationCost::FindOperationCostTypeIndex( id );
+            if( isnull( existoperationcost ) ){
+              connecteditem := select( globalOTDTable,
+                                       Global_MappingOperationCost,
+                                       moperationcost,
+                                       moperationcost.OrgCode() = item.OrganCode(),
+                                       moperationcost.ProductID() = item.ProductID() );
+              if( not isnull( connecteditem)){
+                  cost := connecteditem.Cost();
+                  lengthoftime := connecteditem.LengthOfTime();
+                  start := connecteditem.Start();
+                  timeunit := connecteditem.TimeUnit();
+                  OperationCost::Create( id, operation, account, "Volume", start, timeunit, lengthoftime, cost, isfromdb );
+                }
+    
+              }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationData.qbl
new file mode 100644
index 0000000..31953be
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationData.qbl
@@ -0,0 +1,98 @@
+Quintiq file version 2.0
+#parent: #root
+Method DoASyncMappingOperationData (
+  Strings businessTypes,
+  const GlobalOTDTable globalOTDTable,
+  Strings organcodelist
+)
+{
+  TextBody:
+  [*
+    // yypsybs Aug-18-2023 (created)
+    // 鑾峰彇鏈夊簭鐨勫緟澶勭悊璁板綍
+    toDealList := construct( Global_MappingOperations, constcontent ) ;
+    if( not isnull( businessTypes ) and businessTypes.Size() > 0 ) {
+        toDealList := selectsortedset( globalOTDTable, Global_MappingOperation, item, 
+                                       ( businessTypes.Find( item.BusinessType() ) >= 0 ) and 
+                                       ( organcodelist.Find( item.OrganCode() ) >= 0 ), 
+    //                                   businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0, 
+                                       item.SequenceNumber() );
+    } else {
+        toDealList := selectsortedset( globalOTDTable, Global_MappingOperation, item, 
+                                       true, 
+                                       item.SequenceNumber() );
+    }
+    // 閫愭潯澶勭悊锛岄娆″鐞嗘椂鍒犻櫎steps
+    dealtRoutingIds := construct( Strings );
+    routingList := construct( Routings );
+    traverse( toDealList, Elements, item ) {
+        routingId := item.OrganCode() + "_" + item.ProductID();
+        unitId := item.OrganCode() + "_" + item.PlantName() + "_" + item.ProcessSection();
+        routingStepName := item.ProcessSection() + "_" + [String]item.SequenceNumber();
+        operationId := item.OrganCode() + "_" + item.ProductID() + "_" + item.ProcessSection()+"_" + [String]item.SequenceNumber();
+    //    info( "========" )
+    //    info( "routingId:" + routingId );
+    //    info( "unitId:" + unitId );
+    //    info( "routingStepName:" + routingStepName );
+    //    info( "operationId:" + operationId );
+        if( guard( item.Line(), "" ).Length() > 0 ) {
+            unitId := unitId + "_" + item.Line();
+            operationId := operationId + "_" + item.Line()
+        }
+        routing := Routing::CreateOrUpdate( this, routingId );
+        if( routingList.Find( routing ) < 0 ) {
+            routingList.Add( routing );  
+        }
+        // 鍒犻櫎steps(units鍏崇郴銆乷perations涔熶細鍒犻櫎)
+        if( dealtRoutingIds.Find( routingId ) < 0 ) {
+            toDeleteSteps := selectset( routing, RoutingStep, routingStep, true );
+            RoutingStep::Delete( toDeleteSteps );
+            dealtRoutingIds.Add( routingId );
+        }
+        // RoutingStep
+        routingStep := RoutingStep::FindByName( routing, routingStepName );
+        if( isnull( routingStep ) ) {
+            routingStep := RoutingStep::Create( routing, routingStepName, "", true );
+        }
+        
+        // Unit
+        unit := Unit::FindById( this, unitId );
+        if( isnull( unit ) ) {
+          // UnitOfMeasure
+        unitOfMeasure := UnitOfMeasure_MP::FindByName( this, item.UnitOfMeasureName() );
+          if( isnull( unitOfMeasure ) ) {
+              info( "unit of measure [" + item.UnitOfMeasureName() + "] not found for routing [" + routingId + "]" );
+          }
+           unit := this.Unit( relnew, 
+                              ID := unitId, Name := unitId, CapacityType := "Infinite",
+                              DefaultGridX := 0, DefaultGridY := 0,
+                              IsManuallyConfigured := false,
+                              Currency_MP := this.BaseCurrency(), UnitOfMeasure_MP := unitOfMeasure );
+        }
+        // Operation
+        haveMaxQty := item.MaximumQuantity() <> 0.0;
+        op := Operation::FindOperationTypeIndex( operationId );
+        if( isnull( op)){
+          op := Operation::Create( operationId, unit, operationId, routingStep, 
+                                        Duration::Days( item.UserLeadTime() ), Duration::Zero(), item.ActualCapacity(), false, 
+                                        [Real]item.MinimumQuantity(), haveMaxQty, guard( [Real]item.MaximumQuantity(), Real::MaxReal() ), 
+                                        0.0, 0.0, false, true );
+        }
+        
+    //    ManufactureLTProcessSection::CreateOrUpdate( op );
+    }
+    info( "========" )
+    // 閬嶅巻routing锛岃繘琛宭ink
+    lastStep := null( RoutingStep );
+    traverse( routingList, Elements.RoutingStep, step ) {
+        // 鍚屽伐鑹鸿矾绾挎椂杩炴帴
+        if( not isnull( lastStep ) and lastStep.Routing() = step.Routing() ) {
+            toLink := construct( RoutingSteps );
+            toLink.Add( lastStep );
+            // todo 瀛樼枒
+            step.LinkOperations( toLink );
+        }
+        lastStep := step;
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductData.qbl
new file mode 100644
index 0000000..55562f4
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductData.qbl
@@ -0,0 +1,94 @@
+Quintiq file version 2.0
+#parent: #root
+Method DoASyncMappingProductData (
+  Strings businesstypes,
+  const GlobalOTDTable globalOTDTable,
+  Boolean iskeyproduct
+)
+{
+  Description: 'Method to get needed data from mapping product data'
+  TextBody:
+  [*
+    // Administrator Aug-16-2023 (created)
+    // list to deal
+    info( "Get list to deal of product" );
+    listToDeal := construct( Global_MappingProduct_MPs, constcontent );
+    
+    if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
+        if( iskeyproduct = true ){
+          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, item.KeyProduct() = true );
+          }
+        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 );
+         }
+        else{
+          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, businesstypes.Find( item.BusinessType() ) >= 0 );
+        }
+    }
+    totalcount := listToDeal.Size();
+    info( "Product has " + totalcount.AsQUILL() + " rows in total" );
+    
+    // Get the root data
+    Product_MP::CreateOrUpdate( this, 
+                                "鍏ㄩ儴鐗╂枡浜у搧", 
+                                "", 
+                                "鍏ㄩ儴鐗╂枡浜у搧", 
+                                "PCS", 
+                                "鍏ㄩ儴鐗╂枡浜у搧",
+                                0.0,false,false
+                                );
+    count := 0;
+    // Get the ProductMajorType list & ProductSubclassType list
+    traverse( listToDeal, Elements, item ){
+      count := count + 1;
+      if( count - [Number](count/100) * 100 = 0 or count = totalcount ){
+        info( "Now is dealing with the " + count.AsQUILL() + "Product " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
+        }
+      if( not item.ProductMajorType() = "" ){
+        Product_MP::CreateOrUpdate( this, 
+                                    item.ProductMajorType(), 
+                                    "鍏ㄩ儴鐗╂枡浜у搧", 
+                                    item.ProductMajorType(), 
+                                    "PCS", 
+                                    item.ProductMajorType(),
+                                    0.0,false,false
+                                    );
+      }
+      productmajortype := item.ProductMajorType();
+      if( productmajortype="" ){
+        productmajortype := "鍏ㄩ儴鐗╂枡浜у搧";
+        }
+       
+    //  if( not item.ProductSubclassType() = "" ){
+    //    Product_MP::CreateOrUpdate( this, 
+    //                                item.ProductSubclassType(), 
+    //                                productmajortype, 
+    //                                item.ProductSubclassType(), 
+    //                                "PCS", 
+    //                                item.ProductSubclassType(),
+    //                                0.0,false,false
+    //                                );
+    //    }
+    //  productsubclasstype := item.ProductSubclassType();
+    //  if( productsubclasstype="" ){
+    //      productsubclasstype := productmajortype;
+    //    }
+      
+      if( not item.ID() = "" ){
+          Product_MP::CreateOrUpdate( this, 
+                                      item.ID(), 
+                                      productmajortype, 
+                                      item.ID(), 
+                                      item.UnitOfMeasureName(), 
+                                      item.Name(),
+                                      item.ShelfLife(),
+                                      item.KeyProduct(),item.IsCommon()
+                                      );
+        }
+      }
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductInLaneData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductInLaneData.qbl
new file mode 100644
index 0000000..a0521a8
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductInLaneData.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Method DoASyncMappingProductInLaneData (
+  const GlobalOTDTable globalOTDTable
+)
+{
+  Description: 'Get Product In Line data'
+  TextBody:
+  [*
+    // Administrator Aug-17-2023 (created)
+    // list to deal
+    listtodeal := selectset( globalOTDTable, Global_MappingProductInLane, item ,true );
+    totalcount := listtodeal.Size();
+    info( "ProductInLane has " + totalcount.AsQUILL() + " rows in total" );
+    
+    count := 0;
+    // Create ProductInLane
+    traverse( listtodeal, Elements, item ){
+      count := count + 1;
+      if( count - [Number](count/1000) * 1000 = 0 or count = totalcount ){
+        info( "Now is dealing with the " + count.AsQUILL() + "ProductInLane " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
+        }
+      ProductInLane::CreateOrUpdate( this, item.ProductID(), item.LineID() );
+      }
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingSalesSegmentData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingSalesSegmentData.qbl
new file mode 100644
index 0000000..8ba6f6f
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingSalesSegmentData.qbl
@@ -0,0 +1,60 @@
+Quintiq file version 2.0
+#parent: #root
+Method DoASyncMappingSalesSegmentData (
+  Strings businessTypes,
+  const GlobalOTDTable globalOTDTable
+)
+{
+  Description: 'ETL閿�鍞儴闂�'
+  TextBody:
+  [*
+    // yypsybs Aug-15-2023 (created)
+    // 寰呭鐞嗘暟鎹�
+    listToDeal := construct( Global_MappingSalesSegment_MPs, constcontent );
+    if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
+        listToDeal := selectset( globalOTDTable, Global_MappingSalesSegment_MP, item, true );
+    } else {
+        listToDeal := selectset( globalOTDTable, 
+                                 Global_MappingSalesSegment_MP, 
+                                 item, 
+                                 businessTypes.Find( item.BusinessType() ) <> -1 );
+    }
+    //nameList := construct( structured[String] );
+    //nameList := selectvalues( listToDeal, Elements, item, true, item.Name() );
+    //// 妫�鏌arent
+    //traverse( listToDeal, Elements, item, item.ParentName() <> "" ) {
+    //    if( nameList.Find( item.ParentName() ) = -1 ) {
+    //        error( "sales segment parent not found: " + item.Name().AsQUILL() );
+    //    }
+    //}
+    //// 閫愬眰閬嶅巻锛岀洿鑷冲鐞嗗畬鎴�
+    //dealtNameList := construct( structured[String] );
+    //while( listToDeal.Size() <> dealtNameList.Size() ) {
+    //    traverse( listToDeal, Elements, item ) {
+    //        // 鏈鐞嗚繃
+    //        if( dealtNameList.Find( item.Name() ) < 0 ){
+    //            // 鏃犵埗閮ㄩ棬锛岀洿鎺ュ鐞�
+    //            if( item.ParentName() = "" ) {
+    //                SalesSegment_MP::CreateOrUpdate( this, item.Name(), item.DisplayIndex(), item.ParentName() );
+    //                dealtNameList.Add( item.Name() );
+    //            } 
+    //            // 鏈夌埗閮ㄩ棬涓旂埗閮ㄩ棬宸插鐞�
+    //            else if( item.ParentName() <> "" and dealtNameList.Find(item.ParentName()) >= 0 ) {
+    //                SalesSegment_MP::CreateOrUpdate( this, item.Name(), item.DisplayIndex(), item.ParentName() );
+    //                dealtNameList.Add( item.Name() );
+    //            }
+    //            // 鏈夌埗閮ㄩ棬涓旂埗閮ㄩ棬鏈鐞嗭紝涓嬩竴杞鐞�
+    //        }
+    //    }
+    //}
+    traverse( listToDeal,Elements,item ){
+      if( item.ParentName() <> "" and isnull( SalesSegment_MP::FindByName( this, item.ParentName() ) ) ){
+        SalesSegment_MP::CreateOrUpdate( this, item.ParentName(), item.DisplayIndex(), "" );
+        }
+      }
+    
+    traverse( listToDeal,Elements,item ){
+        SalesSegment_MP::CreateOrUpdate( this, item.Name(), item.DisplayIndex(), item.ParentName() );
+      }
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingUnitData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingUnitData.qbl
new file mode 100644
index 0000000..171448e
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingUnitData.qbl
@@ -0,0 +1,106 @@
+Quintiq file version 2.0
+#parent: #root
+Method DoASyncMappingUnitData (
+  Strings businesstypes,
+  const GlobalOTDTable globalOTDTable,
+  Strings organcodelist
+)
+{
+  Description: 'Get unit data from operation mapping'
+  TextBody:
+  [*
+    // Administrator Aug-21-2023 (created)
+    // list to deal
+    listtodeal := construct( Global_MappingOperations, constcontent );
+    
+    if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
+        listtodeal := selectset( globalOTDTable, Global_MappingOperation, item, true );
+    } else {
+        listtodeal := selectset( globalOTDTable, Global_MappingOperation, item, 
+    //                             businesstypes.Difference( businesstypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0
+                                 ( businesstypes.Find( item.BusinessType() ) >= 0 ) and 
+                                 ( organcodelist.Find( item.OrganCode() ) >= 0 )
+                                );
+    }
+    
+    //Set the Default values
+    unitofmeasurename := "PCS";
+    infinite := "Infinite";
+    capacitytype := "Transport quantity";
+    
+    // Get the root data
+    Unit::CreateOrUpdate( this, 
+                          "澶╅┈闆嗗洟", 
+                          "澶╅┈闆嗗洟", 
+                          "", 
+                          infinite, 
+                          unitofmeasurename );
+    
+    // Get the sub root data
+    Unit::CreateOrUpdate( this, 
+                          "鐢熶骇", 
+                          "鐢熶骇", 
+                          "澶╅┈闆嗗洟", 
+                          infinite, 
+                          unitofmeasurename );
+    
+    supplyunit := Unit::CreateOrUpdate( this, 
+                          "渚涘簲鍟�", 
+                          "渚涘簲鍟�", 
+                          "澶╅┈闆嗗洟", 
+                          infinite, 
+                          unitofmeasurename );
+    supplyunit.IsSupplier(true);
+    
+    Unit::CreateOrUpdate( this, 
+                          "鏁磋溅杩愯緭", 
+                          "鏁磋溅杩愯緭", 
+                          "澶╅┈闆嗗洟", 
+                          capacitytype, 
+                          unitofmeasurename );
+    
+    // Get the unit list
+    traverse( listtodeal, Elements, item){
+      OrgName := item.OrganName();
+      if( OrgName = ''){
+        OrgName := item.OrganCode();
+      }
+      //Get the first level unit
+      Unit::CreateOrUpdate( this, 
+                            item.OrganCode(), 
+                            OrgName, 
+                            "鐢熶骇", 
+                            infinite, 
+                            unitofmeasurename );
+                           
+      //Get the second level unit
+      secondlevelid := item.OrganCode() + "_" + item.PlantName();
+      Unit::CreateOrUpdate( this, 
+                            secondlevelid, 
+                            secondlevelid, 
+                            item.OrganCode(), 
+                            infinite, 
+                            unitofmeasurename );
+        
+      //Get the third level unit
+      thirdlevelid := secondlevelid + "_" + item.ProcessSection();
+      Unit::CreateOrUpdate( this, 
+                            thirdlevelid, 
+                            thirdlevelid, 
+                            secondlevelid, 
+                            "Time", 
+                            item.UnitOfMeasureName() );
+                   
+      //Get the last level unit
+      if( item.Line()<>"" ){
+        lastlevelid := thirdlevelid + "_" + item.Line();
+        Unit::CreateOrUpdate( this, 
+                              lastlevelid, 
+                              lastlevelid, 
+                              thirdlevelid, 
+                              "Time", 
+                              item.UnitOfMeasureName() );
+      }
+      }
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingUnitOfMeasureData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingUnitOfMeasureData.qbl
new file mode 100644
index 0000000..bc88799
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingUnitOfMeasureData.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+Method DoASyncMappingUnitOfMeasureData (
+  const GlobalOTDTable globalotdtable
+)
+{
+  Description: 'ETL鏁版嵁杞ā鍨嬫暟鎹�'
+  TextBody:
+  [*
+    // yypsybs Aug-15-2023 (created)
+    
+    defaultOld := UnitOfMeasure_MP::FindDefault( this );
+    defaultNew := select( globalotdtable, Global_MappingUnitOfMeasure_MP, item, true, item.IsDefault() );
+    
+    if( not isnull( defaultOld ) and not isnull( defaultNew )
+        and defaultOld.Name() <> defaultNew.Name() ) {
+        defaultOld.IsDefault(false);
+        //error( "multi default unit of measure" )
+    }
+    
+    traverse( globalotdtable, Global_MappingUnitOfMeasure_MP, item ) {
+        UnitOfMeasure_MP::CreateOrUpdate( this, item.Name(), item.IsDefault() );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
index 9385366..a8db6ce 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
@@ -24,7 +24,7 @@
       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( this,MappingProduct,product,product.ID() = actual.ProductID() and product.KeyProduct() = nuclear,true);
+      product := select( globalOTDTable,Global_MappingProduct_MP,product,product.ID() = actual.ProductID() and product.KeyProduct() = nuclear,true);
       if( not isnull( product)){
       if( not isnull(businessTypes)){
       
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
index 208a5e8..6dd9ddc 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
@@ -76,7 +76,7 @@
     }
     if( createPurchaseSupplyMaterial ) {
         toCreateBomList := selectuniquevalues( bomList, Elements, item, 
-                                               item.ComponentType() = "P", item.OrganCode() + item.ComponentCode());
+                                               item.ComponentType() = "P" and keyProductList.Find( item.ComponentCode())>=0, item.OrganCode() + item.ComponentCode());
         traverse( toCreateBomList, Elements, key ) {
             boms := selectset( bomList, Elements, item, item.ComponentType() = "P" and item.OrganCode() + item.ComponentCode() = key );
             bom := boms.First();
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingUnitOfMeasureData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingUnitOfMeasureData.qbl
index f3118cb..05f843b 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingUnitOfMeasureData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingUnitOfMeasureData.qbl
@@ -10,7 +10,7 @@
     // yypsybs Aug-15-2023 (created)
     
     defaultOld := UnitOfMeasure_MP::FindDefault( this );
-    defaultNew := select( this, MappingUnitOfMeasure, item, true, item.IsDefault() );
+    defaultNew := select( globalotdtable, Global_MappingUnitOfMeasure_MP, item, true, item.IsDefault() );
     
     if( not isnull( defaultOld ) and not isnull( defaultNew )
         and defaultOld.Name() <> defaultNew.Name() ) {
diff --git "a/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl" "b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl"
new file mode 100644
index 0000000..8e5e156
--- /dev/null
+++ "b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl"
@@ -0,0 +1,166 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DoASync (
+  MacroPlan macroPlan,
+  Strings businessTypes,
+  Boolean isKeyProduct,
+  Boolean createPurchaseSupplyMaterial,
+  const GlobalOTDTable globalOTDTable
+)
+{
+  Description: '鍗曟鍚屾'
+  TextBody:
+  [*
+    // yypsybs Aug-17-2023 (created)
+    // 甯佺鍜屽竵绉嶆眹鐜�
+    //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() );
+          }
+        }
+      }
+    
+    if( organcodelist.Size() = 0 ){
+      organcodelist := selectvalues( globalOTDTable, Global_MappingOperationBOM, bom,true, bom.OrganCode() );
+      }
+    
+    info( "KeyProduct : " + [String]isKeyProduct )
+    info( "Create purchase supply material : " + [String]createPurchaseSupplyMaterial )
+    
+    // 鍒濆鎹�-0
+    info( "Start Initial" );
+    macroPlan.InitialUnitAndStockingPoint();
+    
+    // 鍗曚綅-1
+    UnitOfMeasure_MP::DoASync( globalOTDTable, macroPlan );
+    
+    // 閿�鍞儴闂�-2
+    SalesSegment_MP::DoASync( macroPlan, businessTypes,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);
+    
+    // 搴撳瓨鐐�-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 );
+    
+    // 璐у竵淇℃伅-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 );
+    
+    //璐у竵姹囩巼淇℃伅-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 );
+    
+    // 浜у搧鐗╂枡-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 );
+    
+    //鍗曚綅杞崲-7
+    BaseConversionFactor::DoASync( macroPlan ,globalOTDTable);
+    
+    // 宸ヨ壓璺嚎 + BOM-9
+    info( "Unit Finished, Start Operation Mapping" );
+    macroPlan.DoASyncMappingOperationData( businessTypes ,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 );
+    
+    //杞﹂亾淇℃伅-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 );
+    
+    //杞﹂亾杩愯緭娈�-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 );
+    
+    // 渚涘簲缃戠粶锛堣溅閬擄級-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);
+    
+    // 鍦ㄥ簱搴撳瓨鏁版嵁-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 );
+    
+    // 鍦ㄩ�斿簱瀛�-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 );
+    
+    // 搴撳瓨鎴愭湰-15
+    InventoryValueAndCost::DoASync( macroPlan,globalOTDTable );
+    
+    // todo 鍒堕�犳垚鏈�-16
+    info( "InventoryCost Finished, Start OperationCost Mapping" );
+    macroPlan.DoASyncMappingOperationCostData( globalOTDTable, businessTypes, organcodelist );
+    
+    // 璁㈠崟棰勬祴-17
+    Forecast::DoASync( macroPlan, businessTypes, globalOTDTable, organcodelist );
+    
+    // 璁㈠崟闇�姹�-18
+    CustomerOrder::DoASync( macroPlan, businessTypes, globalOTDTable, organcodelist );
+    
+    //鍒犻櫎澶氫綑鎶ラ敊鏁版嵁-19
+    macroPlan.DeleteSnaityCheck();
+    
+    //// todo 渚涘簲鍟嗚兘鍔�
+    //info( "ProviderCapacity::DoSync" )
+    
+    //// todo 渚涘簲鍟嗗洖澶�
+    //info( "ProviderReply::DoSync" )
+  *]
+}
diff --git "a/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043896.qbl" "b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043896.qbl"
new file mode 100644
index 0000000..fc549a7
--- /dev/null
+++ "b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043896.qbl"
@@ -0,0 +1,23 @@
+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
new file mode 100644
index 0000000..4fb0a6b
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DoASync (
+  Scenario scenario,
+  String businessTypeStr,
+  Boolean isKeyProduct,
+  Boolean createPurchaseSupplyMaterial,
+  const GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    info( scenario.DatasetMDSID(), "    浜嬩笟閮細", businessTypeStr, "    isKeyProduct锛�", isKeyProduct, "    createPurchaseSupplyMaterial锛�", createPurchaseSupplyMaterial );
+    
+    MDSMacroPlan::Root( scenario.DatasetMDSID() )
+    -> MacroPlan::DoASync( businessTypeStr,
+                           isKeyProduct,
+                           createPurchaseSupplyMaterial,
+                           globalOTDTable
+                          )
+    -> MacroPlan::DoASyncSuccess( scenario.DatasetMDSID() )
+    -> Exception()
+    -> MacroPlan::DoASyncOnException( globalOTDTable, scenario.DatasetMDSID() );
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/StaticMethod_DoASyncOnException.qbl b/_Main/BL/Type_MacroPlan/StaticMethod_DoASyncOnException.qbl
new file mode 100644
index 0000000..13d9e8c
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/StaticMethod_DoASyncOnException.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DoASyncOnException (
+  Exception exception,
+  GlobalOTDTable globalOTDTable,
+  Key macroPlanMDSID
+)
+{
+  TextBody:
+  [*
+    options := DatasetFindOptions::Construct( "GlobalOTDLog" ).IncludeOffline( true );
+    
+    mdskey := DatasetController::FindUnique( options );
+    
+    MDSGlobalOTDLog::Root( mdskey ) -> DataDistributionLog::OnError( macroPlanMDSID, 
+                                                                     exception.ErrorNumber(), 
+                                                                     exception.Message() );
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/StaticMethod_DoASyncSuccess.qbl b/_Main/BL/Type_MacroPlan/StaticMethod_DoASyncSuccess.qbl
new file mode 100644
index 0000000..b045feb
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/StaticMethod_DoASyncSuccess.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DoASyncSuccess (
+  MacroPlan macroPlan,
+  Key macroPlanMDSID
+)
+{
+  TextBody:
+  [*
+    options := DatasetFindOptions::Construct( "GlobalOTDLog" ).IncludeOffline( true );
+    
+    mdskey := DatasetController::FindUnique( options );
+    
+    MDSGlobalOTDLog::Root( mdskey ) -> DataDistributionLog::OnSuccess( macroPlanMDSID );
+  *]
+}
diff --git "a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync\043618.qbl" "b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync\043618.qbl"
index 9d29f63..d7a38f2 100644
--- "a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync\043618.qbl"
+++ "b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync\043618.qbl"
@@ -12,9 +12,9 @@
   TextBody:
   [*
     // yypsybs Aug-17-2023 (created)
-    businessTypes := construct( Strings );
+    businessTypes := construct( BusinessType );
     if( businessTypeStr.Length() > 0 ) {
-        businessTypes := businessTypeStr.Tokenize( ',' );
+    //    businessTypes := businessTypeStr.Tokenize( ',' );
     }
     MacroPlan::DoSync( macroPlan, businessTypes, isKeyProduct, createPurchaseSupplyMaterial ,globalOTDTable);
   *]
diff --git a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync.qbl b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync.qbl
index 49fac75..2b1d5ae 100644
--- a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync.qbl
+++ b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync.qbl
@@ -11,7 +11,7 @@
   TextBody:
   [*
     // yypsybs Aug-17-2023 (created)
-    businessTypes := construct( Strings );
+    businessTypes := construct( BusinessType );
     MacroPlan::DoSync( macroPlan, businessTypes, isKeyProduct, createPurchaseSupplyMaterial ,globalOTDTable);
   *]
 }
diff --git a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
index 5178d37..8cb5656 100644
--- a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
+++ b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 StaticMethod DoSync (
   MacroPlan macroPlan,
-  Strings businessTypes,
+  BusinessType businessType,
   Boolean isKeyProduct,
   Boolean createPurchaseSupplyMaterial,
   GlobalOTDTable globalOTDTable
@@ -16,20 +16,8 @@
     //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( "," );
+    organcodelist := selectvalues( businessType, OrganCode, organ, true, organ.OrganCodeName() );
     
     if( organcodelist.Size() = 0 ){
       organcodelist := selectvalues( globalOTDTable, Global_MappingOperationBOM, bom,true, bom.OrganCode() );
@@ -46,14 +34,14 @@
     UnitOfMeasure_MP::DoSync( globalOTDTable,macroPlan );
     
     // 閿�鍞儴闂�-2
-    SalesSegment_MP::DoSync( macroPlan, businessTypes,globalOTDTable );
+    SalesSegment_MP::DoSync( 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.MappingUnitData( businessTypes ,globalOTDTable, organcodelist);
+    macroPlan.MappingUnitData( businessTypeName ,globalOTDTable, organcodelist);
     
     // 搴撳瓨鐐�-3
     info( "Sales Segment Finished, Start Get StockingPoint From Api" )
@@ -90,18 +78,18 @@
     //macroPlan.Broker_OTD_Product().Execute();
     info( "Product Data Broker Finished, Start Product Mapping" );
     //testproduct := construct( Strings );
-    macroPlan.MappingProductData( businessTypes, globalOTDTable,isKeyProduct );
+    macroPlan.MappingProductData( businessTypeName, globalOTDTable,isKeyProduct );
     
     //鍗曚綅杞崲-7
     BaseConversionFactor::DoSync( macroPlan ,globalOTDTable);
     
     // 宸ヨ壓璺嚎 + BOM-9
     info( "Unit Finished, Start Operation Mapping" );
-    macroPlan.MappingOperationData( businessTypes ,globalOTDTable, organcodelist );  
+    macroPlan.MappingOperationData( businessTypeName ,globalOTDTable, organcodelist );  
     //info( "Operation Finished, Start BOM Data Broker" );
     //macroPlan.Broker_OTD_BOM().Execute();
     info( "BOM Data Broker Finished, Start BOM Mapping" );
-    macroPlan.MappingOperationBOMData( businessTypes, isKeyProduct, createPurchaseSupplyMaterial,globalOTDTable, organcodelist );
+    macroPlan.MappingOperationBOMData( businessTypeName, isKeyProduct, createPurchaseSupplyMaterial,globalOTDTable, organcodelist );
     
     //杞﹂亾淇℃伅-10
     info( "BOM Finished, Start Get Lanes From Api" );
@@ -133,26 +121,26 @@
     //info( "ProductInLane Finished, Start ActualPISPIP Data Broker" );
     //macroPlan.Broker_OTD_ActualPISPIP().Execute();
     info( "ActualPISPIP Data Broker Finished, Start ActualPISPIP Mapping" );
-    macroPlan.MappingActualPISPIPData( businessTypes, globalOTDTable,isKeyProduct, organcodelist );
+    macroPlan.MappingActualPISPIPData( 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.MappingExternalSupplyData( businessTypes, isKeyProduct ,globalOTDTable, organcodelist );
+    macroPlan.MappingExternalSupplyData( businessTypeName, isKeyProduct ,globalOTDTable, organcodelist );
     
     // 搴撳瓨鎴愭湰-15
     InventoryValueAndCost::DoSync( macroPlan,globalOTDTable );
     
     // todo 鍒堕�犳垚鏈�-16
     info( "InventoryCost Finished, Start OperationCost Mapping" );
-    macroPlan.MappingOperationCostData( globalOTDTable, businessTypes, organcodelist );
+    macroPlan.MappingOperationCostData( globalOTDTable, businessTypeName, organcodelist );
     
     // 璁㈠崟棰勬祴-17
-    Forecast::DoSync( macroPlan, businessTypes, globalOTDTable, organcodelist );
+    Forecast::DoSync( macroPlan, businessTypeName, globalOTDTable, organcodelist );
     
     // 璁㈠崟闇�姹�-18
-    CustomerOrder::DoSync( macroPlan, businessTypes, globalOTDTable, organcodelist );
+    CustomerOrder::DoSync( macroPlan, businessTypeName, globalOTDTable, organcodelist );
     
     //鍒犻櫎澶氫綑鎶ラ敊鏁版嵁-19
     macroPlan.DeleteSnaityCheck();
diff --git a/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Apply.qbl b/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Apply.qbl
index 8e7f10e..12288b1 100644
--- a/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Apply.qbl
+++ b/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Apply.qbl
@@ -1,7 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Apply (
-  ManufactureLTImputations toApply
+  ManufactureLTImputations toApply,
+  MacroPlan macroPlan
 )
 {
   TextBody:
@@ -9,7 +10,7 @@
     // yypsybs Aug-28-2023 (created)
     traverse( toApply, Elements, parent ) {
       traverse( parent, ManufactureLTProcessSection, child ) {
-        ManufactureLTProcessSection::Apply( child );  
+        ManufactureLTProcessSection::Apply( child, macroPlan );  
       }
     }
   *]
diff --git a/_Main/BL/Type_ManufactureLTImputation/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_ManufactureLTImputation/StaticMethod_CreateOrUpdate.qbl
index 3190688..85c2f90 100644
--- a/_Main/BL/Type_ManufactureLTImputation/StaticMethod_CreateOrUpdate.qbl
+++ b/_Main/BL/Type_ManufactureLTImputation/StaticMethod_CreateOrUpdate.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateOrUpdate (
-  MacroPlan macroPlan,
+  GlobalOTDSOP parent,
   String orgCode,
   String productId,
   String desc
@@ -10,9 +10,9 @@
   TextBody:
   [*
     // yypsybs Aug-25-2023 (created)
-    value := select( macroPlan, ManufactureLTImputation, item, item.OrgCode() = orgCode and item.SkuID() = productId );
+    value := select( parent, ManufactureLTImputation, item, item.OrgCode() = orgCode and item.SkuID() = productId );
     if( isnull( value ) ) {
-        value := macroPlan.ManufactureLTImputation( relnew, OrgCode := orgCode, SkuID := productId, Describe := desc );
+        value := parent.ManufactureLTImputation( relnew, OrgCode := orgCode, SkuID := productId, Describe := desc );
     } else {
         value.Describe( desc );  
     }
diff --git a/_Main/BL/Type_ManufactureLTImputation/StaticMethod_NewStaticMethod.qbl b/_Main/BL/Type_ManufactureLTImputation/StaticMethod_NewStaticMethod.qbl
deleted file mode 100644
index 5884b30..0000000
--- a/_Main/BL/Type_ManufactureLTImputation/StaticMethod_NewStaticMethod.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod NewStaticMethod
-{
-  TextBody:
-  [*
-    // yypsybs Sep-19-2023 (created)
-  *]
-}
diff --git a/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Refresh.qbl b/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Refresh.qbl
index 90c199f..c36ff8f 100644
--- a/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Refresh.qbl
+++ b/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Refresh.qbl
@@ -1,7 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Refresh (
-  ManufactureLTImputations toRefresh
+  ManufactureLTImputations toRefresh,
+  MacroPlan macroPlan
 )
 {
   TextBody:
@@ -9,7 +10,7 @@
     // yypsybs Aug-28-2023 (created)
     traverse( toRefresh, Elements, parent ) {
       traverse( parent, ManufactureLTProcessSection, child ) {
-        ManufactureLTProcessSection::Apply( child );  
+        ManufactureLTProcessSection::Apply( child, macroPlan );  
       }
     }
   *]
diff --git "a/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Transfer\04325.qbl" "b/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Transfer\04325.qbl"
new file mode 100644
index 0000000..7e45171
--- /dev/null
+++ "b/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Transfer\04325.qbl"
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Transfer (
+  const MacroPlan macroPlan,
+  GlobalOTDSOP parent
+)
+{
+  TextBody:
+  [*
+    // yypsybs Oct-11-2023 (created)
+    traverse( macroPlan, Routing.RoutingStep.Operation, item ) {
+         ManufactureLTProcessSection::CreateOrUpdate( item, parent );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Transfer.qbl b/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Transfer.qbl
deleted file mode 100644
index ae70b83..0000000
--- a/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Transfer.qbl
+++ /dev/null
@@ -1,33 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod Transfer (
-  MacroPlan oldMP,
-  MacroPlan newMP
-)
-{
-  Description: '绉讳氦鎺у埗鏉�'
-  TextBody:
-  [*
-    //// yypsybs Aug-25-2023 (created)
-    //if( isnull( oldMP ) ) {
-    //    info( "========transfer ManufactureLTImputations to macroPlan " + [String]newMP.MDSID() + "========" );
-    //} else {
-    //    info( "========transfer ManufactureLTImputations from macroPlan " + [String]oldMP.MDSID() + " to macroPlan " + [String]newMP.MDSID() + "========" );
-    //}
-    //// 娓呯┖鏂扮殑锛岃�佺殑澶嶅埗鍒版柊鐨勶紝娓呯┖鑰佺殑
-    //if( not isnull( oldMP ) and not isnull( newMP ) ) {
-    //    info( "old ManufactureLTImputation size : " + [String]oldMP.ManufactureLTImputation( relsize ) )
-    //    traverse( oldMP, ManufactureLTImputation, parent, true ) {
-    //        traverse( parent, ManufactureLTProcessSection, child, true ) {
-    //              ManufactureLTProcessSection::CreateOrUpdate( newMP, parent.OrgCode(), parent.SkuID(), parent.Describe(), 
-    //                                                            child.ProcessSection(), child.Sequence(), child.Line(), child.SystemLT(),
-    //                                                           child.Edited(), child.EditLT(), child.Describe() );
-    //        }
-    //    }  
-    //}
-    //// 澶勭悊鏂扮殑鐨刼peration
-    //traverse( newMP, Routing.RoutingStep.Operation, item ) {
-    //     ManufactureLTProcessSection::CreateOrUpdate( item );
-    //}
-  *]
-}
diff --git "a/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Apply\043202.qbl" "b/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Apply\043202.qbl"
index 502281f..278b5f3 100644
--- "a/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Apply\043202.qbl"
+++ "b/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Apply\043202.qbl"
@@ -1,14 +1,15 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Apply (
-  ManufactureLTProcessSection toApply
+  ManufactureLTProcessSection toApply,
+  MacroPlan macroPlan
 )
 {
   TextBody:
   [*
     // yypsybs Aug-28-2023 (created)
     parent := toApply.ManufactureLTImputation();
-    toUpdate := select( toApply, ManufactureLTImputation.MacroPlan.Routing.RoutingStep.Operation, op,
+    toUpdate := select( macroPlan, Routing.RoutingStep.Operation, op,
                         op.RoutingID() = parent.OrgCode() + "_" + parent.SkuID() 
                         and op.RoutingStepName() = toApply.ProcessSection() + "_" + toApply.Sequence()
                         and op.Name() = ifexpr( toApply.Line() <> "", 
@@ -18,7 +19,7 @@
       toUpdate.UserLeadTime( Duration::Days( toApply.EditLT() ) );
       toApply.SystemLT( toApply.EditLT() );
     } else {
-      info( "operation to update not found" );  
+      debuginfo(  "operation to update not found" );  
     }
   *]
 }
diff --git a/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Apply.qbl b/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Apply.qbl
index 2b410b4..7f69c3f 100644
--- a/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Apply.qbl
+++ b/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Apply.qbl
@@ -1,14 +1,15 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Apply (
-  ManufactureLTProcessSections toApply
+  ManufactureLTProcessSections toApply,
+  MacroPlan macroPlan
 )
 {
   TextBody:
   [*
     // yypsybs Aug-28-2023 (created)
     traverse( toApply, Elements, child ) {
-      ManufactureLTProcessSection::Apply( child );
+      ManufactureLTProcessSection::Apply( child, macroPlan );
     }
   *]
 }
diff --git a/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate.qbl
index fe55479..3739dd6 100644
--- a/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate.qbl
+++ b/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate.qbl
@@ -1,7 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateOrUpdate (
-  Operation op
+  const Operation op,
+  GlobalOTDSOP parent
 ) as ManufactureLTProcessSection
 {
   TextBody:
@@ -31,9 +32,11 @@
     }
     child := null( ManufactureLTProcessSection );
     //if( orgCode <> "" and productId <> "" and processStep <> "" and sequence <> "" ) {
-    //    parent := ManufactureLTImputation::CreateOrUpdate( op.RoutingStep().Routing().MacroPlan(), orgCode, productId, "" );
-    //    info( "DaysAsReal : " + [String]op.UserLeadTime().DaysAsReal() );
-    //    child := ManufactureLTProcessSection::CreateOrUpdate( parent, processStep, false, sequence, line, op.UserLeadTime().DaysAsReal(), 0.0, "" );
+      ltParent := ManufactureLTImputation::CreateOrUpdate( parent, orgCode, productId, "" );
+      info( "DaysAsReal : " + [String]op.UserLeadTime().DaysAsReal() );
+      child := ManufactureLTProcessSection::CreateOrUpdate( ltParent, processStep, false, sequence, line, op.UserLeadTime().DaysAsReal(), 0.0, "" );
+    //} else {
+    //  info( "skip operation" );
     //}
     return child;
   *]
diff --git a/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate0.qbl b/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate0.qbl
index b18ed17..6ec4b16 100644
--- a/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate0.qbl
+++ b/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate0.qbl
@@ -1,6 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateOrUpdate (
+  GlobalOTDSOP parent,
   MacroPlan macroPlan,
   String orgCode,
   String productId,
@@ -17,15 +18,15 @@
   TextBody:
   [*
     // yypsybs Aug-25-2023 (created)
-    parent := select( macroPlan, ManufactureLTImputation, item, item.OrgCode() = orgCode and item.SkuID() = productId );
-    if( isnull( parent ) ) {
-        parent := macroPlan.ManufactureLTImputation( relnew, OrgCode := orgCode, SkuID := productId, Describe := parentDesc );
+    ltParent := select( parent, ManufactureLTImputation, item, item.OrgCode() = orgCode and item.SkuID() = productId );
+    if( isnull( ltParent ) ) {
+        ltParent := parent.ManufactureLTImputation( relnew, OrgCode := orgCode, SkuID := productId, Describe := parentDesc );
     } else {
-        parent.Describe( parentDesc );  
+        ltParent.Describe( parentDesc );  
     }
-    child := select( parent, ManufactureLTProcessSection, item, item.ProcessSection() = processSection and item.Sequence() = seq and item.Line() = line );
+    child := select( ltParent, ManufactureLTProcessSection, item, item.ProcessSection() = processSection and item.Sequence() = seq and item.Line() = line );
     if( isnull( child ) ) {
-        child := parent.ManufactureLTProcessSection( relnew, 
+        child := ltParent.ManufactureLTProcessSection( relnew, 
                                                      ProcessSection := processSection, Sequence := seq, Line := line, SystemLT := systemLt, 
                                                      Edited := edited, EditLT := editLt, Describe := childDesc );
     } else {
diff --git "a/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Refresh\0431.qbl" "b/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Refresh\0431.qbl"
deleted file mode 100644
index 069eb30..0000000
--- "a/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Refresh\0431.qbl"
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod Refresh (
-  ManufactureLTProcessSection toRefresh
-)
-{
-  TextBody:
-  [*
-    // yypsybs Aug-28-2023 (created)
-    parent := toRefresh.ManufactureLTImputation();
-    toUpdate := select( toRefresh, ManufactureLTImputation.MacroPlan.Routing.RoutingStep.Operation, op,
-                        op.RoutingID() = parent.OrgCode() + "_" + parent.SkuID() 
-                        and op.RoutingStepName() = toRefresh.ProcessSection() + "_" + toRefresh.Sequence()
-                        and op.Name() = ifexpr( toRefresh.Line() <> "", 
-                                                parent.OrgCode() + "_" + toRefresh.ProcessSection() + "_" + toRefresh.Line(),
-                                                parent.OrgCode() + "_" + toRefresh.ProcessSection() ) );
-    if( not isnull( toUpdate ) ) {
-      toRefresh.SystemLT( toUpdate.UserLeadTime().DaysAsReal() );
-    } else {
-      info( "operation to refresh not found" );  
-    }
-  *]
-}
diff --git a/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Refresh.qbl b/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Refresh.qbl
index b39c91c..94cf504 100644
--- a/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Refresh.qbl
+++ b/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_Refresh.qbl
@@ -1,14 +1,15 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Refresh (
-  ManufactureLTProcessSections toApply
+  ManufactureLTProcessSections toDeals,
+  MacroPlan macroPlan
 )
 {
   TextBody:
   [*
-    // yypsybs Aug-28-2023 (created)
-    traverse( toApply, Elements, child ) {
-      ManufactureLTProcessSection::Refresh( child );
+    // yypsybs Oct-13-2023 (created)
+    traverse( toDeals, Elements, one ) {
+      ManufactureLTProcessSection::Apply( one, macroPlan );  
     }
   *]
 }
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_BusinessType.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_BusinessType.qbl
deleted file mode 100644
index ebf044f..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_BusinessType.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute BusinessType
-{
-  #keys: '3[414384.0.803580072][414384.0.803580071][414384.0.803580073]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityEquivalent.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityEquivalent.qbl
deleted file mode 100644
index 79ee8e4..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityEquivalent.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityEquivalent
-{
-  #keys: '3[414384.0.867241217][414384.0.867241216][414384.0.867241218]'
-  Description: '浜ц兘褰撻噺'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth1.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth1.qbl
deleted file mode 100644
index 5aa064a..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth1.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth1
-{
-  #keys: '3[414384.0.864360392][414384.0.864360391][414384.0.864360393]'
-  Description: '1鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth10.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth10.qbl
deleted file mode 100644
index 2d0823b..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth10.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth10
-{
-  #keys: '3[414384.0.864360398][414384.0.864360397][414384.0.864360399]'
-  Description: '10鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth11.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth11.qbl
deleted file mode 100644
index 3e4e17f..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth11.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth11
-{
-  #keys: '3[414384.0.864360395][414384.0.864360394][414384.0.864360396]'
-  Description: '11鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth12.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth12.qbl
deleted file mode 100644
index a494071..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth12.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth12
-{
-  #keys: '3[414384.0.864360386][414384.0.864360385][414384.0.864360387]'
-  Description: '12鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth2.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth2.qbl
deleted file mode 100644
index 96e4277..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth2.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth2
-{
-  #keys: '3[414384.0.864360371][414384.0.864360370][414384.0.864360372]'
-  Description: '2鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth3.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth3.qbl
deleted file mode 100644
index c82ee6a..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth3.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth3
-{
-  #keys: '3[414384.0.864360374][414384.0.864360373][414384.0.864360375]'
-  Description: '3鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth4.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth4.qbl
deleted file mode 100644
index 14a2e6c..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth4.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth4
-{
-  #keys: '3[414384.0.864360377][414384.0.864360376][414384.0.864360378]'
-  Description: '4鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth5.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth5.qbl
deleted file mode 100644
index e889eda..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth5.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth5
-{
-  #keys: '3[414384.0.864360380][414384.0.864360379][414384.0.864360381]'
-  Description: '5鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth6.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth6.qbl
deleted file mode 100644
index 227edb2..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth6.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth6
-{
-  #keys: '3[414384.0.864360401][414384.0.864360400][414384.0.864360402]'
-  Description: '6鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth7.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth7.qbl
deleted file mode 100644
index 007d324..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth7.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth7
-{
-  #keys: '3[414384.0.864360383][414384.0.864360382][414384.0.864360384]'
-  Description: '7鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth8.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth8.qbl
deleted file mode 100644
index 0bea26a..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth8.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth8
-{
-  #keys: '3[414384.0.864360368][414384.0.864360367][414384.0.864360369]'
-  Description: '8鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth9.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth9.qbl
deleted file mode 100644
index ce4956a..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth9.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInMonth9
-{
-  #keys: '3[414384.0.864360389][414384.0.864360388][414384.0.864360390]'
-  Description: '9鏈堜骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSTotal.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSTotal.qbl
deleted file mode 100644
index c7b3fc7..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSTotal.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSTotal
-{
-  #keys: '3[414384.0.867241226][414384.0.867241225][414384.0.867241227]'
-  Description: '骞翠骇鑳斤紙PCS锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth1.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth1.qbl
deleted file mode 100644
index f2ed586..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth1.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth1
-{
-  #keys: '3[414384.0.864360406][414384.0.864360405][414384.0.864360407]'
-  Description: '1鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth10.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth10.qbl
deleted file mode 100644
index 9e791d0..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth10.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth10
-{
-  #keys: '3[414384.0.864360430][414384.0.864360429][414384.0.864360431]'
-  Description: '10鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth11.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth11.qbl
deleted file mode 100644
index 283eb69..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth11.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth11
-{
-  #keys: '3[414384.0.864360427][414384.0.864360426][414384.0.864360428]'
-  Description: '11鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth12.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth12.qbl
deleted file mode 100644
index b91d698..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth12.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth12
-{
-  #keys: '3[414384.0.864360439][414384.0.864360438][414384.0.864360440]'
-  Description: '12鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth2.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth2.qbl
deleted file mode 100644
index b73c187..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth2.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth2
-{
-  #keys: '3[414384.0.864360409][414384.0.864360408][414384.0.864360410]'
-  Description: '2鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth3.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth3.qbl
deleted file mode 100644
index 7d60a74..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth3.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth3
-{
-  #keys: '3[414384.0.864360421][414384.0.864360420][414384.0.864360422]'
-  Description: '3鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth4.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth4.qbl
deleted file mode 100644
index 6c46554..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth4.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth4
-{
-  #keys: '3[414384.0.864360415][414384.0.864360414][414384.0.864360416]'
-  Description: '4鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth5.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth5.qbl
deleted file mode 100644
index 575b883..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth5.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth5
-{
-  #keys: '3[414384.0.864360412][414384.0.864360411][414384.0.864360413]'
-  Description: '5鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth6.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth6.qbl
deleted file mode 100644
index 5af9a7b..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth6.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth6
-{
-  #keys: '3[414384.0.864360424][414384.0.864360423][414384.0.864360425]'
-  Description: '6鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth7.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth7.qbl
deleted file mode 100644
index dca7992..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth7.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth7
-{
-  #keys: '3[414384.0.864360433][414384.0.864360432][414384.0.864360434]'
-  Description: '7鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth8.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth8.qbl
deleted file mode 100644
index 3daef81..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth8.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth8
-{
-  #keys: '3[414384.0.864360436][414384.0.864360435][414384.0.864360437]'
-  Description: '8鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth9.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth9.qbl
deleted file mode 100644
index b739807..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth9.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInMonth9
-{
-  #keys: '3[414384.0.864360418][414384.0.864360417][414384.0.864360419]'
-  Description: '9鏈堜骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetTotal.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetTotal.qbl
deleted file mode 100644
index 1ec9da6..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetTotal.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetTotal
-{
-  #keys: '3[414384.0.867241232][414384.0.867241231][414384.0.867241233]'
-  Description: '骞翠骇鑳斤紙Sheet锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_Deleted.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_Deleted.qbl
deleted file mode 100644
index 38d2205..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_Deleted.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Deleted
-{
-  #keys: '3[414384.0.867241223][414384.0.867241222][414384.0.867241224]'
-  Description: '宸插垹闄�'
-  ValueType: Boolean
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_DisplayTechnology.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_DisplayTechnology.qbl
deleted file mode 100644
index cfa5f36..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_DisplayTechnology.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DisplayTechnology
-{
-  #keys: '3[414384.0.867241208][414384.0.867241207][414384.0.867241209]'
-  Description: '鏄剧ず鎶�鏈垎绫�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_LineAndSpecification.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_LineAndSpecification.qbl
deleted file mode 100644
index e4a3e37..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_LineAndSpecification.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute LineAndSpecification
-{
-  #keys: '3[414384.0.803580092][414384.0.803580091][414384.0.803580093]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfCut.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfCut.qbl
deleted file mode 100644
index aac3e19..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfCut.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute NumberOfCut
-{
-  #keys: '3[414384.0.867241229][414384.0.867241228][414384.0.867241230]'
-  Description: '鍒囧壊鏁�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfMask.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfMask.qbl
deleted file mode 100644
index 0a37a77..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfMask.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute NumberOfMask
-{
-  #keys: '3[414384.0.867241241][414384.0.867241240][414384.0.867241242]'
-  Description: 'mask鏁�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_OrgCode.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_OrgCode.qbl
deleted file mode 100644
index 3e69afb..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_OrgCode.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrgCode
-{
-  #keys: '3[414384.0.867241214][414384.0.867241213][414384.0.867241215]'
-  Description: '涓氬姟閮ㄩ棬'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfArray.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfArray.qbl
deleted file mode 100644
index 5f3564c..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfArray.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute PlaceOfProductionOfArray
-{
-  #keys: '3[414384.0.864360358][414384.0.864360357][414384.0.864360359]'
-  Description: '闈㈡澘鍩哄湴'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfEvaporation.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfEvaporation.qbl
deleted file mode 100644
index 78ade77..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfEvaporation.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute PlaceOfProductionOfEvaporation
-{
-  #keys: '3[414384.0.867241211][414384.0.867241210][414384.0.867241212]'
-  Description: '钂搁晙浜у湴'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_ProductCode.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_ProductCode.qbl
deleted file mode 100644
index 7ef3454..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_ProductCode.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductCode
-{
-  #keys: '3[414384.0.803580103][414384.0.803580102][414384.0.803580104]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_Resolution.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_Resolution.qbl
deleted file mode 100644
index f503398..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_Resolution.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Resolution
-{
-  #keys: '3[414384.0.867241235][414384.0.867241234][414384.0.867241236]'
-  Description: '鍒嗚鲸鐜�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth1.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth1.qbl
deleted file mode 100644
index d061259..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth1.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth1
-{
-  #keys: '3[414384.0.864360470][414384.0.864360469][414384.0.864360471]'
-  Description: '1鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth10.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth10.qbl
deleted file mode 100644
index 824026b..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth10.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth10
-{
-  #keys: '3[414384.0.864360449][414384.0.864360448][414384.0.864360450]'
-  Description: '10鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth11.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth11.qbl
deleted file mode 100644
index 896ab80..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth11.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth11
-{
-  #keys: '3[414384.0.864360443][414384.0.864360442][414384.0.864360444]'
-  Description: '11鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth12.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth12.qbl
deleted file mode 100644
index e6fb2ea..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth12.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth12
-{
-  #keys: '3[414384.0.864360455][414384.0.864360454][414384.0.864360456]'
-  Description: '12鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth2.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth2.qbl
deleted file mode 100644
index 7f2e07b..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth2.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth2
-{
-  #keys: '3[414384.0.864360461][414384.0.864360460][414384.0.864360462]'
-  Description: '2鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth3.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth3.qbl
deleted file mode 100644
index cafbdf7..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth3.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth3
-{
-  #keys: '3[414384.0.864360467][414384.0.864360466][414384.0.864360468]'
-  Description: '3鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth4.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth4.qbl
deleted file mode 100644
index d710f68..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth4.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth4
-{
-  #keys: '3[414384.0.864360464][414384.0.864360463][414384.0.864360465]'
-  Description: '4鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth5.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth5.qbl
deleted file mode 100644
index 59d0ed8..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth5.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth5
-{
-  #keys: '3[414384.0.864360476][414384.0.864360475][414384.0.864360477]'
-  Description: '5鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth6.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth6.qbl
deleted file mode 100644
index bb36165..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth6.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth6
-{
-  #keys: '3[414384.0.864360458][414384.0.864360457][414384.0.864360459]'
-  Description: '6鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth7.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth7.qbl
deleted file mode 100644
index 68f79e6..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth7.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth7
-{
-  #keys: '3[414384.0.864360473][414384.0.864360472][414384.0.864360474]'
-  Description: '7鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth8.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth8.qbl
deleted file mode 100644
index 212ce32..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth8.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth8
-{
-  #keys: '3[414384.0.864360446][414384.0.864360445][414384.0.864360447]'
-  Description: '8鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth9.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth9.qbl
deleted file mode 100644
index e014c2a..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth9.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountInMonth9
-{
-  #keys: '3[414384.0.864360452][414384.0.864360451][414384.0.864360453]'
-  Description: '9鏈堥攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountTotal.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountTotal.qbl
deleted file mode 100644
index db943a7..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountTotal.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SaleAmountTotal
-{
-  #keys: '3[414384.0.867241220][414384.0.867241219][414384.0.867241221]'
-  Description: '骞撮攢鍞锛堜竾锛�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_ShippingForm.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_ShippingForm.qbl
deleted file mode 100644
index 8356f90..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_ShippingForm.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ShippingForm
-{
-  #keys: '3[414384.0.867241244][414384.0.867241243][414384.0.867241245]'
-  Description: '鍑鸿揣褰㈡��'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_YearNo.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_YearNo.qbl
deleted file mode 100644
index 3816a37..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_YearNo.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute YearNo
-{
-  #keys: '3[414384.0.874271421][414384.0.874271420][414384.0.874271422]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_CapacityEquivalent.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_CapacityEquivalent.qbl
deleted file mode 100644
index c5be8e2..0000000
--- a/_Main/BL/Type_MappingSaleBudge/DefaultValue_CapacityEquivalent.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: CapacityEquivalent
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_DisplayTechnology.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_DisplayTechnology.qbl
deleted file mode 100644
index 81ea97e..0000000
--- a/_Main/BL/Type_MappingSaleBudge/DefaultValue_DisplayTechnology.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: DisplayTechnology
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfCut.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfCut.qbl
deleted file mode 100644
index c512ccf..0000000
--- a/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfCut.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: NumberOfCut
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfMask.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfMask.qbl
deleted file mode 100644
index 27114c0..0000000
--- a/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfMask.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: NumberOfMask
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_OrgCode.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_OrgCode.qbl
deleted file mode 100644
index e95264f..0000000
--- a/_Main/BL/Type_MappingSaleBudge/DefaultValue_OrgCode.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: OrgCode
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_Resolution.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_Resolution.qbl
deleted file mode 100644
index e505ebf..0000000
--- a/_Main/BL/Type_MappingSaleBudge/DefaultValue_Resolution.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: Resolution
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_ShippingForm.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_ShippingForm.qbl
deleted file mode 100644
index bf077c5..0000000
--- a/_Main/BL/Type_MappingSaleBudge/DefaultValue_ShippingForm.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: ShippingForm
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInPCSInYear.qbl b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInPCSInYear.qbl
deleted file mode 100644
index d3faf58..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInPCSInYear.qbl
+++ /dev/null
@@ -1,15 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method GetCapacityInPCSInYear () as Real
-{
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := 0.0;
-    for( i := 1; i <= 12; i := i + 1 ) {
-      field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInPCSInMonth" + [String]i );
-      result := result + field.GetReal( this );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInHalfYear.qbl b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInHalfYear.qbl
deleted file mode 100644
index 7ddf422..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInHalfYear.qbl
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method GetCapacityInSheetInHalfYear (
-  Number halfNo
-) as Real
-{
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := 0.0;
-    fromMonth := 1 + ( halfNo - 1 ) * 6;
-    toMonth := 6 + ( halfNo - 1 ) * 6;
-    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
-      field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]i );
-      result := result + field.GetReal( this );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInSeason.qbl b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInSeason.qbl
deleted file mode 100644
index 75d8ad6..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInSeason.qbl
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method GetCapacityInSheetInSeason (
-  Number seasonNo
-) as Real
-{
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := 0.0;
-    fromMonth := 1 + ( seasonNo - 1 ) * 3;
-    toMonth := 3 + ( seasonNo - 1 ) * 3;
-    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
-      field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]i );
-      result := result + field.GetReal( this );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInYear.qbl b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInYear.qbl
deleted file mode 100644
index ddb2a10..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInYear.qbl
+++ /dev/null
@@ -1,15 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method GetCapacityInSheetInYear () as Real
-{
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := 0.0;
-    for( i := 1; i <= 12; i := i + 1 ) {
-      field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]i );
-      result := result + field.GetReal( this );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Method_GetSaleAmountInYear.qbl b/_Main/BL/Type_MappingSaleBudge/Method_GetSaleAmountInYear.qbl
deleted file mode 100644
index 93bf2ba..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Method_GetSaleAmountInYear.qbl
+++ /dev/null
@@ -1,15 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method GetSaleAmountInYear () as Real
-{
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := 0.0;
-    for( i := 1; i <= 12; i := i + 1 ) {
-      field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "SaleAmountInMonth" + [String]i );
-      result := result + field.GetReal( this );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_ExpectedHeaders.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_ExpectedHeaders.qbl
deleted file mode 100644
index d7275ba..0000000
--- a/_Main/BL/Type_MappingSaleBudge/StaticMethod_ExpectedHeaders.qbl
+++ /dev/null
@@ -1,64 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod ExpectedHeaders () as owning Strings
-{
-  TextBody:
-  [*
-    // yypsybs Jun-30-2023 (created)
-    value := construct( structured[String] );
-    value.Add( "鍒犻櫎鏍囪" );
-    value.Add( "骞翠唤" );
-    value.Add( "涓氬姟閮ㄩ棬" );
-    value.Add( "鏄剧ず鎶�鏈垎绫�" );
-    value.Add( "涓氬姟鍒嗙被" );
-    value.Add( "浜у搧绾�/浜у搧瑙勬牸" );
-    value.Add( "浜у搧鏂欏彿" );
-    value.Add( "Array浜у湴" );
-    value.Add( "钂搁晙浜у湴" );
-    value.Add( "鍒嗚鲸鐜�" );
-    value.Add( "鍑鸿揣褰㈡��" );
-    value.Add( "鍒囧壊鏁�" );
-    value.Add( "浜ц兘褰撻噺" );
-    value.Add( "mask鏁�" );
-    value.Add( "1鏈堜骇鑳�(PCS)" );
-    value.Add( "2鏈堜骇鑳�(PCS)" );
-    value.Add( "3鏈堜骇鑳�(PCS)" );
-    value.Add( "4鏈堜骇鑳�(PCS)" );
-    value.Add( "5鏈堜骇鑳�(PCS)" );
-    value.Add( "6鏈堜骇鑳�(PCS)" );
-    value.Add( "7鏈堜骇鑳�(PCS)" );
-    value.Add( "8鏈堜骇鑳�(PCS)" );
-    value.Add( "9鏈堜骇鑳�(PCS)" );
-    value.Add( "10鏈堜骇鑳�(PCS)" );
-    value.Add( "11鏈堜骇鑳�(PCS)" );
-    value.Add( "12鏈堜骇鑳�(PCS)" );
-    value.Add( "骞翠骇鑳�(PCS)" );
-    value.Add( "1鏈堜骇鑳�(瀹炴暟澶у紶)" );
-    value.Add( "2鏈堜骇鑳�(瀹炴暟澶у紶)" );
-    value.Add( "3鏈堜骇鑳�(瀹炴暟澶у紶)" );
-    value.Add( "4鏈堜骇鑳�(瀹炴暟澶у紶)" );
-    value.Add( "5鏈堜骇鑳�(瀹炴暟澶у紶)" );
-    value.Add( "6鏈堜骇鑳�(瀹炴暟澶у紶)" );
-    value.Add( "7鏈堜骇鑳�(瀹炴暟澶у紶)" );
-    value.Add( "8鏈堜骇鑳�(瀹炴暟澶у紶)" );
-    value.Add( "9鏈堜骇鑳�(瀹炴暟澶у紶)" );
-    value.Add( "10鏈堜骇鑳�(瀹炴暟澶у紶)" );
-    value.Add( "11鏈堜骇鑳�(瀹炴暟澶у紶)" );
-    value.Add( "12鏈堜骇鑳�(瀹炴暟澶у紶)" );
-    value.Add( "骞翠骇鑳�(瀹炴暟澶у紶)" );
-    value.Add( "1鏈堥攢鍞(W)" );
-    value.Add( "2鏈堥攢鍞(W)" );
-    value.Add( "3鏈堥攢鍞(W)" );
-    value.Add( "4鏈堥攢鍞(W)" );
-    value.Add( "5鏈堥攢鍞(W)" );
-    value.Add( "6鏈堥攢鍞(W)" );
-    value.Add( "7鏈堥攢鍞(W)" );
-    value.Add( "8鏈堥攢鍞(W)" );
-    value.Add( "9鏈堥攢鍞(W)" );
-    value.Add( "10鏈堥攢鍞(W)" );
-    value.Add( "11鏈堥攢鍞(W)" );
-    value.Add( "12鏈堥攢鍞(W)" );
-    value.Add( "骞撮攢鍞(W)" );
-    return &value;
-  *]
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_Export.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_Export.qbl
deleted file mode 100644
index c75f124..0000000
--- a/_Main/BL/Type_MappingSaleBudge/StaticMethod_Export.qbl
+++ /dev/null
@@ -1,73 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod Export (
-  MPSync parent
-) as String
-{
-  TextBody:
-  [*
-    // yypsybs Jul-1-2023 (created)
-    xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?>
-    <table>
-      <name>MappingCapacityAndSaleBudge</name>
-    ';
-    //---------------------------------------------------------------------------------------------
-    exportFields := MappingCapacityAndSaleBudge::ExportFields();
-    exportHeaders := MappingCapacityAndSaleBudge::ExpectedHeaders();
-    if( exportFields.Size() <> exportHeaders.Size() ) {
-      error( "fields and headers not match" );  
-    }
-    info( "export start" );
-    for( i := 0; i < exportFields.Size() ; i++ ) {
-      header := exportHeaders.Element( i );
-      fieldName := exportFields.Element( i );
-      info( "header : " + header )
-      info( "fieldName : " + fieldName )
-      columnStr := "<column><name>" + header + "</name><type>String</type>";
-      traverse( parent, MappingCapacityAndSaleBudge, oldRecord ) {
-        field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", fieldName);
-        if( not isnull( field ) ) {
-          fieldValue := "";
-          if( fieldValue = "" ) {
-            fieldValue := guard( field.GetString( oldRecord ), "" );
-          }
-          if( fieldValue = "" ) {
-            fieldValue := guard( [String]field.GetNumber( oldRecord ), "" );
-          }
-          if( fieldValue = "" ) {
-            fieldValue := guard( [String]field.GetReal( oldRecord ), "" );
-          }
-          if( fieldValue = "" ) {
-            fieldValue := guard( ifexpr( field.GetBoolean( oldRecord ), "Y", "N" ), "" );
-          }
-          if( fieldValue = "" ) {
-            fileDateValue := guard( field.GetDate( oldRecord ), Date::MinDate() );
-            if( fileDateValue <> Date::MinDate() ) {
-              conv := DateTimeToString::StandardConverter();
-              conv.SetCustomConversion();
-              conv.CustomFormatString( 'yyyyMMdd' );
-              fieldValue := conv.Convert( fileDateValue.DateTime() );
-            }
-          }
-          cellStr := '<cell value="' + fieldValue + '"/>';
-          
-          columnStr := columnStr + cellStr;
-        } else {
-          error( "no field " + fieldName + " in type MappingCapacityAndSaleBudge");
-        }
-      }
-      columnStr := columnStr + "</column>";
-      xmlTemplate := xmlTemplate + columnStr;
-    }
-    //---------------------------------------------------------------------------------------------
-    xmlTemplate := xmlTemplate + "</table>";
-    //info( xmlTemplate );
-    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTemplate ) );
-    XLS::SaveTable( tableHandle, OS::TempPath() + "MappingCapacityAndSaleBudge.xlsx" );
-    file := OSFile::Construct();
-    file.Open( OS::TempPath() + "MappingCapacityAndSaleBudge.xlsx", "Read", true );
-    data := file.ReadBinary()
-    info( "export end" );
-    return data.AsBase64EncodedString();
-  *]
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_ExportFields.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_ExportFields.qbl
deleted file mode 100644
index 58b6447..0000000
--- a/_Main/BL/Type_MappingSaleBudge/StaticMethod_ExportFields.qbl
+++ /dev/null
@@ -1,64 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod ExportFields () as owning Strings
-{
-  TextBody:
-  [*
-    // yypsybs Jun-30-2023 (created)
-    value := construct( structured[String] );
-    value.Add( "Deleted" );
-    value.Add( "YearNo" );
-    value.Add( "OrgCode" );
-    value.Add( "DisplayTechnology" );
-    value.Add( "BusinessType" );
-    value.Add( "LineAndSpecification" );
-    value.Add( "ProductCode" );
-    value.Add( "PlaceOfProductionOfArray" );
-    value.Add( "PlaceOfProductionOfEvaporation" );
-    value.Add( "Resolution" );
-    value.Add( "ShippingForm" );
-    value.Add( "NumberOfCut" );
-    value.Add( "CapacityEquivalent" );
-    value.Add( "NumberOfMask" );
-    value.Add( "CapacityInPCSInMonth1" );
-    value.Add( "CapacityInPCSInMonth2" );
-    value.Add( "CapacityInPCSInMonth3" );
-    value.Add( "CapacityInPCSInMonth4" );
-    value.Add( "CapacityInPCSInMonth5" );
-    value.Add( "CapacityInPCSInMonth6" );
-    value.Add( "CapacityInPCSInMonth7" );
-    value.Add( "CapacityInPCSInMonth8" );
-    value.Add( "CapacityInPCSInMonth9" );
-    value.Add( "CapacityInPCSInMonth10" );
-    value.Add( "CapacityInPCSInMonth11" );
-    value.Add( "CapacityInPCSInMonth12" );
-    value.Add( "CapacityInPCSTotal" );
-    value.Add( "CapacityInSheetInMonth1" );
-    value.Add( "CapacityInSheetInMonth2" );
-    value.Add( "CapacityInSheetInMonth3" );
-    value.Add( "CapacityInSheetInMonth4" );
-    value.Add( "CapacityInSheetInMonth5" );
-    value.Add( "CapacityInSheetInMonth6" );
-    value.Add( "CapacityInSheetInMonth7" );
-    value.Add( "CapacityInSheetInMonth8" );
-    value.Add( "CapacityInSheetInMonth9" );
-    value.Add( "CapacityInSheetInMonth10" );
-    value.Add( "CapacityInSheetInMonth11" );
-    value.Add( "CapacityInSheetInMonth12" );
-    value.Add( "CapacityInSheetTotal" );
-    value.Add( "SaleAmountInMonth1" );
-    value.Add( "SaleAmountInMonth2" );
-    value.Add( "SaleAmountInMonth3" );
-    value.Add( "SaleAmountInMonth5" );
-    value.Add( "SaleAmountInMonth4" );
-    value.Add( "SaleAmountInMonth6" );
-    value.Add( "SaleAmountInMonth7" );
-    value.Add( "SaleAmountInMonth8" );
-    value.Add( "SaleAmountInMonth9" );
-    value.Add( "SaleAmountInMonth10" );
-    value.Add( "SaleAmountInMonth11" );
-    value.Add( "SaleAmountInMonth12" );
-    value.Add( "SaleAmountTotal" );
-    return &value;
-  *]
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByMonth.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByMonth.qbl
deleted file mode 100644
index d972699..0000000
--- a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByMonth.qbl
+++ /dev/null
@@ -1,22 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSaleByMonth (
-  Strings productNo,
-  MPSync parent,
-  Number yearNo,
-  Number monthNo
-) as Real
-{
-  Description: '閿�鍞锛圵锛�'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "SaleAmountInMonth" + [String]monthNo );
-    value := sum( parent, 
-                  MappingCapacityAndSaleBudge, 
-                  item, 
-                  item.YearNo() = yearNo and productNo.Find( item.ProductCode() ) > -1,
-                  field.GetReal( item ) );
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByYear.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByYear.qbl
deleted file mode 100644
index 0d32878..0000000
--- a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByYear.qbl
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSaleByYear (
-  Strings productNo,
-  MPSync parent,
-  Number yearNo
-) as Real
-{
-  Description: '閿�鍞锛圵锛�'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := sum( parent, 
-                   MappingCapacityAndSaleBudge, 
-                   item, 
-                   item.YearNo() = yearNo and productNo.Find( item.ProductCode() ) > -1,
-                   item.GetSaleAmountInYear() );
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByHalfYear.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByHalfYear.qbl
deleted file mode 100644
index b3c236b..0000000
--- a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByHalfYear.qbl
+++ /dev/null
@@ -1,21 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSheetByHalfYear (
-  Strings productNo,
-  MPSync parent,
-  Number yearNo,
-  Number halfNo
-) as Real
-{
-  Description: '浜ц兘 - 瀹炴暟澶у紶'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := sum( parent, 
-                   MappingCapacityAndSaleBudge, 
-                   item, 
-                   item.YearNo() = yearNo and productNo.Find( item.ProductCode() ) > -1,
-                   item.GetCapacityInSheetInHalfYear( halfNo ) );
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByMonth.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByMonth.qbl
deleted file mode 100644
index 8e0721d..0000000
--- a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByMonth.qbl
+++ /dev/null
@@ -1,22 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSheetByMonth (
-  Strings productNo,
-  MPSync parent,
-  Number yearNo,
-  Number monthNo
-) as Real
-{
-  Description: '浜ц兘-瀹炴暟澶у紶'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]monthNo );
-    value := sum( parent, 
-                  MappingCapacityAndSaleBudge, 
-                  item, 
-                  item.YearNo() = yearNo and productNo.Find( item.ProductCode() ) > -1,
-                  field.GetReal( item ) );
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetBySeason.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetBySeason.qbl
deleted file mode 100644
index db1803a..0000000
--- a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetBySeason.qbl
+++ /dev/null
@@ -1,21 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSheetBySeason (
-  Strings productNo,
-  MPSync parent,
-  Number yearNo,
-  Number seasonNo
-) as Real
-{
-  Description: '浜ц兘 - 瀹炴暟澶у紶'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := sum( parent, 
-                   MappingCapacityAndSaleBudge, 
-                   item, 
-                   item.YearNo() = yearNo and productNo.Find( item.ProductCode() ) > -1,
-                   item.GetCapacityInSheetInSeason( seasonNo ) );
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByYear.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByYear.qbl
deleted file mode 100644
index 21a4a50..0000000
--- a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByYear.qbl
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSheetByYear (
-  Strings productNo,
-  MPSync parent,
-  Number yearNo
-) as Real
-{
-  Description: '浜ц兘 - 瀹炴暟澶у紶'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := sum( parent, 
-                   MappingCapacityAndSaleBudge, 
-                   item, 
-                   item.YearNo() = yearNo and productNo.Find( item.ProductCode() ) > -1,
-                   item.GetCapacityInSheetInYear() );
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/_ROOT_Type_MappingCapacityAndSaleBudge.qbl b/_Main/BL/Type_MappingSaleBudge/_ROOT_Type_MappingCapacityAndSaleBudge.qbl
deleted file mode 100644
index bdacc1f..0000000
--- a/_Main/BL/Type_MappingSaleBudge/_ROOT_Type_MappingCapacityAndSaleBudge.qbl
+++ /dev/null
@@ -1,10 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type MappingCapacityAndSaleBudge
-{
-  #keys: '5[414384.0.803580058][414384.0.803580056][0.0.0][414384.0.803580057][414384.0.803580059]'
-  BaseType: Object
-  Description: '骞村害浜ч攢棰勭畻鏁版嵁'
-  StructuredName: 'MappingCapacityAndSaleBudges'
-}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_CheckThePrecedingColumn.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_CheckThePrecedingColumn.qbl
index 915e044..e35b41e 100644
--- a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_CheckThePrecedingColumn.qbl
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_CheckThePrecedingColumn.qbl
@@ -1,14 +1,14 @@
 Quintiq file version 2.0
 #parent: #root
 Method CheckThePrecedingColumn (
-  GlobalOTDTable globalOTDTable
+  GlobalOTDSOP globalOTDSOP
 )
 {
   TextBody:
   [*
     traverse ( this, MatAttrSettingAndPlanStrategyDataRow, masapsdr ) {
       itemCode := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鐗╂枡缂栫爜" );
-      targetMatAttrSettingAndPlanStrategy := select( globalOTDTable, MatAttrSettingAndPlanStrategy, tempMASAPS, tempMASAPS.MatCode() = itemCode.value() );
+      targetMatAttrSettingAndPlanStrategy := select( globalOTDSOP, MatAttrSettingAndPlanStrategy, tempMASAPS, tempMASAPS.MatCode() = itemCode.value() );
       if ( not isnull( targetMatAttrSettingAndPlanStrategy ) ) {
         businessType                      := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "涓氬姟绫诲瀷" ).value();
         nameOfMaterial                    := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鐗╂枡鍚嶇О" ).value();
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_CreateOrUpdateData.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_CreateOrUpdateData.qbl
index 15d22df..63c3fb3 100644
--- a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_CreateOrUpdateData.qbl
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_CreateOrUpdateData.qbl
@@ -1,14 +1,14 @@
 Quintiq file version 2.0
 #parent: #root
 Method CreateOrUpdateData (
-  GlobalOTDTable globalOTDTable
+  GlobalOTDSOP globalOTDSOP
 )
 {
   TextBody:
   [*
     traverse ( this, MatAttrSettingAndPlanStrategyDataRow, masapsdr ) {
       itemCode := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鐗╂枡缂栫爜" );
-      targetMatAttrSettingAndPlanStrategy := select( globalOTDTable, MatAttrSettingAndPlanStrategy, tempMASAPS, tempMASAPS.MatCode() = itemCode.value() );
+      targetMatAttrSettingAndPlanStrategy := select( globalOTDSOP, MatAttrSettingAndPlanStrategy, tempMASAPS, tempMASAPS.MatCode() = itemCode.value() );
       if ( not isnull( targetMatAttrSettingAndPlanStrategy ) ) {
         minimumNumberOfDaysInStock     := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "搴撳瓨鏈�灏忓ぉ鏁�" ).value();
         maximumNumberOfDaysInInventory := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "搴撳瓨鏈�澶уぉ鏁�" ).value();
@@ -122,24 +122,24 @@
           }
         }
         try {
-          matAttrSettingAndPlanStrategy := globalOTDTable.MatAttrSettingAndPlanStrategy( relnew,
-                                                                                         BusinessType := businessType,
-                                                                                         MatCode := createItemCode,
-                                                                                         MatName := nameOfMaterial,
-                                                                                         MatType := itemClassification,
-                                                                                         MatArrivalLT := [Number]LTTimeDays,
-    //                                                                                     ProductCount := [Number]numberOfFinishedSKUs,
-    //                                                                                     MinProdDeliverLT := [Number]finishedProductDeliveryMinLTDays,
-                                                                                         FlagLongTerm := longAndShortCycleLabels,
-                                                                                         FlagGeneric := genericSpecialLabels,
-    //                                                                                     PlanningStrategyAuto := automaticMaterialPlanningPolicies,
-                                                                                         PlanningStrategyCustom := usersManuallySchedulePolicies,
-                                                                                         MinimumNumberOfDaysInStock := [Number]minimumNumberOfDaysInStock,
-                                                                                         MaximumNumberOfDaysInInventory := [Number]maximumNumberOfDaysInInventory
+          matAttrSettingAndPlanStrategy := globalOTDSOP.MatAttrSettingAndPlanStrategy( relnew,
+                                                                                       BusinessType := businessType,
+                                                                                       MatCode := createItemCode,
+                                                                                       MatName := nameOfMaterial,
+                                                                                       MatType := itemClassification,
+                                                                                       MatArrivalLT := [Number]LTTimeDays,
+    //                                                                                   ProductCount := [Number]numberOfFinishedSKUs,
+    //                                                                                   MinProdDeliverLT := [Number]finishedProductDeliveryMinLTDays,
+                                                                                       FlagLongTerm := longAndShortCycleLabels,
+                                                                                       FlagGeneric := genericSpecialLabels,
+    //                                                                                   PlanningStrategyAuto := automaticMaterialPlanningPolicies,
+                                                                                       PlanningStrategyCustom := usersManuallySchedulePolicies,
+                                                                                       MinimumNumberOfDaysInStock := [Number]minimumNumberOfDaysInStock,
+                                                                                       MaximumNumberOfDaysInInventory := [Number]maximumNumberOfDaysInInventory
                                                                                         );
           matAttrSettingAndPlanStrategy.UpdateBy( QuintiqUser::CurrentUser().Username() );   
           matAttrSettingAndPlanStrategy.UpdateTime( DateTime::ActualTime() );
-          matAttrSettingAndPlanStrategy.SerialNumber( maxselect( globalOTDTable, MatAttrSettingAndPlanStrategy, tempMASAPS, tempMASAPS.SerialNumber() ).SerialNumber() + 1 );                                                                                
+          matAttrSettingAndPlanStrategy.SerialNumber( maxselect( globalOTDSOP, MatAttrSettingAndPlanStrategy, tempMASAPS, tempMASAPS.SerialNumber() ).SerialNumber() + 1 );                                                                                
         } onerror {
           error( "搴撳瓨鏈�灏忓ぉ鏁版垨搴撳瓨鏈�澶уぉ鏁板繀椤讳负鏁存暟锛�", targetMatAttrSettingAndPlanStrategy.MatCode() );
         }
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_SynchronizeData.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_SynchronizeData.qbl
index 624f54f..7c8ffbd 100644
--- a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_SynchronizeData.qbl
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_SynchronizeData.qbl
@@ -6,12 +6,12 @@
   [*
     this.VerifyThatTheItemCodeIsNotDuplicated();
     
-    globalOTDTable := this.MatAttrSettingAndPlanStrategyInputSource().GlobalOTDTable();
+    globalOTDSOP := this.MatAttrSettingAndPlanStrategyInputSource().GlobalOTDSOP();
     
-    this.CheckThePrecedingColumn( globalOTDTable );
+    this.CheckThePrecedingColumn( globalOTDSOP );
     
-    this.CreateOrUpdateData( globalOTDTable );
+    this.CreateOrUpdateData( globalOTDSOP );
     
-    this.VerificationData( globalOTDTable );
+    this.VerificationData( globalOTDSOP );
   *]
 }
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_VerificationData.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_VerificationData.qbl
index d09c337..5660ce5 100644
--- a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_VerificationData.qbl
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_VerificationData.qbl
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
 #parent: #root
 Method VerificationData (
-  GlobalOTDTable globalOTDTable
+  GlobalOTDSOP globalOTDSOP
 )
 {
   TextBody:
   [*
-    info( "绛栫暐涓暟锛�", globalOTDTable.MatAttrSettingAndPlanStrategy( relsize ) );
-    traverse ( globalOTDTable, MatAttrSettingAndPlanStrategy, masaps ) {
+    info( "绛栫暐涓暟锛�", globalOTDSOP.MatAttrSettingAndPlanStrategy( relsize ) );
+    traverse ( globalOTDSOP, MatAttrSettingAndPlanStrategy, masaps ) {
       if ( masaps.PlanningStrategyCustom() <> "瀹夊叏搴撳瓨" and masaps.PlanningStrategyCustom() <> "JIT" and masaps.PlanningStrategyCustom() <> "M/A" and
            masaps.PlanningStrategyCustom() <> "PO鎷夋枡" and masaps.PlanningStrategyCustom() <> "VMI" ) {
         error( "鎵嬪姩璁剧疆绛栫暐閿欒锛�", masaps.MatCode() );     
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_export.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_export.qbl
index 126e66e..e82f437 100644
--- a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_export.qbl
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_export.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Export (
-  GlobalOTDTable parent
+  GlobalOTDSOP parent
 ) as String
 {
   TextBody:
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_saveData.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_saveData.qbl
index 362f5dd..d7457d8 100644
--- a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_saveData.qbl
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_saveData.qbl
@@ -8,7 +8,7 @@
     if( this.MatAttrSettingAndPlanStrategyDataTable( relsize ) > 0 ) {
       traverse( this, MatAttrSettingAndPlanStrategyDataTable, table ) {
         traverse( table, MatAttrSettingAndPlanStrategyDataRow, row ) {
-          MatAttrSettingAndPlanStrategy::Update( this.GlobalOTDTable(), row, this.UserName() );
+          MatAttrSettingAndPlanStrategy::Update( this.GlobalOTDSOP(), row, this.UserName() );
         }  
       }  
     }
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/StaticMethod_upload.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/StaticMethod_upload.qbl
index 16be5bb..eec0641 100644
--- a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/StaticMethod_upload.qbl
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/StaticMethod_upload.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Upload (
-  GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP globalOTDSOP,
   String filePath,
   String base64Str,
   String userName
@@ -9,15 +9,15 @@
 {
   TextBody:
   [*
-    globalOTDTable.MatAttrSettingAndPlanStrategyInputSource( relflush );
+    globalOTDSOP.MatAttrSettingAndPlanStrategyInputSource( relflush );
     
     fileName := filePath.Tokenize( "\" ).Element( filePath.Tokenize( "\" ).Size() - 1 );
     
-    inputSource := globalOTDTable.MatAttrSettingAndPlanStrategyInputSource( relnew,
-                                                                            FileName  := fileName,
-                                                                            Base64Str := base64Str, 
-                                                                            IsXlsx    := fileName.EndsWith( "xlsx" ), 
-                                                                            UserName  := userName );
+    inputSource := globalOTDSOP.MatAttrSettingAndPlanStrategyInputSource( relnew,
+                                                                          FileName  := fileName,
+                                                                          Base64Str := base64Str, 
+                                                                          IsXlsx    := fileName.EndsWith( "xlsx" ), 
+                                                                          UserName  := userName );
     
     return inputSource;
   *]
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_CreateIfNotExist.qbl
index 8e647b2..b318635 100644
--- a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateIfNotExist (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   Number serialNumber,
   String businessType,
   String matCode,
diff --git "a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_DeleteIfExistByMatCode\043526.qbl" "b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_DeleteIfExistByMatCode\043526.qbl"
index 7d84d24..8154540 100644
--- "a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_DeleteIfExistByMatCode\043526.qbl"
+++ "b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_DeleteIfExistByMatCode\043526.qbl"
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod DeleteIfExistByMatCode (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   Strings matCode
 )
 {
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_GetByMatCode.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_GetByMatCode.qbl
new file mode 100644
index 0000000..4b01b8e
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_GetByMatCode.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetByMatCode (
+  const GlobalOTDSOP parent,
+  String matCode
+) as const MatAttrSettingAndPlanStrategy
+{
+  Description: '鑾峰彇鏃犳硶淇敼鐨�'
+  TextBody:
+  [*
+    // yypsybs Oct-17-2023 (created)
+    value := select( parent, MatAttrSettingAndPlanStrategy, item, true, matCode = item.MatCode() );
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_SynchronizeInventoryTargets.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_SynchronizeInventoryTargets.qbl
index 17e144a..b11c677 100644
--- a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_SynchronizeInventoryTargets.qbl
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_SynchronizeInventoryTargets.qbl
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod SynchronizeInventoryTargets (
-  GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP globalOTDSOP,
   MacroPlan macroPlan
 )
 {
   TextBody:
   [*
-    traverse ( globalOTDTable, MatAttrSettingAndPlanStrategy, masaps ) {
+    traverse ( globalOTDSOP, MatAttrSettingAndPlanStrategy, masaps ) {
       hasMaxLevel := masaps.MaximumNumberOfDaysInInventory() <> 0;
       product_MP := select( macroPlan, Product_MP, tempPMP, tempPMP.ID() = masaps.MatCode() );
       if ( not isnull( product_MP ) ) {
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_deleteIfExistByMatCode.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_deleteIfExistByMatCode.qbl
index 4cd01e5..2820401 100644
--- a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_deleteIfExistByMatCode.qbl
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_deleteIfExistByMatCode.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod DeleteIfExistByMatCode (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   String matCode
 )
 {
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_getExistByMatCode.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_getExistByMatCode.qbl
index c0e174e..4a714e6 100644
--- a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_getExistByMatCode.qbl
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_getExistByMatCode.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod GetExistByMatCode (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   String matCode
 ) as MatAttrSettingAndPlanStrategy
 {
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_update.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_update.qbl
index 44ea303..9a8e30e 100644
--- a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_update.qbl
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_update.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Update (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   MatAttrSettingAndPlanStrategyDataRow excelRow,
   String userName
 ) as MatAttrSettingAndPlanStrategy
diff --git a/_Main/BL/Type_PRData/Method_DoCall.qbl b/_Main/BL/Type_PRData/Method_DoCall.qbl
index 3e8d9b5..13f4f7c 100644
--- a/_Main/BL/Type_PRData/Method_DoCall.qbl
+++ b/_Main/BL/Type_PRData/Method_DoCall.qbl
@@ -1,7 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
 Method DoCall (
-  GlobalOTDTable globalData,
+  const GlobalOTDTable globalData,
+  GlobalOTDSOP otdSop,
   String callBy
 ) as PRHistoryData
 {
@@ -9,7 +10,7 @@
   TextBody:
   [*
     // yypsybs Sep-11-2023 (created)
-    result := globalData.PRHistoryData( relnew );
+    result := otdSop.PRHistoryData( relnew );
     
     // 鐓ф惉閮ㄥ垎
     result.AuthorizationStatus( this.AuthorizationStatus() );
diff --git a/_Main/BL/Type_PRData/Method_PrintCall.qbl b/_Main/BL/Type_PRData/Method_PrintCall.qbl
index 180f056..33b1ac8 100644
--- a/_Main/BL/Type_PRData/Method_PrintCall.qbl
+++ b/_Main/BL/Type_PRData/Method_PrintCall.qbl
@@ -1,14 +1,15 @@
 Quintiq file version 2.0
 #parent: #root
 Method PrintCall (
-  GlobalOTDTable globalData,
+  const GlobalOTDTable globalData,
+  GlobalOTDSOP otdSop,
   String callBy
 ) as String
 {
   TextBody:
   [*
     // yypsybs Sep-11-2023 (created)
-    result := globalData.PRHistoryData( relnew );
+    result := otdSop.PRHistoryData( relnew );
     
     // 鐓ф惉閮ㄥ垎
     result.AuthorizationStatus( this.AuthorizationStatus() );
diff --git a/_Main/BL/Type_PRData/StaticMethod_DoCall.qbl b/_Main/BL/Type_PRData/StaticMethod_DoCall.qbl
index 6de8c17..63825e9 100644
--- a/_Main/BL/Type_PRData/StaticMethod_DoCall.qbl
+++ b/_Main/BL/Type_PRData/StaticMethod_DoCall.qbl
@@ -1,7 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod DoCall (
-  GlobalOTDTable globalData,
+  const GlobalOTDTable globalData,
+  GlobalOTDSOP otdSop,
   PRDatas toCalls,
   String callBy
 )
@@ -13,7 +14,7 @@
     nowNo := 1;
     traverse( toCalls, Elements, toCall, toCall.PRReleaseStatus() = "" ) {
       info ( "DoCall " + [String]nowNo + "/" + [String]toCalls.Size() + " PR" );
-      toCall.DoCall( globalData, callBy );  
+      toCall.DoCall( globalData, otdSop, callBy );  
       nowNo := nowNo + 1;
     }
   *]
diff --git "a/_Main/BL/Type_PRData/StaticMethod_Export\043346.qbl" "b/_Main/BL/Type_PRData/StaticMethod_Export\043346.qbl"
new file mode 100644
index 0000000..e699b8c
--- /dev/null
+++ "b/_Main/BL/Type_PRData/StaticMethod_Export\043346.qbl"
@@ -0,0 +1,209 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Export (
+  PRDatas toExportList
+) as String
+{
+  TextBody:
+  [*
+    // generate by generate_export_method.py
+    xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?>
+    <table>
+      <name>PRData</name>
+    ';
+    convDateToString := DateToString::StandardConverter();
+    convDateToString.SetCustomConversion();
+    convDateToString.CustomFormatString( 'yyyy-MM-dd' );
+    
+    debuginfo( "export start" );
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鐗╂枡缂栫爜</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      productID := toExportItem.ProductID();
+      cellStr := '<cell value="' + productID + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鐗╂枡鍚嶇О</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      productName := toExportItem.ProductName();
+      cellStr := '<cell value="' + productName + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>闈㈡澘鐗╂枡鏍囪瘑</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      isPanelMaterial := toExportItem.IsPanelMaterial();
+      cellStr := '<cell value="' + isPanelMaterial + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>浜よ揣鏃ユ湡</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      deliveryDate := toExportItem.DeliveryDate();
+      cellStr := '<cell value="' + ifexpr( deliveryDate = Date::MinDate(), "", convDateToString.Convert( deliveryDate )) + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>PR寤鸿鏃ユ湡</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      pRSuggestionDate := toExportItem.PRSuggestionDate();
+      cellStr := '<cell value="' + ifexpr( pRSuggestionDate = Date::MinDate(), "", convDateToString.Convert( pRSuggestionDate )) + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>浜よ揣鏁伴噺</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      quantity := toExportItem.Quantity();
+      cellStr := '<cell value="' + [String]quantity + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>MRP璁$畻鐗堟湰鍙�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      mRPCalverNo := toExportItem.MRPCalverNo();
+      cellStr := '<cell value="' + mRPCalverNo + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>涓氬姟绫诲瀷</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      businessType := toExportItem.BusinessType();
+      cellStr := '<cell value="' + businessType + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>缁勭粐缂栫爜</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      organCode := toExportItem.OrganCode();
+      cellStr := '<cell value="' + organCode + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏄惁闀垮懆鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      isLongLeadItem := toExportItem.IsLongLeadItem();
+      cellStr := '<cell value="' + isLongLeadItem + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏄惁涓撶敤鏂�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      isGenericMaterial := toExportItem.IsGenericMaterial();
+      cellStr := '<cell value="' + isGenericMaterial + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鐗╂枡璁″垝绛栫暐</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      materialMRPType := toExportItem.MaterialMRPType();
+      cellStr := '<cell value="' + materialMRPType + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鎻愬墠鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      leadTime := toExportItem.LeadTime();
+      cellStr := '<cell value="' + [String]leadTime + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>渚涘簲鍟嗕唬鐮�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      providerCode := toExportItem.ProviderCode();
+      cellStr := '<cell value="' + providerCode + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>渚涘簲鍟嗗悕绉�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      providerName := toExportItem.ProviderName();
+      cellStr := '<cell value="' + providerName + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏀惰揣搴撳瓨鐐�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      stockingPointID := toExportItem.StockingPointID();
+      cellStr := '<cell value="' + stockingPointID + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>璁¢噺鍗曚綅</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      unitOfMeasure := toExportItem.UnitOfMeasure();
+      cellStr := '<cell value="' + unitOfMeasure + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>PR鏁版嵁鍙戦�佺姸鎬�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      pRReleaseStatus := toExportItem.PRReleaseStatus();
+      cellStr := '<cell value="' + pRReleaseStatus + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鍙戦�佹椂闂�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      createTimeString := toExportItem.CreateTimeString();
+      cellStr := '<cell value="' + createTimeString + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鍙戦�佷汉</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      createBy := toExportItem.CreateBy();
+      cellStr := '<cell value="' + createBy + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    xmlTemplate := xmlTemplate + "</table>";
+    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTemplate ) );
+    XLS::SaveTable( tableHandle, OS::TempPath() + "PRData.xlsx" );
+    file := OSFile::Construct();
+    file.Open( OS::TempPath() + "PRData.xlsx", "Read", true );
+    data := file.ReadBinary()
+    debuginfo( "export end" );
+    return data.AsBase64EncodedString();
+  *]
+}
diff --git a/_Main/BL/Type_PRData/StaticMethod_Export.qbl b/_Main/BL/Type_PRData/StaticMethod_Export.qbl
new file mode 100644
index 0000000..46ff06e
--- /dev/null
+++ b/_Main/BL/Type_PRData/StaticMethod_Export.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Export (
+  MacroPlan parent
+) as String
+{
+  TextBody:
+  [*
+    // generate by generate_export_method.py
+    toExportList := selectset( parent, PRData, item, true );
+    return PRData::Export( toExportList );
+  *]
+}
diff --git "a/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream\043595.qbl" "b/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream\043595.qbl"
deleted file mode 100644
index 540295e..0000000
--- "a/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream\043595.qbl"
+++ /dev/null
@@ -1,12 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod ExportTheFileStream (
-  MacroPlan parent
-) as BinaryValue
-{
-  TextBody:
-  [*
-    // yypsybs Sep-20-2023 (created)
-    return PRData::ExportTheFileStream( selectset( parent, PRData, item, true ) );
-  *]
-}
diff --git a/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl b/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl
deleted file mode 100644
index 1b706e0..0000000
--- a/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl
+++ /dev/null
@@ -1,78 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod ExportTheFileStream (
-  PRDatas toExportList
-) as BinaryValue
-{
-  TextBody:
-  [*
-    // generate by generate_export.py
-    dateTimeToString := DateTimeToString::StandardConverter();
-    dateTimeToString.SetCustomConversion();
-    dateTimeToString.CustomFormatString( "yyyy/MM/dd H:mm:ss" );
-    
-    dateToString := DateToString::StandardConverter();
-    dateToString.SetCustomConversion();
-    dateToString.CustomFormatString( "yyyy/MM/dd" );
-    
-    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>';
-    xmlDOMImplementation := XMLDOMImplementation::Create();
-    xmlDOMDocument := xmlDOMImplementation.CreateDocumentFromString( text );
-    
-    tableElement:= xmlDOMDocument.GetElementByTagName( "table", 0 );
-    
-    traverse ( toExportList, Elements, toExport ) {
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductID(), "鐗╂枡缂栫爜" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductName(), "鐗╂枡鍚嶇О" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.IsPanelMaterial(), "闈㈡澘鐗╂枡鏍囪瘑" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, ifexpr( toExport.DeliveryDate() = Date::MinDate(), "", dateToString.Convert( toExport.DeliveryDate() ) ), "浜よ揣鏃ユ湡" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, ifexpr( toExport.PRSuggestionDate() = Date::MinDate(), "", dateToString.Convert( toExport.PRSuggestionDate() ) ), "PR寤鸿鏃ユ湡" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.Quantity(), "浜よ揣鏁伴噺" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.MRPCalverNo(), "MRP璁$畻鐗堟湰鍙�" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.BusinessType(), "涓氬姟绫诲瀷" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.OrganCode(), "缁勭粐缂栫爜" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.IsLongLeadItem(), "鏄惁闀垮懆鏈�" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.IsGenericMaterial(), "鏄惁涓撶敤鏂�" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.MaterialMRPType(), "鐗╂枡璁″垝绛栫暐" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.LeadTime(), "鎻愬墠鏈�" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProviderCode(), "渚涘簲鍟嗕唬鐮�" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProviderName(), "渚涘簲鍟嗗悕绉�" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.StockingPointID(), "鏀惰揣搴撳瓨鐐�" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.UnitOfMeasure(), "璁¢噺鍗曚綅" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.PRReleaseStatus(), "PR鏁版嵁鍙戦�佺姸鎬�" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.CreateTimeString(), "鍙戦�佹椂闂�" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.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_FromSupplyPlanning\043662.qbl" "b/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning\043662.qbl"
index 1b30f35..4443fed 100644
--- "a/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning\043662.qbl"
+++ "b/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning\043662.qbl"
@@ -1,7 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod FromSupplyPlanning (
-  GlobalOTDTable otdTable,
+  const GlobalOTDTable otdTable,
+  const GlobalOTDSOP otdSop,
   MacroPlan macroPlan,
   ProductInStockingPointInPeriod pispip,
   String userId
@@ -22,7 +23,9 @@
     mappingOperation := Global_MappingOperation::GetByProductId( otdTable, product.ID() );
     // QID15
     mappingProviderCapacity := Global_MappingProviderCapacity::GetByProductId( otdTable, product.ID() );
-    matAttrSetting := MatAttrSettingAndPlanStrategy::GetExistByMatCode( otdTable, product.ID() );
+    
+    // 鐗╂枡鏍囩灞炴��
+    matAttrSetting := MatAttrSettingAndPlanStrategy::GetByMatCode( otdSop, product.ID() )
     
     // 鏍规嵁pispip
     result.MRPCalverNo( ifexpr( pispip.MRPCalverNo() = "", "鏆傛棤", pispip.MRPCalverNo() ) );
diff --git a/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning.qbl b/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning.qbl
index 7c5d308..a25f329 100644
--- a/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning.qbl
+++ b/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning.qbl
@@ -1,7 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod FromSupplyPlanning (
-  GlobalOTDTable otdTable,
+  const GlobalOTDTable otdTable,
+  const GlobalOTDSOP otdSop,
   MacroPlan macroPlan,
   String mrpCalverNo,
   String userId
@@ -14,10 +15,15 @@
     // 鎸塎RPCalverNo鏌ワ紝宸叉湁鏃ц褰曟椂涓嶅鐞�
     oldRecords := selectset( macroPlan, PRData, item,
                              item.MRPCalverNo() = mrpCalverNo );
+    nowNo := 1;
     if( isnull( oldRecords ) or oldRecords.Size() = 0 ) {
       pispips := ProductInStockingPointInPeriod::GetByMRPCalverNo( macroPlan, mrpCalverNo );
       traverse( pispips, Elements, item, item.NewSupplyQuantity() > 0 ) {
-        PRData::FromSupplyPlanning( otdTable, macroPlan, item, userId );
+        PRData::FromSupplyPlanning( otdTable, otdSop, macroPlan, item, userId );
+        nowNo := nowNo + 1;
+        if( nowNo mod 1000 = 0 ) {
+          info( "SupplyPlanning to prData : " + [String]nowNo );
+        }
       }
     }
   *]
diff --git a/_Main/BL/Type_PRHistoryData/Method_PrintCall.qbl b/_Main/BL/Type_PRHistoryData/Method_PrintCall.qbl
index 736d231..4446b4d 100644
--- a/_Main/BL/Type_PRHistoryData/Method_PrintCall.qbl
+++ b/_Main/BL/Type_PRHistoryData/Method_PrintCall.qbl
@@ -7,7 +7,7 @@
   TextBody:
   [*
     // yypsybs Sep-20-2023 (created)
-    result := this.GlobalOTDTable().PRHistoryData( relcopy, this );
+    result := this.GlobalOTDSOP().PRHistoryData( relcopy, this );
     
     // 鏇存柊閮ㄥ垎
     result.PRDataReleaseDate( Date::Today() );
diff --git a/_Main/BL/Type_PRHistoryData/Method_Recall.qbl b/_Main/BL/Type_PRHistoryData/Method_Recall.qbl
index 065fdb0..6640bef 100644
--- a/_Main/BL/Type_PRHistoryData/Method_Recall.qbl
+++ b/_Main/BL/Type_PRHistoryData/Method_Recall.qbl
@@ -8,7 +8,7 @@
   TextBody:
   [*
     // yypsybs Sep-11-2023 (created)
-    result := this.GlobalOTDTable().PRHistoryData( relcopy, this );
+    result := this.GlobalOTDSOP().PRHistoryData( relcopy, this );
     
     // 鏇存柊閮ㄥ垎
     result.PRDataReleaseDate( Date::Today() );
diff --git "a/_Main/BL/Type_PRHistoryData/StaticMethod_Export\043527.qbl" "b/_Main/BL/Type_PRHistoryData/StaticMethod_Export\043527.qbl"
new file mode 100644
index 0000000..55d80be
--- /dev/null
+++ "b/_Main/BL/Type_PRHistoryData/StaticMethod_Export\043527.qbl"
@@ -0,0 +1,199 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Export (
+  PRHistoryDatas toExportList
+) as String
+{
+  TextBody:
+  [*
+    // generate by generate_export_method.py
+    xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?>
+    <table>
+      <name>PRHistoryData</name>
+    ';
+    convDateToString := DateToString::StandardConverter();
+    convDateToString.SetCustomConversion();
+    convDateToString.CustomFormatString( 'yyyy-MM-dd' );
+    
+    debuginfo( "export start" );
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鐗╂枡缂栫爜</name><type>String</type>";
+    debuginfo( "export column ProductID" );
+    traverse( toExportList, Elements, toExportItem ) {
+      productID := toExportItem.ProductID();
+      cellStr := '<cell value="' + productID + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鐗╂枡鍚嶇О</name><type>String</type>";
+    debuginfo( "export column ProductName" );
+    traverse( toExportList, Elements, toExportItem ) {
+      productName := toExportItem.ProductName();
+      cellStr := '<cell value="' + productName + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>浜よ揣鏃ユ湡</name><type>String</type>";
+    debuginfo( "export column DeliveryDate" );
+    traverse( toExportList, Elements, toExportItem ) {
+      deliveryDate := toExportItem.DeliveryDate();
+      cellStr := '<cell value="' + ifexpr( deliveryDate = Date::MinDate(), "", convDateToString.Convert( deliveryDate )) + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>浜よ揣鏁伴噺</name><type>String</type>";
+    debuginfo( "export column Quantity" );
+    traverse( toExportList, Elements, toExportItem ) {
+      quantity := toExportItem.Quantity();
+      cellStr := '<cell value="' + [String]quantity + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>MRP璁$畻鐗堟湰鍙�</name><type>String</type>";
+    debuginfo( "export column MRPCalverNo" );
+    traverse( toExportList, Elements, toExportItem ) {
+      mRPCalverNo := toExportItem.MRPCalverNo();
+      cellStr := '<cell value="' + mRPCalverNo + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>涓氬姟绫诲瀷</name><type>String</type>";
+    debuginfo( "export column BusinessType" );
+    traverse( toExportList, Elements, toExportItem ) {
+      businessType := toExportItem.BusinessType();
+      cellStr := '<cell value="' + businessType + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>缁勭粐缂栫爜</name><type>String</type>";
+    debuginfo( "export column OrganCode" );
+    traverse( toExportList, Elements, toExportItem ) {
+      organCode := toExportItem.OrganCode();
+      cellStr := '<cell value="' + organCode + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>渚涘簲鍟嗕唬鐮�</name><type>String</type>";
+    debuginfo( "export column ProviderCode" );
+    traverse( toExportList, Elements, toExportItem ) {
+      providerCode := toExportItem.ProviderCode();
+      cellStr := '<cell value="' + providerCode + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>渚涘簲鍟嗗悕绉�</name><type>String</type>";
+    debuginfo( "export column ProviderName" );
+    traverse( toExportList, Elements, toExportItem ) {
+      providerName := toExportItem.ProviderName();
+      cellStr := '<cell value="' + providerName + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏀惰揣搴撳瓨鐐�</name><type>String</type>";
+    debuginfo( "export column StockingPointID" );
+    traverse( toExportList, Elements, toExportItem ) {
+      stockingPointID := toExportItem.StockingPointID();
+      cellStr := '<cell value="' + stockingPointID + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>璁¢噺鍗曚綅</name><type>String</type>";
+    debuginfo( "export column UnitOfMeasure" );
+    traverse( toExportList, Elements, toExportItem ) {
+      unitOfMeasure := toExportItem.UnitOfMeasure();
+      cellStr := '<cell value="' + unitOfMeasure + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>PR鏁版嵁鍙戦�佺姸鎬�</name><type>String</type>";
+    debuginfo( "export column SendStatus" );
+    traverse( toExportList, Elements, toExportItem ) {
+      sendStatus := toExportItem.SendStatus();
+      cellStr := '<cell value="' + sendStatus + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鍙戦�佹椂闂�</name><type>String</type>";
+    debuginfo( "export column SendTimeString" );
+    traverse( toExportList, Elements, toExportItem ) {
+      sendTimeString := toExportItem.SendTimeString();
+      cellStr := '<cell value="' + sendTimeString + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鍙戦�佷汉</name><type>String</type>";
+    debuginfo( "export column ReleaseBy" );
+    traverse( toExportList, Elements, toExportItem ) {
+      releaseBy := toExportItem.ReleaseBy();
+      cellStr := '<cell value="' + releaseBy + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>ERP鎺ユ敹鏃堕棿</name><type>String</type>";
+    debuginfo( "export column ReceiveTimeString" );
+    traverse( toExportList, Elements, toExportItem ) {
+      receiveTimeString := toExportItem.ReceiveTimeString();
+      cellStr := '<cell value="' + receiveTimeString + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>ERP鎺ユ敹鐘舵��</name><type>String</type>";
+    debuginfo( "export column ReceiveStatus" );
+    traverse( toExportList, Elements, toExportItem ) {
+      receiveStatus := toExportItem.ReceiveStatus();
+      cellStr := '<cell value="' + receiveStatus + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>閿欒淇℃伅鎻忚堪</name><type>String</type>";
+    debuginfo( "export column ReceiveError" );
+    traverse( toExportList, Elements, toExportItem ) {
+      receiveError := toExportItem.ReceiveError();
+      cellStr := '<cell value="' + receiveError.ReplaceAll( '"', "'" ) + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    xmlTemplate := xmlTemplate + "</table>";
+    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTemplate ) );
+    XLS::SaveTable( tableHandle, OS::TempPath() + "PRHistoryData.xlsx" );
+    file := OSFile::Construct();
+    file.Open( OS::TempPath() + "PRHistoryData.xlsx", "Read", true );
+    data := file.ReadBinary()
+    debuginfo( "export end" );
+    return data.AsBase64EncodedString();
+  *]
+}
diff --git a/_Main/BL/Type_PRHistoryData/StaticMethod_Export.qbl b/_Main/BL/Type_PRHistoryData/StaticMethod_Export.qbl
new file mode 100644
index 0000000..02ee2f6
--- /dev/null
+++ b/_Main/BL/Type_PRHistoryData/StaticMethod_Export.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Export (
+  GlobalOTDSOP parent
+) as String
+{
+  TextBody:
+  [*
+    // generate by generate_export_method.py
+    toExportList := selectset( parent, PRHistoryData, item, true );
+    return PRHistoryData::Export( toExportList );
+  *]
+}
diff --git "a/_Main/BL/Type_PRHistoryData/StaticMethod_ExportTheFileStream\04345.qbl" "b/_Main/BL/Type_PRHistoryData/StaticMethod_ExportTheFileStream\04345.qbl"
deleted file mode 100644
index a04fd41..0000000
--- "a/_Main/BL/Type_PRHistoryData/StaticMethod_ExportTheFileStream\04345.qbl"
+++ /dev/null
@@ -1,12 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod ExportTheFileStream (
-  GlobalOTDTable parent
-) as BinaryValue
-{
-  TextBody:
-  [*
-    // yypsybs Sep-20-2023 (created)
-    return PRHistoryData::ExportTheFileStream( selectset( parent, PRHistoryData, item, true ) );
-  *]
-}
diff --git a/_Main/BL/Type_PRHistoryData/StaticMethod_ExportTheFileStream.qbl b/_Main/BL/Type_PRHistoryData/StaticMethod_ExportTheFileStream.qbl
deleted file mode 100644
index edd753d..0000000
--- a/_Main/BL/Type_PRHistoryData/StaticMethod_ExportTheFileStream.qbl
+++ /dev/null
@@ -1,72 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod ExportTheFileStream (
-  PRHistoryDatas toExportList
-) as BinaryValue
-{
-  TextBody:
-  [*
-    // generate by generate_export.py
-    dateTimeToString := DateTimeToString::StandardConverter();
-    dateTimeToString.SetCustomConversion();
-    dateTimeToString.CustomFormatString( "yyyy/MM/dd H:mm:ss" );
-    
-    dateToString := DateToString::StandardConverter();
-    dateToString.SetCustomConversion();
-    dateToString.CustomFormatString( "yyyy/MM/dd" );
-    
-    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>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>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>
-    <column><name>ERP鎺ユ敹鏃堕棿</name><type>String</type></column>
-    <column><name>ERP鎺ユ敹鐘舵��</name><type>String</type></column>
-    <column><name>閿欒淇℃伅鎻忚堪</name><type>String</type></column>
-    </table>';
-    xmlDOMImplementation := XMLDOMImplementation::Create();
-    xmlDOMDocument := xmlDOMImplementation.CreateDocumentFromString( text );
-    
-    tableElement:= xmlDOMDocument.GetElementByTagName( "table", 0 );
-    
-    traverse ( toExportList, Elements, toExport ) {
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductID(), "闆朵欢鍙�" );
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductName(), "闆朵欢鍚嶇О" );
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, ifexpr( toExport.DeliveryDate() = Date::MinDate(), "", dateToString.Convert( toExport.DeliveryDate() ) ), "浜よ揣鏃ユ湡" );
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.Quantity(), "闇�姹傛暟閲�" );
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.MRPCalverNo(), "MRP璁$畻鐗堟湰鍙�" );
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.BusinessType(), "浜嬩笟閮�" );
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.OrganCode(), "缁勭粐缂栫爜" );
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProviderCode(), "渚涘簲鍟嗕唬鐮�" );
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProviderName(), "渚涘簲鍟嗗悕绉�" );
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.StockingPointID(), "鏀惰揣搴撳瓨鐐�" );
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.UnitOfMeasure(), "璁¢噺鍗曚綅" );
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.SendStatus(), "PR鏁版嵁鍙戦�佺姸鎬�" );
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.SendTimeString(), "鍙戦�佹椂闂�" );
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ReleaseBy(), "鍙戦�佷汉" );
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ReceiveTimeString(), "ERP鎺ユ敹鏃堕棿" );
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ReceiveStatus(), "ERP鎺ユ敹鐘舵��" );
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ReceiveError(), "閿欒淇℃伅鎻忚堪" );
-    }
-    
-    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_PanelMaterialAutomotiveElectronics/StaticMethod_ReceiveDataGeneration.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/StaticMethod_ReceiveDataGeneration.qbl
index 7e23ced..3e40288 100644
--- a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/StaticMethod_ReceiveDataGeneration.qbl
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/StaticMethod_ReceiveDataGeneration.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod ReceiveDataGeneration (
-  GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP globalOTDSOP,
   NamedValueTree requestnvt
 )
 {
@@ -25,15 +25,15 @@
     businessTypeNameValue := restPayloadNameValue.Child( businessTypeHandle );
     scenarioNameNameValue := restPayloadNameValue.Child( scenarioNameHandle );
     
-    panelMaterialAll := select( globalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = businessTypeNameValue.GetValueAsString() );
+    panelMaterialAll := select( globalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = businessTypeNameValue.GetValueAsString() );
     if ( not isnull( panelMaterialAll ) ) {
       panelMaterialAll.Delete();
     }
-    panelMaterialAll := globalOTDTable.PanelMaterialAll( relnew, 
-                                                         ReleaseDate  := releaseDateNameValue.GetValueAsString(),
-                                                         BusinessType := businessTypeNameValue.GetValueAsString(),
-                                                         ScenarioName := scenarioNameNameValue.GetValueAsString()
-                                                        );
+    panelMaterialAll := globalOTDSOP.PanelMaterialAll( relnew, 
+                                                       ReleaseDate  := releaseDateNameValue.GetValueAsString(),
+                                                       BusinessType := businessTypeNameValue.GetValueAsString(),
+                                                       ScenarioName := scenarioNameNameValue.GetValueAsString()
+                                                      );
     
     panelMaterialsHandle := requestnvt.GetHandle( "panelMaterials" );
     panelMaterialsNameValue := restPayloadNameValue.Child( panelMaterialsHandle );
diff --git a/_Main/BL/Type_PanelMaterialIT/StaticMethod_ReceiveDataGeneration.qbl b/_Main/BL/Type_PanelMaterialIT/StaticMethod_ReceiveDataGeneration.qbl
index 2247ccb..39590fa 100644
--- a/_Main/BL/Type_PanelMaterialIT/StaticMethod_ReceiveDataGeneration.qbl
+++ b/_Main/BL/Type_PanelMaterialIT/StaticMethod_ReceiveDataGeneration.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod ReceiveDataGeneration (
-  GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP globalOTDSOP,
   NamedValueTree requestnvt
 )
 {
@@ -25,15 +25,15 @@
     businessTypeNameValue := restPayloadNameValue.Child( businessTypeHandle );
     scenarioNameNameValue := restPayloadNameValue.Child( scenarioNameHandle );
     
-    panelMaterialAll := select( globalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = businessTypeNameValue.GetValueAsString() );
+    panelMaterialAll := select( globalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = businessTypeNameValue.GetValueAsString() );
     if ( not isnull( panelMaterialAll ) ) {
       panelMaterialAll.Delete();
     }
-    panelMaterialAll := globalOTDTable.PanelMaterialAll( relnew, 
-                                                         ReleaseDate  := releaseDateNameValue.GetValueAsString(),
-                                                         BusinessType := businessTypeNameValue.GetValueAsString(),
-                                                         ScenarioName := scenarioNameNameValue.GetValueAsString()
-                                                        );
+    panelMaterialAll := globalOTDSOP.PanelMaterialAll( relnew, 
+                                                       ReleaseDate  := releaseDateNameValue.GetValueAsString(),
+                                                       BusinessType := businessTypeNameValue.GetValueAsString(),
+                                                       ScenarioName := scenarioNameNameValue.GetValueAsString()
+                                                      );
     
     panelMaterialsHandle := requestnvt.GetHandle( "panelMaterials" );
     panelMaterialsNameValue := restPayloadNameValue.Child( panelMaterialsHandle );
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/StaticMethod_ReceiveDataGeneration.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/StaticMethod_ReceiveDataGeneration.qbl
index 699665f..da488c1 100644
--- a/_Main/BL/Type_PanelMaterialSpecializedDisplay/StaticMethod_ReceiveDataGeneration.qbl
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/StaticMethod_ReceiveDataGeneration.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod ReceiveDataGeneration (
-  GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP globalOTDSOP,
   NamedValueTree requestnvt
 )
 {
@@ -25,15 +25,15 @@
     businessTypeNameValue := restPayloadNameValue.Child( businessTypeHandle );
     scenarioNameNameValue := restPayloadNameValue.Child( scenarioNameHandle );
     
-    panelMaterialAll := select( globalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = businessTypeNameValue.GetValueAsString() );
+    panelMaterialAll := select( globalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = businessTypeNameValue.GetValueAsString() );
     if ( not isnull( panelMaterialAll ) ) {
       panelMaterialAll.Delete();
     }
-    panelMaterialAll := globalOTDTable.PanelMaterialAll( relnew, 
-                                                         ReleaseDate  := releaseDateNameValue.GetValueAsString(),
-                                                         BusinessType := businessTypeNameValue.GetValueAsString(),
-                                                         ScenarioName := scenarioNameNameValue.GetValueAsString()
-                                                        );
+    panelMaterialAll := globalOTDSOP.PanelMaterialAll( relnew, 
+                                                       ReleaseDate  := releaseDateNameValue.GetValueAsString(),
+                                                       BusinessType := businessTypeNameValue.GetValueAsString(),
+                                                       ScenarioName := scenarioNameNameValue.GetValueAsString()
+                                                      );
     
     panelMaterialsHandle := requestnvt.GetHandle( "panelMaterials" );
     panelMaterialsNameValue := restPayloadNameValue.Child( panelMaterialsHandle );
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/StaticMethod_ReceiveDataGeneration.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/StaticMethod_ReceiveDataGeneration.qbl
index 21dd372..ae91512 100644
--- a/_Main/BL/Type_PanelMaterialSportsHealth/StaticMethod_ReceiveDataGeneration.qbl
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/StaticMethod_ReceiveDataGeneration.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod ReceiveDataGeneration (
-  GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP globalOTDSOP,
   NamedValueTree requestnvt
 )
 {
@@ -25,15 +25,15 @@
     businessTypeNameValue := restPayloadNameValue.Child( businessTypeHandle );
     scenarioNameNameValue := restPayloadNameValue.Child( scenarioNameHandle );
     
-    panelMaterialAll := select( globalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = businessTypeNameValue.GetValueAsString() );
+    panelMaterialAll := select( globalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = businessTypeNameValue.GetValueAsString() );
     if ( not isnull( panelMaterialAll ) ) {
       panelMaterialAll.Delete();
     }
-    panelMaterialAll := globalOTDTable.PanelMaterialAll( relnew, 
-                                                         ReleaseDate  := releaseDateNameValue.GetValueAsString(),
-                                                         BusinessType := businessTypeNameValue.GetValueAsString(),
-                                                         ScenarioName := scenarioNameNameValue.GetValueAsString()
-                                                        );
+    panelMaterialAll := globalOTDSOP.PanelMaterialAll( relnew, 
+                                                       ReleaseDate  := releaseDateNameValue.GetValueAsString(),
+                                                       BusinessType := businessTypeNameValue.GetValueAsString(),
+                                                       ScenarioName := scenarioNameNameValue.GetValueAsString()
+                                                      );
     
     panelMaterialsHandle := requestnvt.GetHandle( "panelMaterials" );
     panelMaterialsNameValue := restPayloadNameValue.Child( panelMaterialsHandle );
diff --git a/_Main/BL/Type_PanelMaterialTM17/StaticMethod_ReceiveDataGeneration.qbl b/_Main/BL/Type_PanelMaterialTM17/StaticMethod_ReceiveDataGeneration.qbl
index e3cd600..c07b02c 100644
--- a/_Main/BL/Type_PanelMaterialTM17/StaticMethod_ReceiveDataGeneration.qbl
+++ b/_Main/BL/Type_PanelMaterialTM17/StaticMethod_ReceiveDataGeneration.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod ReceiveDataGeneration (
-  GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP globalOTDSOP,
   NamedValueTree requestnvt
 )
 {
@@ -25,15 +25,15 @@
     businessTypeNameValue := restPayloadNameValue.Child( businessTypeHandle );
     scenarioNameNameValue := restPayloadNameValue.Child( scenarioNameHandle );
     
-    panelMaterialAll := select( globalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = businessTypeNameValue.GetValueAsString() );
+    panelMaterialAll := select( globalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = businessTypeNameValue.GetValueAsString() );
     if ( not isnull( panelMaterialAll ) ) {
       panelMaterialAll.Delete();
     }
-    panelMaterialAll := globalOTDTable.PanelMaterialAll( relnew, 
-                                                         ReleaseDate  := releaseDateNameValue.GetValueAsString(),
-                                                         BusinessType := businessTypeNameValue.GetValueAsString(),
-                                                         ScenarioName := scenarioNameNameValue.GetValueAsString()
-                                                        );
+    panelMaterialAll := globalOTDSOP.PanelMaterialAll( relnew, 
+                                                       ReleaseDate  := releaseDateNameValue.GetValueAsString(),
+                                                       BusinessType := businessTypeNameValue.GetValueAsString(),
+                                                       ScenarioName := scenarioNameNameValue.GetValueAsString()
+                                                      );
     
     panelMaterialsHandle := requestnvt.GetHandle( "panelMaterials" );
     panelMaterialsNameValue := restPayloadNameValue.Child( panelMaterialsHandle );
diff --git a/_Main/BL/Type_PanelMaterialTM18/StaticMethod_ReceiveDataGeneration.qbl b/_Main/BL/Type_PanelMaterialTM18/StaticMethod_ReceiveDataGeneration.qbl
index 81c7bd9..c646fb6 100644
--- a/_Main/BL/Type_PanelMaterialTM18/StaticMethod_ReceiveDataGeneration.qbl
+++ b/_Main/BL/Type_PanelMaterialTM18/StaticMethod_ReceiveDataGeneration.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod ReceiveDataGeneration (
-  GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP globalOTDSOP,
   NamedValueTree requestnvt
 )
 {
@@ -25,15 +25,15 @@
     businessTypeNameValue := restPayloadNameValue.Child( businessTypeHandle );
     scenarioNameNameValue := restPayloadNameValue.Child( scenarioNameHandle );
     
-    panelMaterialAll := select( globalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = businessTypeNameValue.GetValueAsString() );
+    panelMaterialAll := select( globalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = businessTypeNameValue.GetValueAsString() );
     if ( not isnull( panelMaterialAll ) ) {
       panelMaterialAll.Delete();
     }
-    panelMaterialAll := globalOTDTable.PanelMaterialAll( relnew, 
-                                                         ReleaseDate  := releaseDateNameValue.GetValueAsString(),
-                                                         BusinessType := businessTypeNameValue.GetValueAsString(),
-                                                         ScenarioName := scenarioNameNameValue.GetValueAsString()
-                                                        );
+    panelMaterialAll := globalOTDSOP.PanelMaterialAll( relnew, 
+                                                       ReleaseDate  := releaseDateNameValue.GetValueAsString(),
+                                                       BusinessType := businessTypeNameValue.GetValueAsString(),
+                                                       ScenarioName := scenarioNameNameValue.GetValueAsString()
+                                                      );
     
     panelMaterialsHandle := requestnvt.GetHandle( "panelMaterials" );
     panelMaterialsNameValue := restPayloadNameValue.Child( panelMaterialsHandle );
diff --git a/_Main/BL/Type_PanelMaterialTianHua/StaticMethod_ReceiveDataGeneration.qbl b/_Main/BL/Type_PanelMaterialTianHua/StaticMethod_ReceiveDataGeneration.qbl
index a21141a..7d2964a 100644
--- a/_Main/BL/Type_PanelMaterialTianHua/StaticMethod_ReceiveDataGeneration.qbl
+++ b/_Main/BL/Type_PanelMaterialTianHua/StaticMethod_ReceiveDataGeneration.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod ReceiveDataGeneration (
-  GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP globalOTDSOP,
   NamedValueTree requestnvt
 )
 {
@@ -25,15 +25,15 @@
     businessTypeNameValue := restPayloadNameValue.Child( businessTypeHandle );
     scenarioNameNameValue := restPayloadNameValue.Child( scenarioNameHandle );
     
-    panelMaterialAll := select( globalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = businessTypeNameValue.GetValueAsString() );
+    panelMaterialAll := select( globalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = businessTypeNameValue.GetValueAsString() );
     if ( not isnull( panelMaterialAll ) ) {
       panelMaterialAll.Delete();
     }
-    panelMaterialAll := globalOTDTable.PanelMaterialAll( relnew, 
-                                                         ReleaseDate  := releaseDateNameValue.GetValueAsString(),
-                                                         BusinessType := businessTypeNameValue.GetValueAsString(),
-                                                         ScenarioName := scenarioNameNameValue.GetValueAsString()
-                                                        );
+    panelMaterialAll := globalOTDSOP.PanelMaterialAll( relnew, 
+                                                       ReleaseDate  := releaseDateNameValue.GetValueAsString(),
+                                                       BusinessType := businessTypeNameValue.GetValueAsString(),
+                                                       ScenarioName := scenarioNameNameValue.GetValueAsString()
+                                                      );
     
     panelMaterialsHandle := requestnvt.GetHandle( "panelMaterials" );
     panelMaterialsNameValue := restPayloadNameValue.Child( panelMaterialsHandle );
diff --git a/_Main/BL/Type_PanelMaterialVehicle/StaticMethod_ReceiveDataGeneration.qbl b/_Main/BL/Type_PanelMaterialVehicle/StaticMethod_ReceiveDataGeneration.qbl
index 6160180..668e4f6 100644
--- a/_Main/BL/Type_PanelMaterialVehicle/StaticMethod_ReceiveDataGeneration.qbl
+++ b/_Main/BL/Type_PanelMaterialVehicle/StaticMethod_ReceiveDataGeneration.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod ReceiveDataGeneration (
-  GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP globalOTDSOP,
   NamedValueTree requestnvt
 )
 {
@@ -25,15 +25,15 @@
     businessTypeNameValue := restPayloadNameValue.Child( businessTypeHandle );
     scenarioNameNameValue := restPayloadNameValue.Child( scenarioNameHandle );
     
-    panelMaterialAll := select( globalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = businessTypeNameValue.GetValueAsString() );
+    panelMaterialAll := select( globalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = businessTypeNameValue.GetValueAsString() );
     if ( not isnull( panelMaterialAll ) ) {
       panelMaterialAll.Delete();
     }
-    panelMaterialAll := globalOTDTable.PanelMaterialAll( relnew, 
-                                                         ReleaseDate  := releaseDateNameValue.GetValueAsString(),
-                                                         BusinessType := businessTypeNameValue.GetValueAsString(),
-                                                         ScenarioName := scenarioNameNameValue.GetValueAsString()
-                                                        );
+    panelMaterialAll := globalOTDSOP.PanelMaterialAll( relnew, 
+                                                       ReleaseDate  := releaseDateNameValue.GetValueAsString(),
+                                                       BusinessType := businessTypeNameValue.GetValueAsString(),
+                                                       ScenarioName := scenarioNameNameValue.GetValueAsString()
+                                                      );
     
     panelMaterialsHandle := requestnvt.GetHandle( "panelMaterials" );
     panelMaterialsNameValue := restPayloadNameValue.Child( panelMaterialsHandle );
diff --git a/_Main/BL/Type_PriorityResult/StaticMethod_CalculateBracketScore.qbl b/_Main/BL/Type_PriorityResult/StaticMethod_CalculateBracketScore.qbl
index 962e51e..09d43bc 100644
--- a/_Main/BL/Type_PriorityResult/StaticMethod_CalculateBracketScore.qbl
+++ b/_Main/BL/Type_PriorityResult/StaticMethod_CalculateBracketScore.qbl
@@ -5,7 +5,7 @@
   CustomerOrder customerOrder,
   String businessType,
   MacroPlan macroPlan,
-  GlobalOTDTable globalOTDTable
+  const GlobalOTDTable globalOTDTable
 ) as Real
 {
   Description: '璁$畻鍏紡涓嫭鍙峰唴鐨勬暟鎹�'
diff --git a/_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl b/_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl
index 7b59176..2f7e3cb 100644
--- a/_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl
+++ b/_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl
@@ -6,7 +6,7 @@
   String businessType,
   MacroPlan macroPlan,
   Real lastScore,
-  GlobalOTDTable globalOTDTable
+  const GlobalOTDTable globalOTDTable
 ) as Real
 {
   TextBody:
diff --git a/_Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl b/_Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl
index 78c3611..4555573 100644
--- a/_Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl
+++ b/_Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl
@@ -4,7 +4,7 @@
   CustomerOrder customerOrder,
   String formula,
   MacroPlan macroPlan,
-  GlobalOTDTable globalOTDTable
+  const GlobalOTDTable globalOTDTable
 ) as Real
 {
   TextBody:
diff --git a/_Main/BL/Type_SalesSegment_MP/StaticMethod_DoASync.qbl b/_Main/BL/Type_SalesSegment_MP/StaticMethod_DoASync.qbl
new file mode 100644
index 0000000..47fef26
--- /dev/null
+++ b/_Main/BL/Type_SalesSegment_MP/StaticMethod_DoASync.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DoASync (
+  MacroPlan macroPlan,
+  Strings businessTypes,
+  const GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    // yypsybs Aug-17-2023 (created)
+    //info( "UnitOfMeasure_MP Finished, Start Sales Segment Data Broker" )
+    //macroPlan.Broker_OTD_SalesSegment().Execute();
+    info( "Sales Segment Data Broker Finished, Start Sales Segment Mapping" )
+    macroPlan.DoASyncMappingSalesSegmentData( businessTypes,globalOTDTable );
+  *]
+}
diff --git a/_Main/BL/Type_UnitOfMeasure_MP/StaticMethod_DoASync.qbl b/_Main/BL/Type_UnitOfMeasure_MP/StaticMethod_DoASync.qbl
new file mode 100644
index 0000000..f5f1797
--- /dev/null
+++ b/_Main/BL/Type_UnitOfMeasure_MP/StaticMethod_DoASync.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DoASync (
+  const GlobalOTDTable globalotdtable,
+  MacroPlan macroplan
+)
+{
+  Description: '鍗曟鍚屾'
+  TextBody:
+  [*
+    // yypsybs Aug-17-2023 (created)
+    //info( "Inital Finished, Start UnitOfMeasure_MP Data Broker" )
+    //macroPlan.Broker_OTD_UnitOfMeasure().Execute();
+    info( "UnitOfMeasure_MP Data Broker Finished, Start UnitOfMeasure_MP Mapping" )
+    macroplan.DoASyncMappingUnitOfMeasureData(globalotdtable);
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_CopyVersion.qbl b/_Main/BL/Type_VersionControl/StaticMethod_CopyVersion.qbl
index bf6fb53..2f00e3e 100644
--- a/_Main/BL/Type_VersionControl/StaticMethod_CopyVersion.qbl
+++ b/_Main/BL/Type_VersionControl/StaticMethod_CopyVersion.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CopyVersion (
-  GlobalOTDTable owner,
+  GlobalOTDSOP owner,
   String businessname
 ) as VersionControl
 {
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_Create.qbl b/_Main/BL/Type_VersionControl/StaticMethod_Create.qbl
index 22a6355..1136335 100644
--- a/_Main/BL/Type_VersionControl/StaticMethod_Create.qbl
+++ b/_Main/BL/Type_VersionControl/StaticMethod_Create.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Create (
-  GlobalOTDTable owner,
+  GlobalOTDSOP owner,
   String businesstype,
   String caltype,
   DateTime createtime,
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_CreateNewSceneVersion.qbl b/_Main/BL/Type_VersionControl/StaticMethod_CreateNewSceneVersion.qbl
index 450646d..b886d30 100644
--- a/_Main/BL/Type_VersionControl/StaticMethod_CreateNewSceneVersion.qbl
+++ b/_Main/BL/Type_VersionControl/StaticMethod_CreateNewSceneVersion.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateNewSceneVersion (
-  GlobalOTDTable owner,
+  GlobalOTDSOP owner,
   String businessname
 ) as VersionControl
 {
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_CreateNewVersion.qbl b/_Main/BL/Type_VersionControl/StaticMethod_CreateNewVersion.qbl
index 8f05fb1..403fc6d 100644
--- a/_Main/BL/Type_VersionControl/StaticMethod_CreateNewVersion.qbl
+++ b/_Main/BL/Type_VersionControl/StaticMethod_CreateNewVersion.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateNewVersion (
-  GlobalOTDTable owner,
+  GlobalOTDSOP owner,
   String businessname
 ) as VersionControl
 {
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_FindByFullVersionID.qbl b/_Main/BL/Type_VersionControl/StaticMethod_FindByFullVersionID.qbl
index a281109..a71d287 100644
--- a/_Main/BL/Type_VersionControl/StaticMethod_FindByFullVersionID.qbl
+++ b/_Main/BL/Type_VersionControl/StaticMethod_FindByFullVersionID.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod FindByFullVersionID (
-  GlobalOTDTable owner,
+  GlobalOTDSOP owner,
   String versionid
 ) as VersionControl
 {
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_FindLatestUpdateVersion.qbl b/_Main/BL/Type_VersionControl/StaticMethod_FindLatestUpdateVersion.qbl
index 4450bf4..a352c1f 100644
--- a/_Main/BL/Type_VersionControl/StaticMethod_FindLatestUpdateVersion.qbl
+++ b/_Main/BL/Type_VersionControl/StaticMethod_FindLatestUpdateVersion.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod FindLatestUpdateVersion (
-  GlobalOTDTable globalotdtable,
+  GlobalOTDSOP globalotdsop,
   String businesstype
 ) as VersionControl
 {
@@ -11,7 +11,7 @@
     // Administrator Sep-13-2023 (created)
     
     // Get the latest version data 
-    latestversion := maxselect( globalotdtable, 
+    latestversion := maxselect( globalotdsop, 
                                 VersionControl, 
                                 version, 
                                 version.BusinessType()=businesstype and version.IsReleased()=true, 
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_FindLatestVersion.qbl b/_Main/BL/Type_VersionControl/StaticMethod_FindLatestVersion.qbl
index df4f8f4..ee37c6c 100644
--- a/_Main/BL/Type_VersionControl/StaticMethod_FindLatestVersion.qbl
+++ b/_Main/BL/Type_VersionControl/StaticMethod_FindLatestVersion.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod FindLatestVersion (
-  GlobalOTDTable globalotdtable,
+  GlobalOTDSOP globalotdsop,
   String businesstype
 ) as VersionControl
 {
@@ -11,7 +11,7 @@
     // Administrator Sep-13-2023 (created)
     
     // Get the latest version data 
-    latestversion := maxselect( globalotdtable, 
+    latestversion := maxselect( globalotdsop, 
                                 VersionControl, 
                                 version, 
                                 version.BusinessType()=businesstype, 
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_FindReleasedVersions.qbl b/_Main/BL/Type_VersionControl/StaticMethod_FindReleasedVersions.qbl
index 7e7ec19..59dd8e3 100644
--- a/_Main/BL/Type_VersionControl/StaticMethod_FindReleasedVersions.qbl
+++ b/_Main/BL/Type_VersionControl/StaticMethod_FindReleasedVersions.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod FindReleasedVersions (
-  GlobalOTDTable globalotdtable,
+  GlobalOTDSOP globalotdsop,
   String businesstype,
   String versionid
 ) as owning VersionControls
@@ -12,7 +12,10 @@
     // Administrator Sep-13-2023 (created)
     
     // Get the latest version data 
-    latestversion := selectset( globalotdtable, VersionControl, version, version.BusinessType()=businesstype and version.IsReleased()=true and version.VersionID().FindString( versionid, 0 ) = 0 );
+    latestversion := selectset( globalotdsop, 
+                                VersionControl, 
+                                version, 
+                                version.BusinessType()=businesstype and version.IsReleased()=true and version.VersionID().FindString( versionid, 0 ) = 0 );
     
     return &latestversion;
   *]
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_GetVersionInfo.qbl b/_Main/BL/Type_VersionControl/StaticMethod_GetVersionInfo.qbl
index 03b2084..9efc81f 100644
--- a/_Main/BL/Type_VersionControl/StaticMethod_GetVersionInfo.qbl
+++ b/_Main/BL/Type_VersionControl/StaticMethod_GetVersionInfo.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod GetVersionInfo (
-  GlobalOTDTable owner,
+  GlobalOTDSOP owner,
   String businessname
 ) as owning Strings
 {
@@ -9,9 +9,9 @@
   TextBody:
   [*
     // Administrator Sep-13-2023 (created)
-    businesstyoe := GlobalOTDTable::GetBusinessTypeName( businessname );
+    businesstype := GlobalOTDTable::GetBusinessTypeName( businessname );
     result := construct( Strings );
-    rootversion := VersionControl::FindLatestVersion( owner, businesstyoe );
+    rootversion := VersionControl::FindLatestVersion( owner, businesstype );
     
     if( not isnull( rootversion ) ){
       result.Add( rootversion.VersionID() );
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_ReleaseNewVersion.qbl b/_Main/BL/Type_VersionControl/StaticMethod_ReleaseNewVersion.qbl
index f90a939..c488456 100644
--- a/_Main/BL/Type_VersionControl/StaticMethod_ReleaseNewVersion.qbl
+++ b/_Main/BL/Type_VersionControl/StaticMethod_ReleaseNewVersion.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod ReleaseNewVersion (
-  GlobalOTDTable owner,
+  GlobalOTDSOP owner,
   String businesstype
 )
 {
diff --git a/_Main/BL/Type_VersionStatus/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_VersionStatus/StaticMethod_CreateOrUpdate.qbl
index a33f467..3621c15 100644
--- a/_Main/BL/Type_VersionStatus/StaticMethod_CreateOrUpdate.qbl
+++ b/_Main/BL/Type_VersionStatus/StaticMethod_CreateOrUpdate.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateOrUpdate (
-  GlobalOTDTable owner,
+  GlobalOTDSOP owner,
   String businesstype,
   String businessname,
   DateTime lastreleasetime,
diff --git a/_Main/BL/Type_VersionStatus/StaticMethod_FindLatestStatus.qbl b/_Main/BL/Type_VersionStatus/StaticMethod_FindLatestStatus.qbl
index 5a58dc6..6fc83ee 100644
--- a/_Main/BL/Type_VersionStatus/StaticMethod_FindLatestStatus.qbl
+++ b/_Main/BL/Type_VersionStatus/StaticMethod_FindLatestStatus.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod FindLatestStatus (
-  GlobalOTDTable globalotdtable,
+  GlobalOTDSOP globalotdsop,
   String businesstype
 ) as VersionStatus
 {
@@ -11,7 +11,7 @@
     // Administrator Sep-13-2023 (created)
     
     // Get the latest version data 
-    lateststatus := select( globalotdtable, VersionStatus, version, version.BusinessType()=businesstype );
+    lateststatus := select( globalotdsop, VersionStatus, version, version.BusinessType()=businesstype );
     
     return lateststatus;
   *]
diff --git a/_Main/BL/Type_VersionStatus/StaticMethod_GetBusinessTypeStatus.qbl b/_Main/BL/Type_VersionStatus/StaticMethod_GetBusinessTypeStatus.qbl
index dec4ba1..71785cd 100644
--- a/_Main/BL/Type_VersionStatus/StaticMethod_GetBusinessTypeStatus.qbl
+++ b/_Main/BL/Type_VersionStatus/StaticMethod_GetBusinessTypeStatus.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod GetBusinessTypeStatus (
-  GlobalOTDTable owner,
+  GlobalOTDSOP owner,
   String rootversionid
 )
 {
diff --git a/_Main/BL/Type_YuxTest/Attribute_TestBoolean.qbl b/_Main/BL/Type_YuxTest/Attribute_TestBoolean.qbl
deleted file mode 100644
index 7a1e8b7..0000000
--- a/_Main/BL/Type_YuxTest/Attribute_TestBoolean.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute TestBoolean
-{
-  #keys: '3[414384.0.915854691][414384.0.915854690][414384.0.915854692]'
-  ValueType: Boolean
-}
diff --git a/_Main/BL/Type_YuxTest/Attribute_TestDate.qbl b/_Main/BL/Type_YuxTest/Attribute_TestDate.qbl
deleted file mode 100644
index f96d5cd..0000000
--- a/_Main/BL/Type_YuxTest/Attribute_TestDate.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute TestDate
-{
-  #keys: '3[414384.0.915854704][414384.0.915854703][414384.0.915854705]'
-  ValueType: Date
-}
diff --git a/_Main/BL/Type_YuxTest/Attribute_TestDateTime.qbl b/_Main/BL/Type_YuxTest/Attribute_TestDateTime.qbl
deleted file mode 100644
index 4ebf668..0000000
--- a/_Main/BL/Type_YuxTest/Attribute_TestDateTime.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute TestDateTime
-{
-  #keys: '3[414384.0.915854714][414384.0.915854713][414384.0.915854715]'
-  ValueType: DateTime
-}
diff --git a/_Main/BL/Type_YuxTest/Attribute_TestNumber.qbl b/_Main/BL/Type_YuxTest/Attribute_TestNumber.qbl
deleted file mode 100644
index 95e5da0..0000000
--- a/_Main/BL/Type_YuxTest/Attribute_TestNumber.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute TestNumber
-{
-  #keys: '3[414384.0.915854681][414384.0.915854680][414384.0.915854682]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_YuxTest/Attribute_TestReal.qbl b/_Main/BL/Type_YuxTest/Attribute_TestReal.qbl
deleted file mode 100644
index 1852888..0000000
--- a/_Main/BL/Type_YuxTest/Attribute_TestReal.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute TestReal
-{
-  #keys: '3[414384.0.915854668][414384.0.915854667][414384.0.915854669]'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_YuxTest/Attribute_TestString.qbl b/_Main/BL/Type_YuxTest/Attribute_TestString.qbl
deleted file mode 100644
index 5965156..0000000
--- a/_Main/BL/Type_YuxTest/Attribute_TestString.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute TestString
-{
-  #keys: '3[414384.0.915854658][414384.0.915854657][414384.0.915854659]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_YuxTest/StaticMethod_Export.qbl b/_Main/BL/Type_YuxTest/StaticMethod_Export.qbl
deleted file mode 100644
index d6f5aaf..0000000
--- a/_Main/BL/Type_YuxTest/StaticMethod_Export.qbl
+++ /dev/null
@@ -1,85 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod Export (
-  YuxTests toExportList
-) as String
-{
-  TextBody:
-  [*
-    // generate by generate_export_method.py
-    xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?>
-    <table>
-      <name>YuxTest</name>
-    ';
-    convDateToString := DateToString::StandardConverter();
-    convDateToString.SetCustomConversion();
-    convDateToString.CustomFormatString( 'yyyy-MM-dd' );
-    convDateTimeToString := DateTimeToString::StandardConverter();
-    convDateTimeToString.SetCustomConversion();
-    convDateTimeToString.CustomFormatString( 'yyyy-MM-dd HH:mm:ss' );
-    info( "export start" );
-    //---------------------------------------------------------------------------------------------
-    columnStr := "<column><name>娴嬭瘯鏁板瓧</name><type>String</type>";
-    traverse( toExportList, Elements, toExportItem ) {
-      testNumber := toExportItem.TestNumber();
-      cellStr := '<cell value="' + [String]testNumber + '"/>';
-      columnStr := columnStr + cellStr;
-    }
-    columnStr := columnStr + "</column>";
-    xmlTemplate := xmlTemplate + columnStr;
-    //---------------------------------------------------------------------------------------------
-    columnStr := "<column><name>娴嬭瘯灏忔暟</name><type>String</type>";
-    traverse( toExportList, Elements, toExportItem ) {
-      testReal := toExportItem.TestReal();
-      cellStr := '<cell value="' + [String]testReal + '"/>';
-      columnStr := columnStr + cellStr;
-    }
-    columnStr := columnStr + "</column>";
-    xmlTemplate := xmlTemplate + columnStr;
-    //---------------------------------------------------------------------------------------------
-    columnStr := "<column><name>娴嬭瘯瀛楃涓�</name><type>String</type>";
-    traverse( toExportList, Elements, toExportItem ) {
-      testString := toExportItem.TestString();
-      cellStr := '<cell value="' + testString + '"/>';
-      columnStr := columnStr + cellStr;
-    }
-    columnStr := columnStr + "</column>";
-    xmlTemplate := xmlTemplate + columnStr;
-    //---------------------------------------------------------------------------------------------
-    columnStr := "<column><name>娴嬭瘯甯冨皵</name><type>String</type>";
-    traverse( toExportList, Elements, toExportItem ) {
-      testBoolean := toExportItem.TestBoolean();
-      cellStr := '<cell value="' + [String]testBoolean + '"/>';
-      columnStr := columnStr + cellStr;
-    }
-    columnStr := columnStr + "</column>";
-    xmlTemplate := xmlTemplate + columnStr;
-    //---------------------------------------------------------------------------------------------
-    columnStr := "<column><name>娴嬭瘯鏃ユ湡</name><type>String</type>";
-    traverse( toExportList, Elements, toExportItem ) {
-      testDate := toExportItem.TestDate();
-      cellStr := '<cell value="' + ifexpr( testDate = Date::MinDate(), "", convDateToString.Convert( testDate )) + '"/>';
-      columnStr := columnStr + cellStr;
-    }
-    columnStr := columnStr + "</column>";
-    xmlTemplate := xmlTemplate + columnStr;
-    //---------------------------------------------------------------------------------------------
-    columnStr := "<column><name>娴嬭瘯鏃ユ湡鏃堕棿</name><type>String</type>";
-    traverse( toExportList, Elements, toExportItem ) {
-      testDateTime := toExportItem.TestDateTime();
-      cellStr := '<cell value="' + ifexpr( testDateTime = DateTime::MinDateTime(), "", convDateTimeToString.Convert( testDateTime )) + '"/>';
-      columnStr := columnStr + cellStr;
-    }
-    columnStr := columnStr + "</column>";
-    xmlTemplate := xmlTemplate + columnStr;
-    //---------------------------------------------------------------------------------------------
-    xmlTemplate := xmlTemplate + "</table>";
-    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTemplate ) );
-    XLS::SaveTable( tableHandle, OS::TempPath() + "YuxTest.xlsx" );
-    file := OSFile::Construct();
-    file.Open( OS::TempPath() + "YuxTest.xlsx", "Read", true );
-    data := file.ReadBinary()
-    info( "export end" );
-    return data.AsBase64EncodedString();
-  *]
-}
diff --git "a/_Main/BL/Type_YuxTest/StaticMethod_ExportTest\043887.qbl" "b/_Main/BL/Type_YuxTest/StaticMethod_ExportTest\043887.qbl"
deleted file mode 100644
index f77f7ce..0000000
--- "a/_Main/BL/Type_YuxTest/StaticMethod_ExportTest\043887.qbl"
+++ /dev/null
@@ -1,26 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod ExportTest (
-  MPSync parent
-) as String
-{
-  TextBody:
-  [*
-    // yypsybs Sep-25-2023 (created)
-    list := selectset( parent, YuxTest, item, true );
-    if( list.Size() = 0 ) {
-      for( i := 0; i < 100; i := i + 1 ) {
-        parent.YuxTest( relnew, 
-                        TestBoolean := ifexpr( Number::Random( 0, 1 ) = 1, true, false ), 
-                        TestDate :=   ifexpr( Number::Random( 0, 1 ) = 1, Date::MinDate(), Date::ActualDate() ), 
-                        TestDateTime :=   ifexpr( Number::Random( 0, 1 ) = 1,DateTime::MinDateTime(), DateTime::ActualTime() ),
-                        TestNumber :=  Number::Random( 100, 200 ),
-                        TestReal := Real::Random( 10.0, 20.0 ), 
-                        TestString := [String]Number::Random( 1000, 2000 ) 
-                        );
-      }
-    }
-    list := selectset( parent, YuxTest, item, true );
-    return YuxTest::Export( list );
-  *]
-}
diff --git a/_Main/BL/Type_YuxTest/_ROOT_Type_YuxTest.qbl b/_Main/BL/Type_YuxTest/_ROOT_Type_YuxTest.qbl
deleted file mode 100644
index 13ff536..0000000
--- a/_Main/BL/Type_YuxTest/_ROOT_Type_YuxTest.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type YuxTest
-{
-  #keys: '5[414384.0.915854638][414384.0.915854636][0.0.0][414384.0.915854637][414384.0.915854639]'
-  BaseType: Object
-  StructuredName: 'YuxTests'
-}
diff --git a/_Main/Sys/ImgAttr/DataDistributionLog.dme b/_Main/Sys/ImgAttr/DataDistributionLog.dme
new file mode 100644
index 0000000..322f0c9
--- /dev/null
+++ b/_Main/Sys/ImgAttr/DataDistributionLog.dme
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#parent: #root
+TypeDataInterface DataDistributionLog
+{
+  TypeKey: '[414702.1.153774695]'
+  ImageDataMember ImgExecuteStatus
+  {
+    #keys: '1[414702.1.154090897]'
+    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/Response_SelectionScenario_OnSelectionChanged.def b/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Response_SelectionScenario_OnSelectionChanged.def
index c8e9a52..30ca8f6 100644
--- a/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Response_SelectionScenario_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Response_SelectionScenario_OnSelectionChanged.def
@@ -6,9 +6,6 @@
   [*
     // Select a secnario, will also be triggered when scenario is activated via scn mgr list
     
-    macroPlanOld := MacroPlan;
-    info( "SelectionScenario.OnSelectionCHanged  macroPlanOld : " + [String]macroPlanOld.MDSID() )
-    
     ApplicationLibMacroPlanner.SelectScenarioReadOnly( SelectionScenario.Data() );
     
     // Set active scenario on form
@@ -18,9 +15,5 @@
     {
       ApplicationLibMacroPlanner.ComponentMDS_SelectInstance( frm, SelectionScenario.Data() );
     }
-    
-    macroPlanNew := MacroPlan;
-    info( "SelectionScenario.OnSelectionCHanged  macroPlanNew : " + [String]macroPlanOld.MDSID() )
-    ManufactureLTImputation::Transfer( macroPlanOld, macroPlanNew );
   *]
 }
diff --git "a/_Main/UI/MacroPlanner/Component_DialogManufactureLTImputation/Method_New\043221.def" "b/_Main/UI/MacroPlanner/Component_DialogManufactureLTImputation/Method_New\043221.def"
index 0c1477f..514e5a6 100644
--- "a/_Main/UI/MacroPlanner/Component_DialogManufactureLTImputation/Method_New\043221.def"
+++ "b/_Main/UI/MacroPlanner/Component_DialogManufactureLTImputation/Method_New\043221.def"
@@ -2,7 +2,7 @@
 #parent: #root
 Method New (
   internal[GUIComponent] parent,
-  shadow[MacroPlan] owner
+  shadow[GlobalOTDSOP] owner
 ) as shadow[ManufactureLTImputation] id:Method_DialogManufactureLTImputation_New_221
 {
   #keys: '[414384.0.703976688]'
diff --git a/_Main/UI/MacroPlanner/Component_DialogManufactureLTImputation/Method_New.def b/_Main/UI/MacroPlanner/Component_DialogManufactureLTImputation/Method_New.def
index ad061a1..c67f69f 100644
--- a/_Main/UI/MacroPlanner/Component_DialogManufactureLTImputation/Method_New.def
+++ b/_Main/UI/MacroPlanner/Component_DialogManufactureLTImputation/Method_New.def
@@ -2,7 +2,7 @@
 #parent: #root
 Method New (
   internal[GUIComponent] parent,
-  MacroPlan owner
+  GlobalOTDSOP owner
 ) as ManufactureLTImputation id:Method_DialogManufactureLTImputation_New
 {
   #keys: '[414384.0.703976686]'
diff --git a/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Component_ListManufactureLTImputation.def b/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Component_ListManufactureLTImputation.def
index 35cf717..4121997 100644
--- a/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Component_ListManufactureLTImputation.def
+++ b/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Component_ListManufactureLTImputation.def
@@ -66,7 +66,7 @@
       BaseType: 'GUIDataSetLevel'
       Properties:
       [
-        Columns: 'ManufactureLTImputationColumns'
+        Columns: 'MacroPlanColumns'
         DataExtractor: 'GUIDataExtractor689'
         PosX: 35
         PosY: 30
diff --git a/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTImputation_MenuApplyManufactureLTImputation_OnClic.def b/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTImputation_MenuApplyManufactureLTImputation_OnClic.def
index 6be18ef..1fa1b8e 100644
--- a/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTImputation_MenuApplyManufactureLTImputation_OnClic.def
+++ b/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTImputation_MenuApplyManufactureLTImputation_OnClic.def
@@ -8,7 +8,7 @@
   Body:
   [*
     // Delete a ManufactureLTImputation
-    ManufactureLTImputation::Apply( selection );
+    ManufactureLTImputation::Apply( selection, MacroPlan );
   *]
   DefinitionID => /ListManufactureLTImputation/Responsedef_ListManufactureLTImputation_Menu_OnClick
   Initiator: 'MenuApplyManufactureLTImputation'
diff --git a/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTImputation_MenuRefreshManufactureLTImputation_OnCl.def b/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTImputation_MenuRefreshManufactureLTImputation_OnCl.def
index 2d692c9..a9ac93a 100644
--- a/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTImputation_MenuRefreshManufactureLTImputation_OnCl.def
+++ b/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTImputation_MenuRefreshManufactureLTImputation_OnCl.def
@@ -7,7 +7,7 @@
   #keys: '[414384.0.720985420]'
   Body:
   [*
-    ManufactureLTImputation::Refresh( selection );
+    ManufactureLTImputation::Refresh( selection, MacroPlan );
   *]
   CanBindMultiple: false
   DefinitionID => /ListManufactureLTImputation/Responsedef_ListManufactureLTImputation_Menu_OnClick
diff --git "a/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTProcessSection_MenuApplyManufactureLTProcessSe\043444.def" "b/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTProcessSection_MenuApplyManufactureLTProcessSe\043444.def"
index b222947..1561db2 100644
--- "a/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTProcessSection_MenuApplyManufactureLTProcessSe\043444.def"
+++ "b/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTProcessSection_MenuApplyManufactureLTProcessSe\043444.def"
@@ -8,7 +8,7 @@
   Body:
   [*
     // Delete a ManufactureLTProcessSection
-    ManufactureLTProcessSection::Apply( selection );
+    ManufactureLTProcessSection::Apply( selection, MacroPlan );
   *]
   DefinitionID => /ListManufactureLTProcessSection/Responsedef_ListManufactureLTProcessSection_Menu_OnClick
   Initiator: 'MenuApplyManufactureLTProcessSection'
diff --git a/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTProcessSection_MenuRefreshManufactureLTProcessSect.def b/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTProcessSection_MenuRefreshManufactureLTProcessSect.def
index aeb0cc1..16f0493 100644
--- a/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTProcessSection_MenuRefreshManufactureLTProcessSect.def
+++ b/_Main/UI/MacroPlanner/Component_FormManufactureLTImputation/Response_ListManufactureLTProcessSection_MenuRefreshManufactureLTProcessSect.def
@@ -7,7 +7,7 @@
   #keys: '[414384.0.720985521]'
   Body:
   [*
-    ManufactureLTProcessSection::Refresh( selection );
+    ManufactureLTProcessSection::Refresh( selection, MacroPlan );
   *]
   CanBindMultiple: false
   DefinitionID => /ListManufactureLTProcessSection/Responsedef_ListManufactureLTProcessSection_Menu_OnClick
diff --git a/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def b/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def
index 5d184e4..4209271 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 );
+    CapacityAllocationResults::Test( MacroPlan, GlobalOTDTable );
   *]
   CanBindMultiple: false
   DefinitionID: 'Responsedef_GUIButtonBase_OnClick'
diff --git a/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_ListScenario_MenuFolderNewMacroPlan_OnClick.def b/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_ListScenario_MenuFolderNewMacroPlan_OnClick.def
index 86bb0cb..f68ce19 100644
--- a/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_ListScenario_MenuFolderNewMacroPlan_OnClick.def
+++ b/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_ListScenario_MenuFolderNewMacroPlan_OnClick.def
@@ -8,11 +8,6 @@
   [*
     // To be derived
     
-    macroPlanOld := MacroPlan;
-    if ( not isnull( macroPlanOld ) ) {
-        info( "ListScrnario.MenuFolderNewMacroPlan.OnClick  macroPlanOld : " + [String]macroPlanOld.MDSID() );
-    }
-    
     // Create a new MP Scenario
     dlg := construct( ScenarioManager_DialogCreateEditMPScenario );
     
@@ -39,12 +34,6 @@
         ApplicationLibMacroPlanner.LaunchInitializationWizard( MacroPlan );
       }
     }
-    
-    macroPlanNew := MacroPlan;
-    if ( not isnull( macroPlanNew ) ) {
-        info( "ListScrnario.MenuFolderNewMacroPlan.OnClick  macroPlanNew : " + [String]macroPlanNew.MDSID() );
-    }
-    ManufactureLTImputation::Transfer( macroPlanOld, macroPlanNew );
   *]
   Precondition:
   [*
diff --git a/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_ListScenario_MenuScenarioNewMacroPlan_OnClick.def b/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_ListScenario_MenuScenarioNewMacroPlan_OnClick.def
index 4b2b485..93eb901 100644
--- a/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_ListScenario_MenuScenarioNewMacroPlan_OnClick.def
+++ b/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_ListScenario_MenuScenarioNewMacroPlan_OnClick.def
@@ -8,12 +8,6 @@
   [*
     // To be derived - ScenarioMP
     
-    macroPlanOld := MacroPlan;
-    if ( not isnull( macroPlanOld ) ) {
-        info( "ListScrnario.MenuScenarioNewMacroPlan.OnClick  macroPlanOld : " + [String]macroPlanOld.MDSID() );
-    }
-    
-    
     // Create a new Scenario
     dlg := construct( ScenarioManager_DialogCreateEditMPScenario );
     parent := selection.Element( 0 ).Parent();
@@ -31,12 +25,6 @@
         ApplicationLibMacroPlanner.LaunchInitializationWizard( MacroPlan );
       }
     }
-    
-    macroPlanNew := MacroPlan;
-    if ( not isnull( macroPlanNew ) ) {
-        info( "ListScrnario.MenuScenarioNewMacroPlan.OnClick  macroPlanNew : " + [String]macroPlanNew.MDSID() );
-    }
-    ManufactureLTImputation::Transfer( macroPlanOld, macroPlanNew );
   *]
   Precondition:
   [*
diff --git a/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_ListScenario_MenuScenarioSelect_OnClick.def b/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_ListScenario_MenuScenarioSelect_OnClick.def
index 4395e1a..c47dc33 100644
--- a/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_ListScenario_MenuScenarioSelect_OnClick.def
+++ b/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_ListScenario_MenuScenarioSelect_OnClick.def
@@ -8,17 +8,7 @@
   [*
     // Select a scenario
     
-    macroPlanOld := MacroPlan;
-    if ( not isnull( macroPlanOld ) ) {
-        info( "ListScrnario.MenuScenarioSelect.OnClick  macroPlanOld : " + [String]macroPlanOld.MDSID() );
-    }
     Form.SelectScenario( selection );
-    
-    macroPlanNew := MacroPlan;
-    if ( not isnull( macroPlanNew ) ) {
-        info( "ListScrnario.MenuScenarioSelect.OnClick  macroPlanNew : " + [String]macroPlanNew.MDSID() );
-    }
-    ManufactureLTImputation::Transfer( macroPlanOld, macroPlanNew );
   *]
   Precondition:
   [*
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupScenarioSelection.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupScenarioSelection.def
new file mode 100644
index 0000000..c8a46d0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupScenarioSelection.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component ActionBarGroupScenarioSelection #extension
+{
+  Children:
+  [
+    #child: PanelScenarioSelection
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioSelection.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioSelection.def
new file mode 100644
index 0000000..08ac6ea
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioSelection.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component ActionBarPageScenarioSelection #extension
+{
+  Children:
+  [
+    #child: ActionBarGroupScenarioSelection
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_PanelScenarioSelection.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_PanelScenarioSelection.def
new file mode 100644
index 0000000..bd276b6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_PanelScenarioSelection.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+Component PanelScenarioSelection #extension
+{
+  Children:
+  [
+    Component DropDownListScenario id:DropDownListScenario_886 #extension
+    {
+      Children:
+      [
+        Component DataExtractorScenarios id:DataExtractorScenarios_484 #extension
+        {
+          Properties:
+          [
+            FilterArguments: 'availablescenarios:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderAvailableScenarios'
+            FixedFilter: 'object.IsLoaded() and not object.IsDeleted() and availablescenarios.Find( object ) >= 0'
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def
index 9dd6fd4..05a14f4 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def
@@ -23,7 +23,7 @@
       Properties:
       [
         Image: 'PIG'
-        Taborder: 5
+        Taborder: 6
         Title: '骞村害浜ч攢澶嶇洏'
       ]
     }
@@ -56,7 +56,7 @@
       Properties:
       [
         Separator: true
-        Taborder: 4
+        Taborder: 5
       ]
     }
     Component mnDockingERPForPRRelease
@@ -70,6 +70,17 @@
         Title: '瀵规帴ERP杩涜PR閲婃斁'
       ]
     }
+    Component mnDataDistribution
+    {
+      #keys: '[414702.1.155392180]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PALM_TREE'
+        Taborder: 4
+        Title: '鏁版嵁鍒嗗彂'
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_DataHolderCurrentUser_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_DataHolderCurrentUser_OnDataChanged.def
new file mode 100644
index 0000000..7f368bd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_DataHolderCurrentUser_OnDataChanged.def
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+#parent: DataHolderCurrentUser
+Response OnDataChanged () id:Response_TIANMA_JITUAN_ApplicationMacroPlanner_DataHolderCurrentUser_OnDataChanged
+{
+  #keys: '[414702.1.131671499]'
+  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_cmTestAttempt_mnDataDistribution_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnDataDistribution_OnClick.def
new file mode 100644
index 0000000..bd5095a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnDataDistribution_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: cmTestAttempt/mnDataDistribution
+Response OnClick () id:Response_TIANMA_JITUAN_cmTestAttempt_mnDataDistribution_OnClick
+{
+  #keys: '[414702.1.156607596]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "鏁版嵁鍒嗗彂", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
index 4f48b76..49e8c72 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
@@ -14,6 +14,7 @@
         #child: applicationDevelopmentActionBarPageDef_1
         #child: ActionBarPagePlan
         #child: ActionBarPageInventory
+        #child: ActionBarPageScenarioSelection
       ]
     }
     Component DataHolderCapacityAndSaleBudgeFilterItem
@@ -66,5 +67,18 @@
         Taborder: 44
       ]
     }
+    Component DataHolderAvailableScenarios
+    {
+      #keys: '[414702.1.131690403]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[ScenarioNode]*'
+      Properties:
+      [
+        Taborder: 45
+      ]
+    }
+    Component DataHolderCurrentUser #extension
+    {
+    }
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Component_pnlContent.def
index f885a86..2e2c2fc 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Component_pnlContent.def
@@ -13,7 +13,7 @@
       [
         DataBinding: 'DataHolderDialogData.Data.PanelMaterialCode'
         Label: '闈㈡澘鐗╂枡缂栫爜'
-        Taborder: 0
+        Taborder: 2
       ]
     }
     Component efModuleMaterialCode
@@ -24,7 +24,7 @@
       [
         DataBinding: 'DataHolderDialogData.Data.ModuleMaterialCode'
         Label: '妯℃澘浜ф垚鍝両D'
-        Taborder: 1
+        Taborder: 0
       ]
     }
     Component efDivision
@@ -35,7 +35,7 @@
       [
         DataBinding: 'DataHolderDialogData.Data.Division'
         Label: '浜嬩笟閮�'
-        Taborder: 2
+        Taborder: 3
       ]
     }
     Component efStockingPointID
@@ -46,7 +46,7 @@
       [
         DataBinding: 'DataHolderDialogData.Data.StockingPointID'
         Label: '妯$粍浜ф垚鍝佸簱瀛樼偣ID'
-        Taborder: 3
+        Taborder: 1
       ]
     }
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Method_New.def
index fa8fb18..700f5cb 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Method_New.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Method_New.def
@@ -5,7 +5,7 @@
   #keys: '[414702.0.375317354]'
   Body:
   [*
-    capacityAllocationResultsRuleConfiguration := GlobalOTDTable.CapacityAllocationResultsRuleConfiguration( relshadow );
+    capacityAllocationResultsRuleConfiguration := GlobalOTDSOP.CapacityAllocationResultsRuleConfiguration( relshadow );
     
     DataHolderDialogData.Data( &capacityAllocationResultsRuleConfiguration );
     
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Response_pnlActions_btnOk_OnClick.def
index 336e9a8..b2227a1 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Response_pnlActions_btnOk_OnClick.def
@@ -12,18 +12,20 @@
       
       data := DataHolderDialogData.Data().WrappedInstance();
       if ( isnull( data ) ) {
-        GlobalOTDTable.CapacityAllocationResultsRuleConfiguration( relnew,
-                                                                   PanelMaterialCode  := efPanelMaterialCode.Text(),
-                                                                   ModuleMaterialCode := efModuleMaterialCode.Text(),
-                                                                   Division           := efDivision.Text(),
-                                                                   StockingPointID    := efStockingPointID.Text()
-                                                                  );
+        GlobalOTDSOP.CapacityAllocationResultsRuleConfiguration( relnew,
+                                                                 PanelMaterialCode  := efPanelMaterialCode.Text(),
+                                                                 ModuleMaterialCode := efModuleMaterialCode.Text(),
+                                                                 Division           := efDivision.Text(),
+                                                                 StockingPointID    := efStockingPointID.Text()
+                                                                );
       } else {
-        DataHolderDialogData.Data().PanelMaterialCode( efPanelMaterialCode.Text() );
-        DataHolderDialogData.Data().ModuleMaterialCode( efModuleMaterialCode.Text() );
-        DataHolderDialogData.Data().Division( efDivision.Text() );
-        DataHolderDialogData.Data().StockingPointID( efStockingPointID.Text() );
-        DataHolderDialogData.Data().Commit();
+        data.Delete();
+        GlobalOTDSOP.CapacityAllocationResultsRuleConfiguration( relnew,
+                                                                 PanelMaterialCode  := efPanelMaterialCode.Text(),
+                                                                 ModuleMaterialCode := efModuleMaterialCode.Text(),
+                                                                 Division           := efDivision.Text(),
+                                                                 StockingPointID    := efStockingPointID.Text()
+                                                                );
       }
       
       
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditIssueWorkOrder/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditIssueWorkOrder/Component_pnlContent.def
index 3a0d33a..92b9bf4 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditIssueWorkOrder/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditIssueWorkOrder/Component_pnlContent.def
@@ -77,8 +77,8 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'GlobalOTDTable'
-            Source: 'GlobalOTDTable'
+            DataType: 'GlobalOTDSOP'
+            Source: 'GlobalOTDSOP'
             Taborder: 0
             Transformation: 'WorkOrderType'
           ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditIssueWorkOrder/Response_pnlContent_ddlWorkOrderType_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditIssueWorkOrder/Response_pnlContent_ddlWorkOrderType_OnCreated.def
index 6e33df9..56b4b00 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditIssueWorkOrder/Response_pnlContent_ddlWorkOrderType_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditIssueWorkOrder/Response_pnlContent_ddlWorkOrderType_OnCreated.def
@@ -10,11 +10,11 @@
     Body:
     [*
       if ( not isnull( DataHolderDialogData.Data() ) ) {
-        targetWorkOrderType := select( GlobalOTDTable, WorkOrderType, tempWOT, tempWOT.TypeName() = DataHolderDialogData.Data().WorkOrderType() );
+        targetWorkOrderType := select( GlobalOTDSOP, WorkOrderType, tempWOT, tempWOT.TypeName() = DataHolderDialogData.Data().WorkOrderType() );
         if ( not isnull( targetWorkOrderType ) ) {
           this.Data( targetWorkOrderType );
         } else {
-          this.Data( select( GlobalOTDTable, WorkOrderType, tempWOT, true ) );
+          this.Data( select( GlobalOTDSOP, WorkOrderType, tempWOT, true ) );
         }
       }
     *]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def"
index 158887f..687eea6 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def"
@@ -39,18 +39,6 @@
         Taborder: 3
       ]
     }
-    Component dropDownStringListGeneral
-    {
-      #keys: '[414384.0.692930324]'
-      BaseType: 'WebDropDownStringList'
-      Properties:
-      [
-        AllowEmpty: true
-        DataBinding: 'DataHolderDialogData.Data.ScenarioName'
-        Label: 'Scenario Name'
-        Taborder: 4
-      ]
-    }
     Component CheckboxIsCreateNewVersion
     {
       #keys: '[412960.0.157150313]'
@@ -62,5 +50,34 @@
         Taborder: 7
       ]
     }
+    Component DropDownListGeneral
+    {
+      #keys: '[412960.0.324971441]'
+      BaseType: 'WebDropDownList'
+      Databinding: 'BusinessType'
+      Children:
+      [
+        Component DataExtractorGeneral
+        {
+          #keys: '[412960.0.324971443]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'GlobalOTDTable'
+            Description: '浼犲叆Business Type绫昏繘Dosync'
+            Source: 'GlobalOTDTable'
+            Taborder: 0
+            Transformation: 'BusinessType'
+          ]
+        }
+      ]
+      Properties:
+      [
+        AllowEmpty: true
+        DisplayField: 'ScenarioName'
+        Label: 'Scenario Name'
+        Taborder: 4
+      ]
+    }
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_CopyScenario.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_CopyScenario.def
index c0a6fa5..40534a1 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_CopyScenario.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_CopyScenario.def
@@ -20,7 +20,7 @@
     // do not distribute
     DataHolderDialogData.Data().EnableSync( false );
     checkboxEnableSync.Visible( false );
-    dropDownStringListGeneral.Visible( false );
+    DropDownListGeneral.Visible( false );
     checkboxIsKeyProduct.Visible( false );
     checkboxCreatePurchaseSupplyProduct.Visible( false );
     
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
index 66ea53b..d2aa450 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
@@ -6,7 +6,7 @@
   [*
     // Disabled button to prevent the possibility of multiple firing
     
-    macroPlanOld := MacroPlan;
+    //macroPlanOld := MacroPlan;
     
     btnOK.Enabled( false, '' )
     
@@ -19,13 +19,14 @@
     
     // New version
     globalotdtable := GlobalOTDTable;
+    globalotdsop := GlobalOTDSOP;
     testbusinesstype := "闆嗗洟";
     if( data.IsCreateNewVersion() ){
-      VersionControl::CreateNewSceneVersion( globalotdtable, testbusinesstype );
+      VersionControl::CreateNewSceneVersion( globalotdsop, testbusinesstype );
       }else{
-        VersionControl::CopyVersion( globalotdtable, testbusinesstype );
+        VersionControl::CopyVersion( globalotdsop, testbusinesstype );
         }
-    versionname := VersionControl::GetVersionInfo( globalotdtable, testbusinesstype ).Element( 3 );
+    versionname := VersionControl::GetVersionInfo( globalotdsop, testbusinesstype ).Element( 3 );
     
     // Get Version Name
     if( data.Name() = "" ){
@@ -33,10 +34,11 @@
       }
     
     // Get Business Type from Scenario Name
-    businesstype := select( globalotdtable, 
-                            BusinessType, 
-                            b, 
-                            b.ScenarioName()=data.ScenarioName() ).BusinessTypeName();
+    businesstype := guard( select( globalotdtable, 
+                                   BusinessType, 
+                                   b, 
+                                   b.ScenarioName()=data.ScenarioName() ).BusinessTypeName(), 
+                           "" );
     data.BusinessType( businesstype );
     
     // Copy scenario
@@ -110,7 +112,7 @@
     }
     
     macroPlanNew := MacroPlan;
-    ManufactureLTImputation::Transfer( macroPlanOld, macroPlanNew );
+    //ManufactureLTImputation::Transfer( macroPlanOld, macroPlanNew );
     
     // sync data
     if( data.EnableSync() ) {
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_TIANMA_JITUAN_PanelGeneral_549_checkboxEnableSync_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_TIANMA_JITUAN_PanelGeneral_549_checkboxEnableSync_OnChanged.def
index 82006b6..1221c3a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_TIANMA_JITUAN_PanelGeneral_549_checkboxEnableSync_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_TIANMA_JITUAN_PanelGeneral_549_checkboxEnableSync_OnChanged.def
@@ -10,7 +10,7 @@
   {
     Body:
     [*
-      dropDownStringListGeneral.Visible(checkboxEnableSync.Checked());
+      DropDownListGeneral.Visible(checkboxEnableSync.Checked());
       checkboxIsKeyProduct.Visible(checkboxEnableSync.Checked());
       checkboxCreatePurchaseSupplyProduct.Visible(checkboxEnableSync.Checked());
     *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Method_NewWorkOrderType.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Method_NewWorkOrderType.def
index d805656..043ce0c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Method_NewWorkOrderType.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Method_NewWorkOrderType.def
@@ -7,7 +7,7 @@
   #keys: '[414702.0.145493830]'
   Body:
   [*
-    workOrderType := GlobalOTDTable.WorkOrderType( relshadow );
+    workOrderType := GlobalOTDSOP.WorkOrderType( relshadow );
     
     DataHolderForm.Data( formWorkOrderType );
     
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Response_pnlActions_btnOk_OnClick.def
index e5f4159..2dd7136 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Response_pnlActions_btnOk_OnClick.def
@@ -12,8 +12,8 @@
     id := efID.Text();
     typeName := efTypeName.Text();
     
-    idExists := exists( GlobalOTDTable, WorkOrderType, tempWOT, tempWOT.ID() = id and tempWOT.ID() <> data.ID() );
-    typeNameExists := exists( GlobalOTDTable, WorkOrderType, tempWOT, tempWOT.TypeName() = typeName and tempWOT.TypeName() <> data.TypeName() );
+    idExists := exists( GlobalOTDSOP, WorkOrderType, tempWOT, tempWOT.ID() = id and tempWOT.ID() <> data.ID() );
+    typeNameExists := exists( GlobalOTDSOP, WorkOrderType, tempWOT, tempWOT.TypeName() = typeName and tempWOT.TypeName() <> data.TypeName() );
     
     if ( idExists or typeNameExists ) {
       feedback := "ID鎴栫被鍨嬪悕绉伴噸澶�";
@@ -35,7 +35,7 @@
       data := DataHolderDialogData.Data();
       workOrderType := data.WrappedInstance();
       if ( isnull( workOrderType ) ) {
-        GlobalOTDTable.WorkOrderType( relnew, ID := data.ID(), TypeName := data.TypeName() );
+        GlobalOTDSOP.WorkOrderType( relnew, ID := data.ID(), TypeName := data.TypeName() );
       } else {
         workOrderType.ID( data.ID() );
         workOrderType.TypeName( data.TypeName() );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Component_pnlActions.def
new file mode 100644
index 0000000..1675d55
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[414702.1.84941726]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[414702.1.84941730]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[414702.1.84941732]'
+      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_DialogDataDistribution/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Component_pnlContent.def
new file mode 100644
index 0000000..5c05df7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Component_pnlContent.def
@@ -0,0 +1,58 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[414702.1.84941724]'
+  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]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        DataBinding: 'DataHolderScenario.Data.IsKeyProduct'
+        Label: 'S&OP'
+        Taborder: 1
+      ]
+    }
+    Component checkboxCreatePurchaseSupplyProduct id:checkboxCreatePurchaseSupplyProduct_102
+    {
+      #keys: '[414702.1.84942148]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        DataBinding: 'DataHolderScenario.Data.CreatePurchaseSupplyMaterial'
+        Label: 'CreatePurchase'
+        Taborder: 2
+      ]
+    }
+    Component CheckboxIsCreateNewVersion id:CheckboxIsCreateNewVersion_653
+    {
+      #keys: '[414702.1.84942205]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'Create a new version'
+        Taborder: 3
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Method_DataDistribution.def b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Method_DataDistribution.def
new file mode 100644
index 0000000..c72dc11
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Method_DataDistribution.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Method DataDistribution (
+  Scenario scenario
+) id:Method_DialogDataDistribution_DataDistribution
+{
+  #keys: '[414702.1.87530593]'
+  Body:
+  [*
+    DataHolderScenario.Data( scenario );
+    
+    dropDownStringListGeneral.Strings( GlobalOTDTable::GetBusnessStrings( GlobalOTDTable ) );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..c9c2e6a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/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: '[414702.1.84941736]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..fcba155
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,50 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[414702.1.84941735]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    flag := not isnull( GlobalOTDTable ) and not isnull( GlobalOTDLog );
+    
+    activeScenario := DataHolderActiveScenario.Data();
+    currentScenario := DataHolderScenario.Data();
+    
+    if ( activeScenario = currentScenario ) {
+      flag := false;
+      feedback := "鏃犳硶瀵瑰綋鍓嶉�変腑鍦烘櫙杩涜鍒嗗彂";
+    }
+    
+    isExists := exists( GlobalOTDLog, DataDistributionLog, tempDD, tempDD.ExecuteStatus() = "Running" and tempDD.MacroPlanMDSID() = currentScenario.DatasetMDSID() );
+    if ( flag and isExists ) {
+      flag := false;
+      feedback := "褰撳墠鍦烘櫙姝e湪杩涜鍒嗗彂";
+    }
+    
+    return flag;
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      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(),
+                          checkboxIsKeyProduct.Checked(), 
+                          checkboxCreatePurchaseSupplyProduct.Checked(),
+                          GlobalOTDTable );
+      
+      Form.Close();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/_ROOT_Component_DialogDataDistribution.def b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/_ROOT_Component_DialogDataDistribution.def
new file mode 100644
index 0000000..db6e245
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/_ROOT_Component_DialogDataDistribution.def
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogDataDistribution
+{
+  #keys: '[414702.1.84941722]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+    Component DataHolderScenario
+    {
+      #keys: '[414702.1.89308159]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'Scenario'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Image: 'CAKE2'
+    Padding: 'false'
+    Title: '鏁版嵁鍒嗗彂'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
index 34b2cb2..3314383 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
@@ -24,6 +24,7 @@
       data := guard( DataHolderFillingCapacityOrder.Data().WrappedInstance(), null( FillingCapacityOrder ) );;
       if ( isnull( data ) ) {
         MacroPlan.FillingCapacityOrder( relnew,
+                                        VerNo              := guard( DataHolderActiveScenario.Data().Name(), "" ),
                                         ID                 := OS::GenerateGUIDAsString(),
                                         ProductID          := guard( ddlProduct_MP.Data().ID(), "null" ),
                                         BusinessType       := guard( ddlBusinessType.Data().BusinessTypeName(), "null" ),
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Component_pnlContent.def
index 3c4dba9..71af1e8 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Component_pnlContent.def
@@ -12,6 +12,7 @@
       Properties:
       [
         DataBinding: 'DataHolderFilling.Data.VerNo'
+        Enabled: false
         Label: '鐗堟湰鍙�'
         Taborder: 0
       ]
@@ -24,7 +25,7 @@
       [
         DataBinding: 'DataHolderFilling.Data.BusinessType'
         Enabled: false
-        Label: 'BusinessType'
+        Label: '浜嬩笟閮�'
         ReadOnly: true
         Taborder: 1
       ]
@@ -37,7 +38,7 @@
       [
         DataBinding: 'DataHolderFilling.Data.Customer'
         Enabled: false
-        Label: 'Customer'
+        Label: '瀹㈡埛鍚嶇О'
         ReadOnly: true
         Taborder: 2
       ]
@@ -49,7 +50,7 @@
       Properties:
       [
         DataBinding: 'DataHolderFilling.Data.SalesAmount'
-        Label: 'SalesAmount'
+        Label: '濉骇鏁伴噺'
         Taborder: 3
       ]
     }
@@ -60,7 +61,7 @@
       Properties:
       [
         DataBinding: 'DataHolderFilling.Data.DemandDate'
-        Label: 'Demand Date'
+        Label: '闇�姹傛椂闂�'
         ReadOnly: true
         Taborder: 4
       ]
@@ -72,10 +73,21 @@
       Properties:
       [
         DataBinding: 'DataHolderFilling.Data.ForecastDemandDate'
-        Label: 'Forecast Demand Date'
+        Label: '闇�姹傞娴嬫椂闂�'
         Taborder: 5
       ]
     }
+    Component ddslOrderType id:ddslOrderType_944
+    {
+      #keys: '[414702.1.71083523]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: '璁㈠崟绫诲瀷'
+        Strings: '鍙嶇;鎺堟潈'
+        Taborder: 6
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Method_ClickBtnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Method_ClickBtnOk.def
index 6519f81..f696a84 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Method_ClickBtnOk.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Method_ClickBtnOk.def
@@ -7,15 +7,15 @@
   [*
     // Disabled button to prevent the possibility of multiple firing
     
-    btnOk.Enabled(false,'');
+    //btnOk.Enabled(false,'');
     
     // OnOk
     this.ApplyChanges();
-    DataHolderFilling.Data().Commit();
+    //DataHolderFilling.Data().Commit();
     
-    fillingData := DataHolderFilling.Data();
+    //fillingData := DataHolderFilling.Data();
     
-    CustomerAndForecastOrder::CreateFillingCapacityOrder( MacroPlan, fillingData.WrappedInstance());
+    //CustomerAndForecastOrder::CreateFillingCapacityOrder( MacroPlan, fillingData.WrappedInstance());
     
     //if( not isnull( DataHolderForm.Data() ) )
     //{
@@ -23,6 +23,15 @@
     //  DataHolderForm.Data().ListAssumptions().SelectByKey( DataHolderDialogData.Data().WrappedInstance().Key() );
     //}
     
+    FillingCapacityOrder::CreateFillingCapacityOrder( MacroPlan, 
+                                                      DataHolderFilling.Data().OrderID(),
+                                                      [Real]edtSalesAmount.Text(),
+                                                      dsDemandDate.Date(),
+                                                      dsForecastDemandDate.Date(),
+                                                      ddslOrderType.Text(),
+                                                      DataHolderFilling.Data().VerNo()
+                                                     );
+    
     this.Close();
   *]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Response_pnlActions_btnOk_OnClick.def
index 4a485e4..f8f3a5d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Response_pnlActions_btnOk_OnClick.def
@@ -6,10 +6,14 @@
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
   [*
-    verNo := efVerNo.Text();
-    salesAmount := edtSalesAmount.Text();
-    feedback := Translations::FilllingCapacity_ValidateInput();
-    return not salesAmount = '' and not verNo = '';
+    //verNo := efVerNo.Text();
+    //salesAmount := edtSalesAmount.Text();
+    //feedback := Translations::FilllingCapacity_ValidateInput();
+    //return not salesAmount = '' and not verNo = '';
+    
+    flag := guard( [Real]edtSalesAmount.Text(), 0 ) > 0;
+    
+    return flag;
   *]
   QuillAction
   {
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlActions_btnOk_OnClick.def
index 9a51849..f341bac 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlActions_btnOk_OnClick.def
@@ -15,7 +15,7 @@
       Form.ApplyChanges();
       try {
         macroPlan := ExternalMDSEditor::MacroPlan( ddlSelectVersion.Data().DatasetName() ).AsMacroPlan();
-        GlobalOTDTable.SynchronizeOrders( macroPlan );
+        GlobalOTDSOP.SynchronizeOrders( macroPlan );
       
         Form.Close();
       
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblAutomotiveElectronics_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblAutomotiveElectronics_OnCreated.def
index 94fd670..fda9845 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblAutomotiveElectronics_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblAutomotiveElectronics_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "姹借溅鐢靛瓙" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "姹借溅鐢靛瓙" );
       this.Text( guard( targetPanelMaterialAll.ReleaseDate(), "鏃犳暟鎹�" ) );
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblIT_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblIT_OnCreated.def
index 1633488..45f90a4 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblIT_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblIT_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "IT" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "IT" );
       this.Text( guard( targetPanelMaterialAll.ReleaseDate(), "鏃犳暟鎹�" ) );
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblMaterialVehicle_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblMaterialVehicle_OnCreated.def
index 74d3b84..8bcbdf5 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblMaterialVehicle_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblMaterialVehicle_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "杞﹁浇" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "杞﹁浇" );
       this.Text( guard( targetPanelMaterialAll.ReleaseDate(), "鏃犳暟鎹�" ) );
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblSpecializedDisplay_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblSpecializedDisplay_OnCreated.def
index a40ec23..f41fb03 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblSpecializedDisplay_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblSpecializedDisplay_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "涓撴樉" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "涓撴樉" );
       this.Text( guard( targetPanelMaterialAll.ReleaseDate(), "鏃犳暟鎹�" ) );
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblSportsHealth_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblSportsHealth_OnCreated.def
index 9a0ebc8..f18a133 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblSportsHealth_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblSportsHealth_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "杩愬姩鍋ュ悍" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "杩愬姩鍋ュ悍" );
       this.Text( guard( targetPanelMaterialAll.ReleaseDate(), "鏃犳暟鎹�" ) );
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblTM17_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblTM17_OnCreated.def
index f75df01..a05ee5e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblTM17_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblTM17_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "TM17" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "TM17" );
       this.Text( guard( targetPanelMaterialAll.ReleaseDate(), "鏃犳暟鎹�" ) );
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblTM18_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblTM18_OnCreated.def
index ac39931..622ed3d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblTM18_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblTM18_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "TM18" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "TM18" );
       this.Text( guard( targetPanelMaterialAll.ReleaseDate(), "鏃犳暟鎹�" ) );
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblTianHua_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblTianHua_OnCreated.def
index 795f493..478080e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblTianHua_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblTianHua_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "澶╁崕" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "澶╁崕" );
       this.Text( guard( targetPanelMaterialAll.ReleaseDate(), "鏃犳暟鎹�" ) );
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuCall_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuCall_OnClick.def
index 8411a9a..30d9313 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuCall_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuCall_OnClick.def
@@ -19,10 +19,10 @@
       productIdsOver14Days := PRData::ProductIdOver14Days( selection );
       if( productIdsOver14Days <> "" ) {
         if( WebMessageBox::Question( "璇ユ壒娆′腑鐨勭墿鏂欏彿" + productIdsOver14Days + "璁㈠崟搴旇鍦�2鍛ㄥ悗閲婃斁锛岃纭鏄惁鐜板湪閲婃斁锛燂紙宸查噴鏀剧殑灏嗚璺宠繃锛�" ) = 0 ) {
-          PRData::DoCall( GlobalOTDTable, selection, ApplicationMacroPlanner.GetUserName() );
+          PRData::DoCall( GlobalOTDTable, GlobalOTDSOP, selection, ApplicationMacroPlanner.GetUserName() );
         }
       } else if( WebMessageBox::Question( "鏄惁鍙戦�侀�変腑鐨勬暟鎹紵锛堝凡閲婃斁鐨勫皢琚烦杩囷級" ) = 0 ) {
-        PRData::DoCall( GlobalOTDTable, selection, ApplicationMacroPlanner.GetUserName() );
+        PRData::DoCall( GlobalOTDTable, GlobalOTDSOP, selection, ApplicationMacroPlanner.GetUserName() );
       }
     *]
     GroupServerCalls: false
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick\043623.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick\043623.def"
index 6e0a043..99a850c 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick\043623.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick\043623.def"
@@ -12,7 +12,7 @@
   {
     Body:
     [*
-      info( selection.PrintCall( GlobalOTDTable, ApplicationMacroPlanner.GetUserName() ) )
+      info( selection.PrintCall( GlobalOTDTable, GlobalOTDSOP, ApplicationMacroPlanner.GetUserName() ) )
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def
index 69a46cd..b9d8b6e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def
@@ -13,8 +13,7 @@
   {
     Body:
     [*
-      tableBinaryData := PRData::ExportTheFileStream( MacroPlan ).AsBinaryData();
-      Application.Download( "PRData.xlsx", tableBinaryData );
+      Application.Download( "PRData.xlsx", PRData::Export( MacroPlan ) );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonLoad_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonLoad_OnClick.def
index 7962175..d3a5dda 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonLoad_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonLoad_OnClick.def
@@ -14,7 +14,7 @@
     Body:
     [*
       MacroPlan.PRData( relflush );
-      PRData::FromSupplyPlanning( GlobalOTDTable, MacroPlan, "", ApplicationMacroPlanner.GetUserName() );
+      PRData::FromSupplyPlanning( GlobalOTDTable, GlobalOTDSOP, MacroPlan, "", ApplicationMacroPlanner.GetUserName() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonSendPR_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonSendPR_OnClick.def
index c885be4..a3ef10a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonSendPR_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonSendPR_OnClick.def
@@ -16,10 +16,10 @@
       productIdsOver14Days := PRData::ProductIdOver14Days( DataHolderChecked.Data() );
       if( productIdsOver14Days <> "" ) {
         if( WebMessageBox::Question( "璇ユ壒娆′腑鐨勭墿鏂欏彿" + productIdsOver14Days + "璁㈠崟搴旇鍦�2鍛ㄥ悗閲婃斁锛岃纭鏄惁鐜板湪閲婃斁锛燂紙宸查噴鏀剧殑灏嗚璺宠繃锛�" ) = 0 ) {
-          PRData::DoCall( GlobalOTDTable, DataHolderChecked.Data(), ApplicationMacroPlanner.GetUserName() );
+          PRData::DoCall( GlobalOTDTable, GlobalOTDSOP, DataHolderChecked.Data(), ApplicationMacroPlanner.GetUserName() );
         }
       } else if( WebMessageBox::Question( "鏄惁鍙戦�侀�変腑鐨勬暟鎹紵锛堝凡閲婃斁鐨勫皢琚烦杩囷級" ) = 0 ) {
-        PRData::DoCall( GlobalOTDTable, DataHolderChecked.Data(), ApplicationMacroPlanner.GetUserName() );
+        PRData::DoCall( GlobalOTDTable, GlobalOTDSOP, DataHolderChecked.Data(), ApplicationMacroPlanner.GetUserName() );
       }
     *]
     GroupServerCalls: false
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_ButtonGenerateCapacityAllocationR\04339.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_ButtonGenerateCapacityAllocationR\04339.def"
index 6a4fd16..d3833b6 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_ButtonGenerateCapacityAllocationR\04339.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_ButtonGenerateCapacityAllocationR\04339.def"
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      CapacityAllocationResults::CreateDate( GlobalOTDTable, MacroPlan, DataHolderActiveScenario.Data() );
+      CapacityAllocationResults::CreateDate( GlobalOTDSOP, MacroPlan, DataHolderActiveScenario.Data() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_ListCapacityAllocationResultsRuleConfiguration.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_ListCapacityAllocationResultsRuleConfiguration.def
index add7c86..7336146 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_ListCapacityAllocationResultsRuleConfiguration.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_ListCapacityAllocationResultsRuleConfiguration.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'CapacityAllocationResultsRuleConfiguration'
       ]
@@ -28,7 +28,7 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PanelMaterialCode","title":"PanelMaterialCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PanelMaterialCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ModuleMaterialCode","title":"ModuleMaterialCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ModuleMaterialCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Division","title":"Division","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Division"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}}]'
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ModuleMaterialCode","title":"ModuleMaterialCode","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ModuleMaterialCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PanelMaterialCode","title":"PanelMaterialCode","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"PanelMaterialCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Division","title":"Division","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Division"}}]'
         ContextMenu: 'listContextMenuCapacityAllocationResultsRuleConfiguration'
         Taborder: 2
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_listContextMenuCapacityAllocationResultsRuleConfiguration.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_listContextMenuCapacityAllocationResultsRuleConfiguration.def
index 594eaef..2873ee8 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_listContextMenuCapacityAllocationResultsRuleConfiguration.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_listContextMenuCapacityAllocationResultsRuleConfiguration.def
@@ -72,6 +72,17 @@
         Title: '鑷姩鍒涘缓瑙勫垯'
       ]
     }
+    Component MenuGenerateByPegging
+    {
+      #keys: '[414702.1.60885527]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PODIUM2'
+        Taborder: 9
+        Title: '閫氳繃Pegging鐢熸垚'
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_ListCapacityAllocationResultsRuleConfiguration_MenuGenerateByPeggin.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_ListCapacityAllocationResultsRuleConfiguration_MenuGenerateByPeggin.def
new file mode 100644
index 0000000..1cafe5e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_ListCapacityAllocationResultsRuleConfiguration_MenuGenerateByPeggin.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: ListCapacityAllocationResultsRuleConfiguration
+Response OnClick (
+  structured[CapacityAllocationResultsRuleConfiguration] selection
+) id:Response_ListCapacityAllocationResultsRuleConfiguration_MenuGenerateByPegging_OnClick
+{
+  #keys: '[414702.1.58432888]'
+  CanBindMultiple: false
+  DefinitionID => /ListCapacityAllocationResultsRuleConfiguration/Responsedef_ListCapacityAllocationResultsRuleConfiguration_WebMenu_OnClick
+  Initiator: 'MenuGenerateByPegging'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      CapacityAllocationResults::Test1( MacroPlan, GlobalOTDSOP, selection );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_Export_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_Export_OnClick.def
index 602baba..2d9b279 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_Export_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_Export_OnClick.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      Application.Download( "浜ц兘鍒嗛厤缁撴灉瑙勫垯.xlsx", CapacityAllocationResultsRuleConfiguration::Export( GlobalOTDTable ).AsBinaryData() );
+      Application.Download( "浜ц兘鍒嗛厤缁撴灉瑙勫垯.xlsx", CapacityAllocationResultsRuleConfiguration::Export( GlobalOTDSOP ).AsBinaryData() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_Import_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_Import_OnClick.def
index 3e90d91..fc89b7a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_Import_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_Import_OnClick.def
@@ -16,7 +16,7 @@
           
           fileName := uploadJson.Get( "name" ).GetString();
           base64String := uploadJson.Get( "data" ).GetString();
-          CapacityAllocationResultsRuleConfiguration::Import( GlobalOTDTable, base64String );
+          CapacityAllocationResultsRuleConfiguration::Import( GlobalOTDSOP, base64String );
           
           WebMessageBox::Success( "涓婁紶鎴愬姛", true );
         }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def
index 6ff9db2..e09f8c8 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def
@@ -7,7 +7,7 @@
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
   [*
-    return not isnull( MPSync );
+    return not isnull( GlobalOTDTable );
   *]
   QuillAction
   {
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportTest_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportTest_OnClick.def
deleted file mode 100644
index 990eb11..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportTest_OnClick.def
+++ /dev/null
@@ -1,21 +0,0 @@
-Quintiq file version 2.0
-#parent: ButtonExportTest
-Response OnClick () id:Response_FormCapacityAndSaleBudge_ButtonExportTest_OnClick
-{
-  #keys: '[414384.0.914711825]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  Precondition:
-  [*
-    return not isnull( MPSync );
-  *]
-  QuillAction
-  {
-    Body:
-    [*
-      base64 := YuxTest::ExportTest( MPSync );
-      Application.Download( "result.xlsx", base64 );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonGenerateTestData_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonGenerateTestData_OnClick.def
new file mode 100644
index 0000000..7b8522f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonGenerateTestData_OnClick.def
@@ -0,0 +1,25 @@
+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_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def
deleted file mode 100644
index e0e1268..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Response OnCreated () id:Response_FormCapacityAndSaleBudge_OnCreated
-{
-  #keys: '[414384.0.813000551]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  GroupServerCalls: true
-  QuillAction
-  {
-    Body:
-    [*
-      MPSync::TestData( MPSync, MacroPlan );
-      GlobalOTDTable.InitTestData();
-      GlobalOTDTable.InitTestData( MacroPlan );
-      Global_MappingAnnualBudgetData::SetOrgCodeFromForecast( GlobalOTDTable );
-      GlobalOTDTable.RefreshCapacityAndSaleBudgeFilter( true );
-    *]
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
index c2687d8..7c799db 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
@@ -16,19 +16,18 @@
       [
         Image: 'EXPORT1'
         Label: '瀵煎嚭'
-        Taborder: 0
+        Taborder: 1
       ]
     }
-    Component ButtonExportTest
+    Component ButtonGenerateTestData
     {
-      #keys: '[414384.0.914711826]'
+      #keys: '[414384.0.971540693]'
       BaseType: 'WebButton'
       Properties:
       [
-        Image: 'EXPORT1'
-        Label: '瀵煎嚭娴嬭瘯'
-        Taborder: 1
-        Visible: false
+        Image: 'IMPORT1'
+        Label: '鏍规嵁绛涢�夊勾浠界敓鎴愭祴璇曟暟鎹�'
+        Taborder: 0
       ]
     }
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def
index 71754e3..8c71c5c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def
@@ -17,8 +17,8 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'GlobalOTDTable'
-            Source: 'GlobalOTDTable'
+            DataType: 'GlobalOTDSOP'
+            Source: 'GlobalOTDSOP'
             Taborder: 0
             Transformation: 'CapacityAndSaleBudgeChartElement'
           ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
index 692a6ad..cbd7ff2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
@@ -12,15 +12,15 @@
     [*
       //CapacityAndSaleBudgeChartElement::TestData( GlobalOTDTable );
       
-      GlobalOTDTable.CapacityAndSaleBudgeChart( DataHolderMacroPlansForScenarioComparison.Data(), 
-                                                DropDownSaleOrCapacity.Text(),
-                                                DropDownTimeGroup.Text(),
-                                                DropDownByBusinessTypeOrByOrgCode.Text(),
-                                                DataHolderCapacityAndSaleBudgeFilterBusinessType.Data(),
-                                                DataHolderCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.Data(),
-                                                DataHolderCapacityAndSaleBudgeFilterYear.Data(),
-                                                DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
-                                                GlobalOTDTable );
+      GlobalOTDSOP.CapacityAndSaleBudgeChart( DataHolderMacroPlansForScenarioComparison.Data(), 
+                                              DropDownSaleOrCapacity.Text(),
+                                              DropDownTimeGroup.Text(),
+                                              DropDownByBusinessTypeOrByOrgCode.Text(),
+                                              DataHolderCapacityAndSaleBudgeFilterBusinessType.Data(),
+                                              DataHolderCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.Data(),
+                                              DataHolderCapacityAndSaleBudgeFilterYear.Data(),
+                                              DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
+                                              GlobalOTDTable );
     *]
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def
deleted file mode 100644
index 4cba0cb..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Response OnCreated () id:Response_FormCapacityAndSaleBudgeChart_OnCreated
-{
-  #keys: '[414384.0.853873350]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      //CapacityAndSaleBudgeChartElement::TestData( ScenarioManager );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def
index 5dd68bd..d59a144 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def
@@ -17,8 +17,8 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'GlobalOTDTable'
-            Source: 'GlobalOTDTable'
+            DataType: 'GlobalOTDSOP'
+            Source: 'GlobalOTDSOP'
             Taborder: 0
             Transformation: 'CapacityAndSaleBudgeCompareItemColumn.CapacityAndSaleBudgeCompareItemCell'
           ]
@@ -44,8 +44,8 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'GlobalOTDTable'
-            Source: 'GlobalOTDTable'
+            DataType: 'GlobalOTDSOP'
+            Source: 'GlobalOTDSOP'
             Taborder: 0
             Transformation: 'CapacityAndSaleBudgeCompareItemRow'
           ]
@@ -70,8 +70,8 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'GlobalOTDTable'
-            Source: 'GlobalOTDTable'
+            DataType: 'GlobalOTDSOP'
+            Source: 'GlobalOTDSOP'
             Taborder: 0
             Transformation: 'CapacityAndSaleBudgeCompareItemColumn'
           ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def
index 872c802..7f559d2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def
@@ -14,11 +14,11 @@
       info( DataHolderCapacityAndSaleBudgeFilterItem.Data().Size() );
       info( DataHolderCapacityAndSaleBudgeFilterYear.Data().Size() );
       info( DataHolderCapacityAndSaleBudgeFilterMonth.Data().Size() );
-      GlobalOTDTable.CapacityAndSaleBudgeCompare( DataHolderMacroPlansForScenarioComparison.Data(), 
-                                                  DataHolderCapacityAndSaleBudgeFilterItem.Data(), 
-                                                  DataHolderCapacityAndSaleBudgeFilterYear.Data(), 
-                                                  DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
-                                                  GlobalOTDTable );
+      GlobalOTDSOP.CapacityAndSaleBudgeCompare( DataHolderMacroPlansForScenarioComparison.Data(), 
+                                                DataHolderCapacityAndSaleBudgeFilterItem.Data(), 
+                                                DataHolderCapacityAndSaleBudgeFilterYear.Data(), 
+                                                DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
+                                                GlobalOTDTable );
     *]
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def
index a01173d..f98be27 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def
@@ -13,8 +13,7 @@
   {
     Body:
     [*
-      tableBinaryData := GlobalOTDTable.CapacityAndSaleBudgeCompareExport().AsBinaryData();
-      Application.Download( "骞村害浜ч攢棰勭畻瀵规瘮.xlsx", tableBinaryData );
+      Application.Download( "骞村害浜ч攢棰勭畻瀵规瘮.xlsx", GlobalOTDSOP.CapacityAndSaleBudgeCompareExport().AsBinaryData() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def
index cbe6b9e..e04971e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'CapacityAndSaleBudgeFilterBusinessType'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick.def
index c240052..a9b41c6 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick.def
@@ -10,7 +10,7 @@
   {
     Body:
     [*
-      GlobalOTDTable.RefreshCapacityAndSaleBudgeFilter( true );
+      GlobalOTDSOP::RefreshCapacityAndSaleBudgeFilter( true, GlobalOTDTable, GlobalOTDSOP );
     *]
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Component_ListCapacityAndSaleBudgeFilterItem.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Component_ListCapacityAndSaleBudgeFilterItem.def
index ea63655..0ca80fc 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Component_ListCapacityAndSaleBudgeFilterItem.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Component_ListCapacityAndSaleBudgeFilterItem.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'CapacityAndSaleBudgeFilterItem'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Response_OnCreated.def
deleted file mode 100644
index a9ccb24..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Response_OnCreated.def
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Response OnCreated () id:Response_FormCapacityAndSaleBudgeFilterItem_OnCreated
-{
-  #keys: '[414384.0.813090410]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  GroupServerCalls: true
-  QuillAction
-  {
-    Body:
-    [*
-      CapacityAndSaleBudgeFilterItem::Initial( GlobalOTDTable );
-    *]
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Component_ListCapacityAndSaleBudgeFilterMonth.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Component_ListCapacityAndSaleBudgeFilterMonth.def
index 577ebb4..e56959a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Component_ListCapacityAndSaleBudgeFilterMonth.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Component_ListCapacityAndSaleBudgeFilterMonth.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'CapacityAndSaleBudgeFilterMonth'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Response_OnCreated.def
deleted file mode 100644
index d922a4a..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Response_OnCreated.def
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Response OnCreated () id:Response_FormCapacityAndSaleBudgeFilterMonth_OnCreated
-{
-  #keys: '[414384.0.813021080]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  GroupServerCalls: true
-  QuillAction
-  {
-    Body:
-    [*
-      CapacityAndSaleBudgeFilterMonth::Initial( GlobalOTDTable );
-    *]
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def
index ae0a48a..bc46349 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'CapacityAndSaleBudgeFilterPlaceOfProductionOfArray'
       ]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnC\043663.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnC\043663.def"
index 7b8154d..4ea2f47 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnC\043663.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnC\043663.def"
@@ -10,7 +10,7 @@
   {
     Body:
     [*
-      GlobalOTDTable.RefreshCapacityAndSaleBudgeFilter( true );
+      GlobalOTDSOP::RefreshCapacityAndSaleBudgeFilter( true, GlobalOTDTable, GlobalOTDSOP );
     *]
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Component_ListCapacityAndSaleBudgeFilterYear.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Component_ListCapacityAndSaleBudgeFilterYear.def
index c89499c..3bb5087 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Component_ListCapacityAndSaleBudgeFilterYear.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Component_ListCapacityAndSaleBudgeFilterYear.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'CapacityAndSaleBudgeFilterYear'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Response_OnCreated.def
deleted file mode 100644
index 19ea091..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Response_OnCreated.def
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Response OnCreated () id:Response_FormCapacityAndSaleBudgeFilterYear_OnCreated
-{
-  #keys: '[414384.0.814422656]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  GroupServerCalls: true
-  QuillAction
-  {
-    Body:
-    [*
-      CapacityAndSaleBudgeFilterYear::Initial( GlobalOTDTable );
-    *]
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Component_ListDataDistributionLog.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Component_ListDataDistributionLog.def
new file mode 100644
index 0000000..56c7d3f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Component_ListDataDistributionLog.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListDataDistributionLog
+{
+  #keys: '[414702.1.155206692]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorDataDistributionLog
+    {
+      #keys: '[414702.1.155206693]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDLog'
+        Source: 'GlobalOTDLog'
+        Taborder: 0
+        Transformation: 'DataDistributionLog'
+      ]
+    }
+    #child: listActionBarPageDataDistributionLog
+    Component DataSetLevelDataDistributionLog
+    {
+      #keys: '[414702.1.155206698]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuDataDistributionLog
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgExecuteStatus","title":"ImgExecuteStatus","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgExecuteStatus"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ExecuteUser","title":"鎵ц鐢ㄦ埛","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ExecuteUser"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MacroPlanMDSID","title":"MacroPlanMDSID","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"MacroPlanMDSID"}},{"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":"ScenarioName","title":"鍦烘櫙鍚嶇О","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ScenarioName"}}]'
+        ContextMenu: 'listContextMenuDataDistributionLog'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListDataDistributionLog_WebMenu_OnClick
+    {
+      #keys: '[414702.1.156607910]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[373.0.2183601]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Component_listActionBarPageDataDistributionLog.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Component_listActionBarPageDataDistributionLog.def
new file mode 100644
index 0000000..4784630
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Component_listActionBarPageDataDistributionLog.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageDataDistributionLog
+{
+  #keys: '[414702.1.155206695]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Component_listContextMenuDataDistributionLog.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Component_listContextMenuDataDistributionLog.def
new file mode 100644
index 0000000..da61870
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Component_listContextMenuDataDistributionLog.def
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+Component listContextMenuDataDistributionLog
+{
+  #keys: '[414702.1.155206700]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuDelete
+    {
+      #keys: '[414702.1.155342244]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 3
+        Title: '鍒犻櫎'
+      ]
+    }
+    Component MenuSelectionAll
+    {
+      #keys: '[414702.1.156679633]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 4
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Response_ListDataDistributionLog_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Response_ListDataDistributionLog_MenuDelete_OnClick.def
new file mode 100644
index 0000000..5a819e4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Response_ListDataDistributionLog_MenuDelete_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListDataDistributionLog
+Response OnClick (
+  DataDistributionLog selection
+) id:Response_ListDataDistributionLog_MenuDelete_OnClick
+{
+  #keys: '[414702.1.156508213]'
+  DefinitionID => /ListDataDistributionLog/Responsedef_ListDataDistributionLog_WebMenu_OnClick
+  Initiator: 'MenuDelete'
+  QuillAction
+  {
+    Body:
+    [*
+      selection.Delete();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Response_ListDataDistributionLog_MenuSelectionAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Response_ListDataDistributionLog_MenuSelectionAll_OnClick.def
new file mode 100644
index 0000000..1dc8b1a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/Response_ListDataDistributionLog_MenuSelectionAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListDataDistributionLog
+Response OnClick () id:Response_ListDataDistributionLog_MenuSelectionAll_OnClick
+{
+  #keys: '[414702.1.156679773]'
+  CanBindMultiple: false
+  DefinitionID => /ListDataDistributionLog/Responsedef_ListDataDistributionLog_WebMenu_OnClick
+  Initiator: 'MenuSelectionAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/_ROOT_Component_FormDataDistributionLog.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/_ROOT_Component_FormDataDistributionLog.def
new file mode 100644
index 0000000..4e8269a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataDistributionLog/_ROOT_Component_FormDataDistributionLog.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormDataDistributionLog
+{
+  #keys: '[414702.1.154060867]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: ListDataDistributionLog
+  ]
+  Properties:
+  [
+    Image: 'MUSHROOM'
+    Title: '鏁版嵁鍒嗗彂鏃ュ織'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_listContextMenuFillingCapacityOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_listContextMenuFillingCapacityOrder.def
index 7db97cc..ded91eb 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_listContextMenuFillingCapacityOrder.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_listContextMenuFillingCapacityOrder.def
@@ -50,6 +50,18 @@
         Title: 'Save Scheme'
       ]
     }
+    Component MenuSelectAll
+    {
+      #keys: '[414702.1.72339677]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DOCUMENT_SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 7
+        Title: '鍏ㄩ��'
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_ListFillingCapacityOrder_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_ListFillingCapacityOrder_MenuDelete_OnClick.def
index 243c7c1..6bf5abd 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_ListFillingCapacityOrder_MenuDelete_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_ListFillingCapacityOrder_MenuDelete_OnClick.def
@@ -5,7 +5,6 @@
 ) id:Response_ListFillingCapacityOrder_MenuDelete_OnClick
 {
   #keys: '[414382.0.402561135]'
-  CanBindMultiple: false
   DefinitionID => /ListFillingCapacityOrder/Responsedef_ListFillingCapacityOrder_WebMenu_OnClick
   GroupServerCalls: true
   Initiator: 'MenuDelete'
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_ListFillingCapacityOrder_MenuSelectAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_ListFillingCapacityOrder_MenuSelectAll_OnClick.def
new file mode 100644
index 0000000..3db4945
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_ListFillingCapacityOrder_MenuSelectAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListFillingCapacityOrder
+Response OnClick () id:Response_ListFillingCapacityOrder_MenuSelectAll_OnClick
+{
+  #keys: '[414702.1.72149428]'
+  CanBindMultiple: false
+  DefinitionID => /ListFillingCapacityOrder/Responsedef_ListFillingCapacityOrder_WebMenu_OnClick
+  Initiator: 'MenuSelectAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_listContextMenuCustomerAndFillingCapacityOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_listContextMenuCustomerAndFillingCapacityOrder.def
index cdcd03d..486b097 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_listContextMenuCustomerAndFillingCapacityOrder.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_listContextMenuCustomerAndFillingCapacityOrder.def
@@ -16,17 +16,6 @@
         Title: '濉骇'
       ]
     }
-    Component MenuRefresh
-    {
-      #keys: '[414382.0.415603149]'
-      BaseType: 'WebMenu'
-      Properties:
-      [
-        Image: 'EDITOR_HAS_DECLARATIVE_DEFINITION'
-        Taborder: 4
-        Title: '鍒涘缓娴嬭瘯鏁版嵁'
-      ]
-    }
     Component MenuDelete
     {
       #keys: '[414702.0.472081906]'
@@ -34,7 +23,7 @@
       Properties:
       [
         Image: 'DELETE'
-        Taborder: 5
+        Taborder: 4
         Title: '鍒犻櫎'
       ]
     }
@@ -46,7 +35,7 @@
       [
         Image: 'DOCUMENT_SELECTION'
         Shortcut: 'Ctrl+A'
-        Taborder: 6
+        Taborder: 5
         Title: '鍏ㄩ��'
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuRefresh_OnClick.def
deleted file mode 100644
index aba413a..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuRefresh_OnClick.def
+++ /dev/null
@@ -1,17 +0,0 @@
-Quintiq file version 2.0
-#parent: ListCustomerAndFillingCapacityOrder
-Response OnClick () id:Response_ListCustomerAndFillingCapacityOrder_MenuRefresh_OnClick
-{
-  #keys: '[414382.0.415724061]'
-  CanBindMultiple: false
-  DefinitionID => /ListCustomerAndFillingCapacityOrder/Responsedef_ListCustomerAndFillingCapacityOrder_WebMenu_OnClick
-  Initiator: 'MenuRefresh'
-  QuillAction
-  {
-    Body:
-    [*
-      CustomerAndForecastOrder::RefreshData(  MacroPlan,GlobalOTDTable);
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_PanelButton_ButtonTransform_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_PanelButton_ButtonTransform_OnClick.def
index fd6d7b1..e982e5c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_PanelButton_ButtonTransform_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_PanelButton_ButtonTransform_OnClick.def
@@ -17,8 +17,9 @@
       
       message := "鎬昏鍗曚釜鏁帮細"                                                               + 
                 [String]counter( MacroPlan, SalesDemand.astype( CustomerOrder ), cs, true )  + 
-                 "    鎴愬姛杞崲涓暟锛�"                                                         +
-                 [String]counter( MacroPlan, SalesDemand.astype( CustomerOrder ), cs, true )
+                String::NewLine()                                                            +
+                "    鎴愬姛杞崲涓暟锛�"                                                         +
+                [String]counter( MacroPlan, SalesDemand.astype( CustomerOrder ), cs, true )
       
       WebMessageBox::Success( message, true );
     *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormIT/Component_ListPanelMaterialIT.def b/_Main/UI/MacroPlannerWebApp/Component_FormIT/Component_ListPanelMaterialIT.def
index f5a7514..3d88e82 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormIT/Component_ListPanelMaterialIT.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormIT/Component_ListPanelMaterialIT.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'PanelMaterialAll.PanelMaterialIT'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormIT/Response_DataHolderPanelIT_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormIT/Response_DataHolderPanelIT_OnCreated.def
index 2e5c2f6..ee8d9a2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormIT/Response_DataHolderPanelIT_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormIT/Response_DataHolderPanelIT_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "IT" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "IT" );
       if ( not isnull( targetPanelMaterialAll ) ) {
         this.Data( targetPanelMaterialAll );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormIT/Response_DataHolderPanelIT_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormIT/Response_DataHolderPanelIT_OnDataChanged.def
index 45047d0..9e7b501 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormIT/Response_DataHolderPanelIT_OnDataChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormIT/Response_DataHolderPanelIT_OnDataChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "IT" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "IT" );
       if ( not isnull( targetPanelMaterialAll ) ) {
         this.Data( targetPanelMaterialAll );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_listContextMenuInterfaceTest.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_listContextMenuInterfaceTest.def
index c678ea7..7c9f529 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_listContextMenuInterfaceTest.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_listContextMenuInterfaceTest.def
@@ -13,7 +13,7 @@
       [
         Image: 'VIEW'
         Taborder: 3
-        Title: '鏄剧ず鏁版嵁'
+        Title: '娴嬭瘯'
       ]
     }
     Component MenuDelete
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuCreateShowData_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuCreateShowData_OnClick.def
index fbb23d2..7cee00d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuCreateShowData_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuCreateShowData_OnClick.def
@@ -27,6 +27,7 @@
       //GlobalOTDTable.Global_ShowCell( relflush );
       //
       //Global_ShowCell::ShowData( GlobalOTDTable, selection );
+      WebMessageBox::Information( "姝ゆ寜閽敤浜庢祴璇�", true );
     *]
     GroupServerCalls: false
   }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/Component_ListManufactureLT\043943.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/Component_ListManufactureLT\043943.def"
index c2d85db..7295baf 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/Component_ListManufactureLT\043943.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/Component_ListManufactureLT\043943.def"
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'MacroPlan'
-        Source: 'MacroPlan'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'ManufactureLTImputation'
       ]
@@ -37,7 +37,7 @@
   ]
   Properties:
   [
-    Taborder: 0
+    Taborder: 1
   ]
   ResponseDefinitions:
   [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/Response_ButtonLoad_OnClick\043417.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/Response_ButtonLoad_OnClick\043417.def"
new file mode 100644
index 0000000..d5ba2d8
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/Response_ButtonLoad_OnClick\043417.def"
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ButtonLoad_657
+Response OnClick () id:Response_PanelPRDataButton_ButtonLoad_OnClick_417
+{
+  #keys: '[414384.0.967076760]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      ManufactureLTImputation::Transfer( MacroPlan, GlobalOTDSOP );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/Response_ListManufactureLT_943_MenuApply_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/Response_ListManufactureLT_943_MenuApply_OnClick.def
new file mode 100644
index 0000000..facd5e2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/Response_ListManufactureLT_943_MenuApply_OnClick.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: ListManufactureLT_943
+Response OnClick (
+  structured[ManufactureLTImputation] selection
+) id:Response_ListManufactureLT_943_MenuApply_OnClick
+{
+  #keys: '[414384.0.967590502]'
+  CanBindMultiple: false
+  DefinitionID => /ListManufactureLT_943/Responsedef_ListManufactureLT_943_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuApply'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      ManufactureLTImputation::Apply( selection, MacroPlan );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/_ROOT_Component_FormManufactureLT.def b/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/_ROOT_Component_FormManufactureLT.def
index a35f176..a5790c1 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/_ROOT_Component_FormManufactureLT.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/_ROOT_Component_FormManufactureLT.def
@@ -8,6 +8,17 @@
   Children:
   [
     #child: ListManufactureLT_943
+    Component ButtonLoad id:ButtonLoad_657
+    {
+      #keys: '[414384.0.967076761]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'THICK_ARROW_DOWN_BLUE'
+        Label: '閲嶆柊鍔犺浇'
+        Taborder: 0
+      ]
+    }
   ]
   Properties:
   [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_ListMaterialMaterialLabelingAndPlanningStrategy\043880.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_ListMaterialMaterialLabelingAndPlanningStrategy\043880.def"
index 698efbd..ffc07fd 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_ListMaterialMaterialLabelingAndPlanningStrategy\043880.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_ListMaterialMaterialLabelingAndPlanningStrategy\043880.def"
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'MatAttrSettingAndPlanStrategy'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonMaterialExportAndImport_OnCl.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonMaterialExportAndImport_OnCl.def
index ce5035b..96e0a34 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonMaterialExportAndImport_OnCl.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonMaterialExportAndImport_OnCl.def
@@ -22,7 +22,7 @@
           
           fileName := uploadJson.Get( "name" ).GetString();
           base64String := uploadJson.Get( "data" ).GetString();
-          matAttrSettingAndPlanStrategyInputSource := MatAttrSettingAndPlanStrategyInputSource::Upload( GlobalOTDTable, fileName, base64String, ApplicationMacroPlanner.GetUserName() );
+          matAttrSettingAndPlanStrategyInputSource := MatAttrSettingAndPlanStrategyInputSource::Upload( GlobalOTDSOP, fileName, base64String, ApplicationMacroPlanner.GetUserName() );
           
           matAttrSettingAndPlanStrategyInputSource.ParseTable();
           
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonSynchronizeInventoryTargets_.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonSynchronizeInventoryTargets_.def
index 5b1c51b..b71e7e5 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonSynchronizeInventoryTargets_.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonSynchronizeInventoryTargets_.def
@@ -19,7 +19,7 @@
   {
     Body:
     [*
-      MatAttrSettingAndPlanStrategy::SynchronizeInventoryTargets( GlobalOTDTable, MacroPlan );
+      MatAttrSettingAndPlanStrategy::SynchronizeInventoryTargets( GlobalOTDSOP, MacroPlan );
       
       WebMessageBox::Success( "搴撳瓨鐩爣鍚屾鎴愬姛", true );
     *]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Component_ListPRHistoryData\043844.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Component_ListPRHistoryData\043844.def"
index fe57fb1..a0e1f6e 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Component_ListPRHistoryData\043844.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Component_ListPRHistoryData\043844.def"
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'PRHistoryData'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Response_PanelPRHistoryButton_ButtonExportPRHistory_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Response_PanelPRHistoryButton_ButtonExportPRHistory_OnClick.def
index 9a9f95e..3b3157a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Response_PanelPRHistoryButton_ButtonExportPRHistory_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Response_PanelPRHistoryButton_ButtonExportPRHistory_OnClick.def
@@ -13,8 +13,7 @@
   {
     Body:
     [*
-      tableBinaryData := PRHistoryData::ExportTheFileStream( GlobalOTDTable ).AsBinaryData();
-      Application.Download( "PRData.xlsx", tableBinaryData );
+      Application.Download( "PRHistoryData.xlsx", PRHistoryData::Export( GlobalOTDSOP ) );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialAutomotiveElectronics/Component_ListPanelMaterialAutomotiveElectronics.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialAutomotiveElectronics/Component_ListPanelMaterialAutomotiveElectronics.def
index 59acd48..8ccd983 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialAutomotiveElectronics/Component_ListPanelMaterialAutomotiveElectronics.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialAutomotiveElectronics/Component_ListPanelMaterialAutomotiveElectronics.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'PanelMaterialAll.PanelMaterialAutomotiveElectronics'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialAutomotiveElectronics/Response_DataHolderPanelAutomotiveElectronics_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialAutomotiveElectronics/Response_DataHolderPanelAutomotiveElectronics_OnCreated.def
index 153bf2b..795cb34 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialAutomotiveElectronics/Response_DataHolderPanelAutomotiveElectronics_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialAutomotiveElectronics/Response_DataHolderPanelAutomotiveElectronics_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "姹借溅鐢靛瓙" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "姹借溅鐢靛瓙" );
       if ( not isnull( targetPanelMaterialAll ) ) {
         this.Data( targetPanelMaterialAll );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialAutomotiveElectronics/Response_DataHolderPanelAutomotiveElectronics_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialAutomotiveElectronics/Response_DataHolderPanelAutomotiveElectronics_OnDataChanged.def
index 5d5b00c..09e5f5d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialAutomotiveElectronics/Response_DataHolderPanelAutomotiveElectronics_OnDataChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialAutomotiveElectronics/Response_DataHolderPanelAutomotiveElectronics_OnDataChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "姹借溅鐢靛瓙" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "姹借溅鐢靛瓙" );
       if ( not isnull( targetPanelMaterialAll ) ) {
         this.Data( targetPanelMaterialAll );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/Component_ListPanelMaterialSpecializedDisplay.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/Component_ListPanelMaterialSpecializedDisplay.def
index daa00b5..0c99db0 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/Component_ListPanelMaterialSpecializedDisplay.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/Component_ListPanelMaterialSpecializedDisplay.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'PanelMaterialAll.PanelMaterialSpecializedDisplay'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/Response_DataHolderPanelSpecializedDisplay_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/Response_DataHolderPanelSpecializedDisplay_OnCreated.def
index f850744..76eda79 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/Response_DataHolderPanelSpecializedDisplay_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/Response_DataHolderPanelSpecializedDisplay_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "涓撴樉" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "涓撴樉" );
       if ( not isnull( targetPanelMaterialAll ) ) {
         this.Data( targetPanelMaterialAll );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/Response_DataHolderPanelSpecializedDisplay_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/Response_DataHolderPanelSpecializedDisplay_OnDataChanged.def
index da65c1e..e9d7c35 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/Response_DataHolderPanelSpecializedDisplay_OnDataChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/Response_DataHolderPanelSpecializedDisplay_OnDataChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "涓撴樉" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "涓撴樉" );
       if ( not isnull( targetPanelMaterialAll ) ) {
         this.Data( targetPanelMaterialAll );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSportsHealth/Component_ListPanelMaterialSportsHealth.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSportsHealth/Component_ListPanelMaterialSportsHealth.def
index 470bb1a..0763481 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSportsHealth/Component_ListPanelMaterialSportsHealth.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSportsHealth/Component_ListPanelMaterialSportsHealth.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'PanelMaterialAll.PanelMaterialSportsHealth'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSportsHealth/Response_DataHolderPanelSportsHealth_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSportsHealth/Response_DataHolderPanelSportsHealth_OnCreated.def
index a335367..075c0ad 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSportsHealth/Response_DataHolderPanelSportsHealth_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSportsHealth/Response_DataHolderPanelSportsHealth_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "杩愬姩鍋ュ悍" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "杩愬姩鍋ュ悍" );
       if ( not isnull( targetPanelMaterialAll ) ) {
         this.Data( targetPanelMaterialAll );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSportsHealth/Response_DataHolderPanelSportsHealth_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSportsHealth/Response_DataHolderPanelSportsHealth_OnDataChanged.def
index 8f99fec..f32dc7f 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSportsHealth/Response_DataHolderPanelSportsHealth_OnDataChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSportsHealth/Response_DataHolderPanelSportsHealth_OnDataChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "杩愬姩鍋ュ悍" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "杩愬姩鍋ュ悍" );
       if ( not isnull( targetPanelMaterialAll ) ) {
         this.Data( targetPanelMaterialAll );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM17/Component_ListPanelMaterialTM.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM17/Component_ListPanelMaterialTM.def
index e55373e..a6fe84e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM17/Component_ListPanelMaterialTM.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM17/Component_ListPanelMaterialTM.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'PanelMaterialAll.PanelMaterialTM17'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM17/Response_DataHolderPanelTM17_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM17/Response_DataHolderPanelTM17_OnCreated.def
index b163a78..61927b9 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM17/Response_DataHolderPanelTM17_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM17/Response_DataHolderPanelTM17_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "TM17" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "TM17" );
       if ( not isnull( targetPanelMaterialAll ) ) {
         this.Data( targetPanelMaterialAll );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM17/Response_DataHolderPanelTM17_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM17/Response_DataHolderPanelTM17_OnDataChanged.def
index da9f657..af98ab2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM17/Response_DataHolderPanelTM17_OnDataChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM17/Response_DataHolderPanelTM17_OnDataChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "TM17" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "TM17" );
       if ( not isnull( targetPanelMaterialAll ) ) {
         this.Data( targetPanelMaterialAll );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Component_ListPanelMaterialTM.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Component_ListPanelMaterialTM.def
index 68eb395..f97dc1b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Component_ListPanelMaterialTM.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Component_ListPanelMaterialTM.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'PanelMaterialAll.PanelMaterialTM18'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Response_DataHolderPanelTM18_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Response_DataHolderPanelTM18_OnCreated.def
index da89ecb..1ec6d4d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Response_DataHolderPanelTM18_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Response_DataHolderPanelTM18_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "TM18" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "TM18" );
       if ( not isnull( targetPanelMaterialAll ) ) {
         this.Data( targetPanelMaterialAll );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Response_DataHolderPanelTM18_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Response_DataHolderPanelTM18_OnDataChanged.def
index b1e90c7..0a3f65b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Response_DataHolderPanelTM18_OnDataChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Response_DataHolderPanelTM18_OnDataChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "TM18" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "TM18" );
       if ( not isnull( targetPanelMaterialAll ) ) {
         this.Data( targetPanelMaterialAll );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/Component_ListPanelMaterialTianHua.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/Component_ListPanelMaterialTianHua.def
index 351aa56..fbb4377 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/Component_ListPanelMaterialTianHua.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/Component_ListPanelMaterialTianHua.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'PanelMaterialAll.PanelMaterialTianHua'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/Response_DataHolderPanelTianHua_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/Response_DataHolderPanelTianHua_OnCreated.def
index 571614d..fd3b59e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/Response_DataHolderPanelTianHua_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/Response_DataHolderPanelTianHua_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "澶╁崕" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "澶╁崕" );
       if ( not isnull( targetPanelMaterialAll ) ) {
         this.Data( targetPanelMaterialAll );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/Response_DataHolderPanelTianHua_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/Response_DataHolderPanelTianHua_OnDataChanged.def
index eec0cbb..0720784 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/Response_DataHolderPanelTianHua_OnDataChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/Response_DataHolderPanelTianHua_OnDataChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "澶╁崕" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "澶╁崕" );
       if ( not isnull( targetPanelMaterialAll ) ) {
         this.Data( targetPanelMaterialAll );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialVehicle/Component_ListPanelMaterialVehicle.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialVehicle/Component_ListPanelMaterialVehicle.def
index 5b14efc..d135ecf 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialVehicle/Component_ListPanelMaterialVehicle.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialVehicle/Component_ListPanelMaterialVehicle.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'PanelMaterialAll.PanelMaterialVehicle'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialVehicle/Response_DataHolderPanelMaterialVehicle_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialVehicle/Response_DataHolderPanelMaterialVehicle_OnCreated.def
index 5d3384d..1949110 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialVehicle/Response_DataHolderPanelMaterialVehicle_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialVehicle/Response_DataHolderPanelMaterialVehicle_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "杞﹁浇" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "杞﹁浇" );
       if ( not isnull( targetPanelMaterialAll ) ) {
         this.Data( targetPanelMaterialAll );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialVehicle/Response_DataHolderPanelMaterialVehicle_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialVehicle/Response_DataHolderPanelMaterialVehicle_OnDataChanged.def
index b38c87f..233ca90 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialVehicle/Response_DataHolderPanelMaterialVehicle_OnDataChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialVehicle/Response_DataHolderPanelMaterialVehicle_OnDataChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      targetPanelMaterialAll := select( GlobalOTDTable, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "杞﹁浇" );
+      targetPanelMaterialAll := select( GlobalOTDSOP, PanelMaterialAll, tempPMA, tempPMA.BusinessType() = "杞﹁浇" );
       if ( not isnull( targetPanelMaterialAll ) ) {
         this.Data( targetPanelMaterialAll );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Response_TIANMA_JITUAN_ListProduct_844_MenuMarkingPanelMaterial_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Response_TIANMA_JITUAN_ListProduct_844_MenuMarkingPanelMaterial_OnClick.def
index 33228b3..af44d53 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Response_TIANMA_JITUAN_ListProduct_844_MenuMarkingPanelMaterial_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Response_TIANMA_JITUAN_ListProduct_844_MenuMarkingPanelMaterial_OnClick.def
@@ -5,7 +5,6 @@
 ) id:Response_ListProduct_844_MenuMarkingPanelMaterial_OnClick
 {
   #keys: '[414502.0.406201138]'
-  CanBindMultiple: false
   DefinitionID => /ListProduct_844/Responsedef_ListProduct_844_WebMenu_OnClick
   Initiator: 'MenuMarkingPanelMaterial'
   QuillAction
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Component_ListScenario.def b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Component_ListScenario.def
index 015e693..29091a5 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Component_ListScenario.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Component_ListScenario.def
@@ -110,9 +110,33 @@
                 Taborder: 21
               ]
             }
+            Component MenuScenarioDataDistribution
+            {
+              #keys: '[414702.1.89337672]'
+              BaseType: 'WebMenu'
+              Properties:
+              [
+                Image: 'CABINET_FLASH'
+                Taborder: 22
+                Title: '鏁版嵁鍒嗗彂'
+              ]
+            }
           ]
         }
       ]
+      Properties:
+      [
+        FilterArguments: 'availablescenarios:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderAvailableScenarios'
+        FixedFilter: 'availablescenarios.Find( object ) >= 0'
+      ]
+    }
+    Component DataExtractorScenario #extension
+    {
+      Properties:
+      [
+        FilterArguments: 'availablescenarios:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderAvailableScenarios'
+        FixedFilter: 'availablescenarios.Find( object ) >= 0'
+      ]
     }
   ]
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick\043545.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick\043545.def"
index 8e69dc4..2a7180e 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick\043545.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick\043545.def"
@@ -15,8 +15,7 @@
       // Create a new scenario
       dlg := construct( DialogCreateEditScenario );
       dlg.checkboxEnableSync().Visible( true );
-      dlg.dropDownStringListGeneral().Visible( true );
-      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableScenarioNames( GlobalOTDTable ) );
+      dlg.DropDownListGeneral().Visible( true );
       dlg.checkboxIsKeyProduct().Visible( true );
       dlg.checkboxCreatePurchaseSupplyProduct().Visible( true );
       dlg.NewScenario( ScenarioManager, selection, true );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick.def
index 4c3b7f0..f62e89a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick.def
@@ -16,8 +16,7 @@
       // Create a new Scenario
       dlg := construct( DialogCreateEditScenario );
       dlg.checkboxEnableSync().Visible( true );
-      dlg.dropDownStringListGeneral().Visible( true );
-      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableScenarioNames( GlobalOTDTable ) );
+      dlg.DropDownListGeneral().Visible( true );
       dlg.checkboxIsKeyProduct().Visible( true );
       dlg.checkboxCreatePurchaseSupplyProduct().Visible( true );
       parent := selection.Element( 0 ).Parent();
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick\043549.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick\043549.def"
index 607ae7d..88499fe 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick\043549.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick\043549.def"
@@ -16,8 +16,7 @@
       dlg := construct( DialogCreateEditScenario );
       dlg.checkboxEnableSync().Checked( false );
       dlg.checkboxEnableSync().Visible( false );
-      dlg.dropDownStringListGeneral().Visible( false );
-      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableScenarioNames( GlobalOTDTable ) );
+      dlg.DropDownListGeneral().Visible( false );
       dlg.checkboxIsKeyProduct().Visible( false );
       dlg.checkboxCreatePurchaseSupplyProduct().Visible( false );
       dlg.NewScenario( ScenarioManager, selection );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick.def
index 55945ed..cec0c83 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick.def
@@ -17,8 +17,7 @@
       dlg := construct( DialogCreateEditScenario );
       dlg.checkboxEnableSync().Checked( false );
       dlg.checkboxEnableSync().Visible( false );
-      dlg.dropDownStringListGeneral().Visible( false );
-      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableScenarioNames( GlobalOTDTable ) );
+      dlg.DropDownListGeneral().Visible( false );
       dlg.checkboxIsKeyProduct().Visible( false );
       dlg.checkboxCreatePurchaseSupplyProduct().Visible( false );
       parent := selection.Element( 0 ).Parent();
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuEdit_OnClick.def
index 9c2d77f..078fc6e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuEdit_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuEdit_OnClick.def
@@ -17,8 +17,7 @@
     [*
       // Edit scenario
       dlg := construct( DialogCreateEditScenario );
-      dlg.dropDownStringListGeneral().Visible( selection.EnableSync() );
-      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableScenarioNames( GlobalOTDTable ) );
+      dlg.DropDownListGeneral().Visible( selection.EnableSync() );
       dlg.checkboxIsKeyProduct().Visible( selection.EnableSync() );
       dlg.checkboxCreatePurchaseSupplyProduct().Visible( selection.EnableSync() );
       
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuSelectScenario_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuSelectScenario_OnClick.def
deleted file mode 100644
index a70f622..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuSelectScenario_OnClick.def
+++ /dev/null
@@ -1,26 +0,0 @@
-Quintiq file version 2.0
-#parent: ListScenario
-Response OnClick (
-  ScenarioMP selection
-) id:Response_ListScenario_MenuSelectScenario_OnClick #extension
-{
-  Precondition:
-  [*
-    selection.CanSelect( feedback, Domain.MDSStorageDefinitionManager().DatasetStoreEnabled() );
-    
-    return feedback = ''
-  *]
-  QuillAction #extension
-  {
-    Body:
-    [*
-      // Select a scenario
-      macroPlanOld := MacroPlan;
-      
-      ApplicationMacroPlanner.SelectScenario( selection );
-      
-      macroPlanNew := MacroPlan;
-      ManufactureLTImputation::Transfer( macroPlanOld, macroPlanNew );
-    *]
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuRelaeaseNewVersion_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuRelaeaseNewVersion_OnClick.def
index 745d231..e47f974 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuRelaeaseNewVersion_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuRelaeaseNewVersion_OnClick.def
@@ -18,12 +18,12 @@
     Body:
     [*
       // Copy scenario
-      owner := GlobalOTDTable;
+      owner := GlobalOTDSOP;
       macroplan := MacroPlan;
       testbusinesstype := "闆嗗洟";
       
       VersionControl::ReleaseNewVersion( owner, testbusinesstype );
-      GlobalOTDTable::GetOutputVersionData( owner, macroplan, testbusinesstype );
+      GlobalOTDSOP::GetOutputVersionData( owner, macroplan, testbusinesstype );
       selection.SetReleased();
       
       versionname := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 3 );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuSaveNewVersion_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuSaveNewVersion_OnClick.def
index 1f8b93b..8b48d40 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuSaveNewVersion_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuSaveNewVersion_OnClick.def
@@ -18,7 +18,7 @@
     Body:
     [*
       // Copy scenario
-      owner := GlobalOTDTable;
+      owner := GlobalOTDSOP;
       macroplan := MacroPlan;
       testbusinesstype := "闆嗗洟";
       
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuScenarioDataDistribution_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuScenarioDataDistribution_OnClick.def
new file mode 100644
index 0000000..4528faf
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuScenarioDataDistribution_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: ListScenario
+Response OnClick (
+  Scenario selection
+) id:Response_ListScenario_MenuScenarioDataDistribution_OnClick
+{
+  #keys: '[414702.1.89410379]'
+  CanBindMultiple: false
+  DefinitionID => /ListScenario/Responsedef_ListScenario_WebMenu_OnClick
+  Initiator: 'MenuScenarioDataDistribution'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogDataDistribution );
+      
+      dlg.DataDistribution( selection );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick.def
index ff0fa8b..583d85c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      owner := GlobalOTDTable;
+      owner := GlobalOTDSOP;
       testbusinesstype := "闆嗗洟";
       rootversionid := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 2 );
       dlg := construct( DialogVersionIDCopy );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderFresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderFresh_OnClick.def
index d0a18a1..481d119 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderFresh_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderFresh_OnClick.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      owner := GlobalOTDTable;
+      owner := GlobalOTDSOP;
       testbusinesstype := "闆嗗洟";
       //GlobalOTDTable::GetVersionData( owner, testbusinesstype );
       rootversionid := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 0 );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderRelease_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderRelease_OnClick.def
index a3136f5..fdaf048 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderRelease_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderRelease_OnClick.def
@@ -10,7 +10,7 @@
   {
     Body:
     [*
-      owner := GlobalOTDTable;
+      owner := GlobalOTDSOP;
       macroplan := MacroPlan;
       testbusinesstype := "闆嗗洟";
       
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/_ROOT_Component_FormVersionOfSOP.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/_ROOT_Component_FormVersionOfSOP.def
index 9a4348d..1a4367c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/_ROOT_Component_FormVersionOfSOP.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/_ROOT_Component_FormVersionOfSOP.def
@@ -21,8 +21,8 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'GlobalOTDTable'
-            Source: 'GlobalOTDTable'
+            DataType: 'GlobalOTDSOP'
+            Source: 'GlobalOTDSOP'
             Taborder: 0
             Transformation: 'VersionStatus'
           ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_ListWorkOrderType.def b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_ListWorkOrderType.def
index 033d744..0f9fe81 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_ListWorkOrderType.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_ListWorkOrderType.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'WorkOrderType'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Test.vw b/_Main/UI/MacroPlannerWebApp/Views/Test.vw
index f59a1db..c5e2f28 100644
--- a/_Main/UI/MacroPlannerWebApp/Views/Test.vw
+++ b/_Main/UI/MacroPlannerWebApp/Views/Test.vw
@@ -29,30 +29,12 @@
           FormCapacityAllocationResultsRuleConfiguration_DataSetLevelCapacityAllocationResultsRuleConfiguration
           {
             groupDepth: -1
-            column_PanelMaterialCode
-            {
-              columnId: 'PanelMaterialCode'
-              dataPath: 'PanelMaterialCode'
-              dataType: 'string'
-              index: 0
-              subtotals: ''
-              width: 150
-            }
             column_ModuleMaterialCode
             {
               columnId: 'ModuleMaterialCode'
               dataPath: 'ModuleMaterialCode'
               dataType: 'string'
-              index: 1
-              subtotals: ''
-              width: 150
-            }
-            column_Division
-            {
-              columnId: 'Division'
-              dataPath: 'Division'
-              dataType: 'string'
-              index: 2
+              index: 0
               subtotals: ''
               width: 150
             }
@@ -61,6 +43,24 @@
               columnId: 'StockingPointID'
               dataPath: 'StockingPointID'
               dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 117
+            }
+            column_PanelMaterialCode
+            {
+              columnId: 'PanelMaterialCode'
+              dataPath: 'PanelMaterialCode'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 129
+            }
+            column_Division
+            {
+              columnId: 'Division'
+              dataPath: 'Division'
+              dataType: 'string'
               index: 3
               subtotals: ''
               width: 150
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\346\225\260\346\215\256\345\210\206\345\217\221.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\346\225\260\346\215\256\345\210\206\345\217\221.vw"
new file mode 100644
index 0000000..0747398
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\346\225\260\346\215\256\345\210\206\345\217\221.vw"
@@ -0,0 +1,250 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormBusinessType
+      {
+        title: 'QTIANMA_JITUAN::FormBusinessType'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormBusinessType'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 1
+          columnSpan: 4
+        }
+        components
+        {
+          FormBusinessType_ListBusinessType
+          {
+          }
+          FormBusinessType_DataSetLevelBusinessType
+          {
+            groupDepth: -1
+            sort: 'ScenarioName'
+            column_BusinessTypeName
+            {
+              columnId: 'BusinessTypeName'
+              dataPath: 'BusinessTypeName'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_DisplayType
+            {
+              columnId: 'DisplayType'
+              dataPath: 'DisplayType'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 147
+            }
+            column_ScenarioName
+            {
+              columnId: 'ScenarioName'
+              dataPath: 'ScenarioName'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              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_FormScenarioManager
+      {
+        title: 'QLibMacroPlannerWebUI::FormScenarioManager'
+        shown: true
+        componentID: 'QLibMacroPlannerWebUI::FormScenarioManager'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 8
+          columnPosition: 5
+          columnSpan: 8
+        }
+        components
+        {
+          FormScenarioManager_ListScenario
+          {
+          }
+          FormScenarioManager_DataSetLevelScenario
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 100
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ChangedOn
+            {
+              columnId: 'ChangedOn'
+              dataPath: 'ChangedOn'
+              dataType: 'datetime'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_StorageMode
+            {
+              columnId: 'StorageMode'
+              dataPath: 'StorageMode'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_ImgOptimizerStatus
+            {
+              columnId: 'ImgOptimizerStatus'
+              dataPath: 'ImgOptimizerStatus'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormDataDistributionLog
+      {
+        title: 'QTIANMA_JITUAN::FormDataDistributionLog'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormDataDistributionLog'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 9
+          rowSpan: 7
+          columnPosition: 5
+          columnSpan: 8
+        }
+        components
+        {
+          FormDataDistributionLog_ListDataDistributionLog
+          {
+          }
+          FormDataDistributionLog_DataSetLevelDataDistributionLog
+          {
+            groupDepth: -1
+            column_ImgExecuteStatus
+            {
+              columnId: 'ImgExecuteStatus'
+              dataPath: 'ImgExecuteStatus'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 42
+            }
+            column_ExecuteUser
+            {
+              columnId: 'ExecuteUser'
+              dataPath: 'ExecuteUser'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 115
+            }
+            column_MacroPlanMDSID
+            {
+              columnId: 'MacroPlanMDSID'
+              dataPath: 'MacroPlanMDSID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 132
+            }
+            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_ScenarioName
+            {
+              columnId: 'ScenarioName'
+              dataPath: 'ScenarioName'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 0
+    image: 'PALM_TREE'
+    description: ''
+  }
+  formatversion: 2
+  id: '鏁版嵁鍒嗗彂'
+  name: '鏁版嵁鍒嗗彂'
+  isglobal: false
+  isroot: true
+}
diff --git a/_var/_Main/ModelSettings/Common/Dev-48/_ROOT_Role_Dev-48.properties b/_var/_Main/ModelSettings/Common/Dev-48/_ROOT_Role_Dev-48.properties
new file mode 100644
index 0000000..73f36eb
--- /dev/null
+++ b/_var/_Main/ModelSettings/Common/Dev-48/_ROOT_Role_Dev-48.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=Dev-48
+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=10.110.14.50
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1521
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=totddb
+domainmodel.mdsstoragedefinitionmanager.ociconnectiontnsname=totddb
+domainmodel.mdsstoragedefinitionmanager.ociconnectiontype=Basic
+domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=otd
+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/Dev-68/_ROOT_Role_Dev-68.properties b/_var/_Main/ModelSettings/Common/Dev-68/_ROOT_Role_Dev-68.properties
new file mode 100644
index 0000000..cc88cb1
--- /dev/null
+++ b/_var/_Main/ModelSettings/Common/Dev-68/_ROOT_Role_Dev-68.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=Dev-68
+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=10.110.14.50
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1521
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=totddb_jtmb
+domainmodel.mdsstoragedefinitionmanager.ociconnectiontnsname=totddb
+domainmodel.mdsstoragedefinitionmanager.ociconnectiontype=Basic
+domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=OTDJTMBUSER
+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 3693bd3..3c61315 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-12T10:18:13'
+  UPDATEDATETIME '2023-10-12T23:32:10'
   UPDATEUSER 'quintiq/hongjli'
-  LASTACCESSDATE '2023-10-12'
+  LASTACCESSDATE '2023-10-13'
   VIEWSCOPE 0
 }
 AUTHORIZATIONS
@@ -42,33 +42,33 @@
 INFOOBJECT
 {
   KEY [626.0.4514905]
-  OBJECTTYPE Application // ApplicationLibMacroPlanner
+  OBJECTTYPE Application
   BASEINFOOBJECTS
   {
    BASEINFOOBJECT
    {
     KEY [626.0.4514905]
-    OBJECTTYPE GUIComponent // ApplicationLibMacroPlanner
+    OBJECTTYPE GUIComponent
     CONTENTS
     {
      SETTINGS_MDS_WITH_FOLDER
      {
-       [414702.1.52504981]:LibInt_IntegratorProxy:/root:LibInt_IntegratorProxy
-       [414702.1.52533373]:SWF_CommunicationDataset:/root:SWF_CommunicationDataset
-       [414702.1.52528776]:SWF_WorkflowDataset:/root:SWF_WorkflowDataset
-       [414702.1.52500409]:LibDEF_DataBroker:/root:LibDEF_DataBroker
-       [414702.1.50285849]:LibDEF_DataRepository:/root:LibDEF_DataRepository
-       [414702.1.50276708]:DMF_ConvertorDataset:/root:DMF_ConvertorDataset
-       [414702.1.52542521]:LibMon_Monitor:/root:LibMon_Monitor
-       [414702.1.52537950]:LibUTF:/root:UTF
-       [414702.1.52550001]:Lib3DS_RootDataset:/root:Lib3DS_RootDataset
-       [414702.1.52580001]:KpiTracker:/root:KpiTracker
-       [414702.1.50281280]:MPDomainHandler:/root:MPDomainHandler
-       [414702.1.52560001]:MPSync:/root:MPSync
-       [414702.1.52509550]:ScenarioManager:/root:ScenarioManager
-       [414702.1.52570001]:LibSCIIntegrationInterface:/root:LibSCIIntegrationInterface
-       [414702.1.52519619]:GlobalOTDTable:/root:GlobalOTDTable
-       [414702.1.52585361]:MacroPlan:/root:MacroPlan
+       [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
      }
     }
    }
@@ -78,19 +78,19 @@
    INFOOBJECT
    {
     KEY [514.0.2180]
-    OBJECTTYPE Frame // Frame
+    OBJECTTYPE Frame
     CONTENTS
     {
      State := maximized
      (200,0,1536,809)
-     WorkspaceLocation := 
+     WorkspaceLocation :=
     }
     INFOOBJECTS
     {
      INFOOBJECT
      {
       KEY [113694.2.1024236755]
-      OBJECTTYPE ValueHolder // ValueHolderViewLayout
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value ''
@@ -99,16 +99,16 @@
      INFOOBJECT
      {
       KEY [127710.1.721401771]
-      OBJECTTYPE ValueHolder // ValueHolderActiveMacroPlan
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
-       Value '[414702.1.52620491]'
+       Value '[414702.1.64020493]'
       }
      }
      INFOOBJECT
      {
       KEY [132448.0.224582518]
-      OBJECTTYPE ValueHolder // ValueHolderSetMPDefaultViewForFirstLogin
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value 'false'
@@ -117,7 +117,7 @@
      INFOOBJECT
      {
       KEY [146450.2.1404665746]
-      OBJECTTYPE ValueHolder // vhConfiguration
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value 'false'
@@ -126,7 +126,7 @@
      INFOOBJECT
      {
       KEY [146874.1.233869144]
-      OBJECTTYPE ValueHolder // vhConfigurationMatrix
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value 'false'
@@ -135,7 +135,7 @@
      INFOOBJECT
      {
       KEY [132894.0.1007052496]
-      OBJECTTYPE ValueHolder // ValueHolderSetDataHolderSelectedPISPIPExtractor
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value 'false'
@@ -144,7 +144,7 @@
      INFOOBJECT
      {
       KEY [108684.0.1782661552]
-      OBJECTTYPE ValueHolder // ValueHolderLastSelected3DDriveDirectory
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value ''
@@ -153,16 +153,16 @@
      INFOOBJECT
      {
       KEY [107654.0.557163713]
-      OBJECTTYPE ValueHolder // ValueHolderUserGroup
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
-       Value ';Administrator;Developer;AggregatedPlanning;Blending;CampaignPlanning;CapacitySmoothing;DatabaseIntegration;Development;Feedback;Groups;InventoryMixBalancing;InventorySpecifications;InventorySupplies;LotSizes;OptimizerBenchmarking;Pegging;ProductPlanningGanttChart;SafetyStockCalculation;SalesDemandPostponement;ShelfLife;SupplyChainMap;SupplySpecifications;TransportationPlanning;Workflow;Functionalities;Software;SOP;Cloud;OnPremise;SupplyChainDirector;SupplyPlanner;DemandPlanner;CollaborativeForecasting;SOAPServerUserGroup;Web_SupplyPlanning;Web_SupplyChainData;Web_CampaignPlanning;Web_Sales;Web_Development;Web;Web_ScenariosAndSettings;Web_Blending;Web_DemandPostponement;Web_Allocation;Web_Financials;Web_Feedbacks;Web_InventoryMixBalancing;Web_SafetyStockCalculation;Web_WorkFlowConfiguration;Web_MyActivities;Web_Integration;Web_OptimizerBenchmarking;Web_SupplyDashboard;Web_Optimizer;Web_LotSizes;Web_ShelfLife;Web_CapacitySmoothing;Web_Inventory;Web_SafetyStock;KpiTrackerAdmin;Web_ProductionPlan;Web_PurchasingPlan;Web_TripPlan;Web_Plan;Web_BlendingPlan;BusinessUnitOM;ProductionPlan;MRPPlanning;AppConfigurators;Implementors'
+       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'
       }
      }
      INFOOBJECT
      {
       KEY [113694.1.227882923]
-      OBJECTTYPE ValueHolder // ValueHolderShowSanityCheck
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value ''
@@ -171,7 +171,7 @@
      INFOOBJECT
      {
       KEY [126224.0.581715]
-      OBJECTTYPE ValueHolder // ValueHolder
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value 'Feasible'
@@ -180,7 +180,7 @@
      INFOOBJECT
      {
       KEY [132894.0.388222255]
-      OBJECTTYPE ValueHolder // ValueHolderImportProfileMessage
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value ''
@@ -189,7 +189,7 @@
      INFOOBJECT
      {
       KEY [127238.1.80067038]
-      OBJECTTYPE ValueHolder // ValueHolderSizing
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value 'true'
@@ -198,7 +198,7 @@
      INFOOBJECT
      {
       KEY [122192.0.103731718]
-      OBJECTTYPE ValueHolder // ValueHolderSanityCheckHighestSeverityMsgCount
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value '39'
@@ -207,7 +207,7 @@
      INFOOBJECT
      {
       KEY [113694.2.1085093394]
-      OBJECTTYPE ValueHolder // ValueHolderIsImportSucceed
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value 'true'
@@ -216,7 +216,7 @@
      INFOOBJECT
      {
       KEY [132448.0.331221783]
-      OBJECTTYPE ValueHolder // ValueHolderScenarioMPSize
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value '1'
@@ -225,7 +225,7 @@
      INFOOBJECT
      {
       KEY [127238.1.502176570]
-      OBJECTTYPE ValueHolder // ValueHolderPeriodRollStatus
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value 'false'
@@ -234,7 +234,7 @@
      INFOOBJECT
      {
       KEY [112884.1.706803944]
-      OBJECTTYPE ValueHolder // ValueHolderSanityCheckHighestSeverity
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value '2'
@@ -243,7 +243,7 @@
      INFOOBJECT
      {
       KEY [132448.0.662420775]
-      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel
+      OBJECTTYPE GUIDataSetLevel
       CONTENTS
       {
        Columns
@@ -283,13 +283,13 @@
      INFOOBJECT
      {
       KEY [136682.0.314428046]
-      OBJECTTYPE GUIComponent // PTFPanelTestController
+      OBJECTTYPE GUIComponent
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [105690.0.246954464]
-        OBJECTTYPE ValueHolder // vhLogging
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value ''
@@ -298,7 +298,7 @@
        INFOOBJECT
        {
         KEY [104342.0.773994982]
-        OBJECTTYPE ValueHolder // vhDoActionInfoReturn
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value ''
@@ -307,7 +307,7 @@
        INFOOBJECT
        {
         KEY [104342.0.867521338]
-        OBJECTTYPE ValueHolder // vhPendingActions
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value ''
@@ -316,7 +316,7 @@
        INFOOBJECT
        {
         KEY [104342.0.867524820]
-        OBJECTTYPE ValueHolder // vhSharedRepository
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value '\\\\CNLEN1845000693\\PTF_Repository\\'
@@ -325,7 +325,7 @@
        INFOOBJECT
        {
         KEY [105690.0.892938783]
-        OBJECTTYPE ValueHolder // vhAsyncActionStatus
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value ''
@@ -334,7 +334,7 @@
        INFOOBJECT
        {
         KEY [105690.0.247211998]
-        OBJECTTYPE ValueHolder // vhResultLogPath
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value ''
@@ -343,7 +343,7 @@
        INFOOBJECT
        {
         KEY [105690.0.892939622]
-        OBJECTTYPE ValueHolder // vhPTFExecutionStatus
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value 'Inactive'
@@ -352,7 +352,7 @@
        INFOOBJECT
        {
         KEY [103546.0.81355542]
-        OBJECTTYPE ValueHolder // vhAutoClose
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value ''
@@ -361,7 +361,7 @@
        INFOOBJECT
        {
         KEY [103546.0.54652306]
-        OBJECTTYPE ValueHolder // vhLogStart
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value ''
@@ -372,7 +372,7 @@
      INFOOBJECT
      {
       KEY [113694.2.1146370710]
-      OBJECTTYPE Toolbar // ToolbarWorkflow
+      OBJECTTYPE Toolbar
       CONTENTS
       {
        'vertical' '50' '0'
@@ -382,19 +382,16 @@
        INFOOBJECT
        {
         KEY [113694.2.1146375645]
-        OBJECTTYPE CustomDrawComponent // SWF_MP_CustomDrawComponentProcessDashboard
-        BASEINFOOBJECTS
-        {
-        }
+        OBJECTTYPE CustomDrawComponent
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [132478.0.288924864]
-          OBJECTTYPE ValueHolder // ValueHolderLastSyncDateTime
+          OBJECTTYPE ValueHolder
           CONTENTS
           {
-           Value '12-10-2023, 10:01:17'
+           Value '12-10-2023, 20:12:19'
           }
          }
         }
@@ -404,7 +401,7 @@
      INFOOBJECT
      {
       KEY [11660.0.360702312]
-      OBJECTTYPE Toolbar // ToolbarSupplyChainPanel
+      OBJECTTYPE Toolbar
       CONTENTS
       {
        'horizontal' '50' '336'
@@ -414,7 +411,7 @@
        INFOOBJECT
        {
         KEY [113694.2.1070869880]
-        OBJECTTYPE ValueHolder // ValueHolderNavigationPanelState
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value 'true'
@@ -423,7 +420,7 @@
        INFOOBJECT
        {
         KEY [113694.2.1070870209]
-        OBJECTTYPE ValueHolder // ValueHolderNavigationPanelSize
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value '336'
@@ -432,13 +429,13 @@
        INFOOBJECT
        {
         KEY [113694.2.1033284312]
-        OBJECTTYPE SplitterWnd // SplitterWnd
+        OBJECTTYPE SplitterWnd
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [113694.2.1033284313]
-          OBJECTTYPE SplitterPane // SplitterPane
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            VISIBLE true
@@ -448,7 +445,7 @@
            INFOOBJECT
            {
             KEY [127238.0.1883499282]
-            OBJECTTYPE TabComponent // TabComponent
+            OBJECTTYPE TabComponent
             CONTENTS
             {
              ActivePageIndex 0
@@ -458,7 +455,7 @@
              INFOOBJECT
              {
               KEY [132448.0.71838188]
-              OBJECTTYPE List // ListNavigationPanelSelection
+              OBJECTTYPE List
               CONTENTS
               {
                Quantorrow := false
@@ -468,16 +465,16 @@
                INFOOBJECT
                {
                 KEY [127238.0.1883514459]
-                OBJECTTYPE ValueHolder // ValueHolderListSelections
+                OBJECTTYPE ValueHolder
                 CONTENTS
                 {
-                 Value 'Stocking points and units'
+                 Value 'Products'
                 }
                }
                INFOOBJECT
                {
                 KEY [127238.0.1883514458]
-                OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel288
+                OBJECTTYPE GUIDataSetLevel
                 CONTENTS
                 {
                  Columns
@@ -508,13 +505,13 @@
              INFOOBJECT
              {
               KEY [127238.0.1883516525]
-              OBJECTTYPE SplitterWnd // SplitterWnd516
+              OBJECTTYPE SplitterWnd
               INFOOBJECTS
               {
                INFOOBJECT
                {
                 KEY [127238.0.1883516526]
-                OBJECTTYPE SplitterPane // SplitterPaneEntities
+                OBJECTTYPE SplitterPane
                 CONTENTS
                 {
                  Size 100
@@ -525,20 +522,17 @@
                  INFOOBJECT
                  {
                   KEY [127238.0.1883516528]
-                  OBJECTTYPE List // ListEntityTreeInPanel
+                  OBJECTTYPE List
                   CONTENTS
                   {
                    Quantorrow := false
-                  }
-                  BASEINFOOBJECTS
-                  {
                   }
                   INFOOBJECTS
                   {
                    INFOOBJECT
                    {
                     KEY [113694.2.1026852831]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelUnit
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -553,7 +547,7 @@
                          Column internal[DataSetDataColumn] [127710.1.1014102531]
                          {
                            Header := 'Name'
-                           Width := 100
+                           Width := 60
                            Subtotals := false
                            Specific
                            {
@@ -573,7 +567,7 @@
                INFOOBJECT
                {
                 KEY [127238.0.1883516541]
-                OBJECTTYPE SplitterPane // SplitterPaneProducts
+                OBJECTTYPE SplitterPane
                 CONTENTS
                 {
                  Size 0
@@ -584,20 +578,17 @@
                  INFOOBJECT
                  {
                   KEY [127238.0.1883516544]
-                  OBJECTTYPE List // ListProductInPanel
+                  OBJECTTYPE List
                   CONTENTS
                   {
                    Quantorrow := false
-                  }
-                  BASEINFOOBJECTS
-                  {
                   }
                   INFOOBJECTS
                   {
                    INFOOBJECT
                    {
                     KEY [113694.2.1025678105]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelProducts
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -611,7 +602,7 @@
                        {
                          Column internal[DataSetDataColumn] [127710.1.791646005]
                          {
-                           Width := 43
+                           Width := 60
                            Subtotals := false
                            Specific
                            {
@@ -630,7 +621,7 @@
                INFOOBJECT
                {
                 KEY [127238.0.1883516552]
-                OBJECTTYPE SplitterPane // SplitterPaneSalesSegment
+                OBJECTTYPE SplitterPane
                 CONTENTS
                 {
                  Size 0
@@ -641,20 +632,17 @@
                  INFOOBJECT
                  {
                   KEY [127238.0.1883516554]
-                  OBJECTTYPE List // ListSalesSegmentInPanel
+                  OBJECTTYPE List
                   CONTENTS
                   {
                    Quantorrow := false
-                  }
-                  BASEINFOOBJECTS
-                  {
                   }
                   INFOOBJECTS
                   {
                    INFOOBJECT
                    {
                     KEY [11660.0.1616690288]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelSalesSegment
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -668,7 +656,7 @@
                        {
                          Column internal[DataSetDataColumn] [127710.1.791646006]
                          {
-                           Width := 100
+                           Width := 60
                            Subtotals := false
                            Specific
                            {
@@ -687,7 +675,7 @@
                INFOOBJECT
                {
                 KEY [131438.0.356639347]
-                OBJECTTYPE SplitterPane // SplitterPanePeriods
+                OBJECTTYPE SplitterPane
                 CONTENTS
                 {
                  Size 0
@@ -698,7 +686,7 @@
                  INFOOBJECT
                  {
                   KEY [131438.0.353247249]
-                  OBJECTTYPE List // ListPeriodSpecificationInPanel
+                  OBJECTTYPE List
                   CONTENTS
                   {
                    Quantorrow := false
@@ -708,7 +696,7 @@
                    INFOOBJECT
                    {
                     KEY [131438.0.371333408]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelPeriodSpecifications
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -723,7 +711,7 @@
                          Column internal[DataSetDataColumn] [131438.0.360619967]
                          {
                            Header := 'Name'
-                           Width := 100
+                           Width := 60
                            Subtotals := false
                            Specific
                            {
@@ -740,7 +728,7 @@
                      INFOOBJECT
                      {
                       KEY [131438.0.402834330]
-                      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelPeriods
+                      OBJECTTYPE GUIDataSetLevel
                       CONTENTS
                       {
                        Columns
@@ -789,13 +777,13 @@
              INFOOBJECT
              {
               KEY [127238.0.1884468404]
-              OBJECTTYPE SplitterWnd // SplitterWnd466
+              OBJECTTYPE SplitterWnd
               INFOOBJECTS
               {
                INFOOBJECT
                {
                 KEY [127238.0.1884468405]
-                OBJECTTYPE SplitterPane // SplitterPane252
+                OBJECTTYPE SplitterPane
                 CONTENTS
                 {
                  VISIBLE true
@@ -805,7 +793,7 @@
                  INFOOBJECT
                  {
                   KEY [127238.0.1884468597]
-                  OBJECTTYPE List // ListBookmarks
+                  OBJECTTYPE List
                   CONTENTS
                   {
                    Quantorrow := false
@@ -815,7 +803,7 @@
                    INFOOBJECT
                    {
                     KEY [130238.0.368320209]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelBookmarks
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -846,7 +834,7 @@
                      INFOOBJECT
                      {
                       KEY [130238.0.368320210]
-                      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelBookmarkChildren
+                      OBJECTTYPE GUIDataSetLevel
                       CONTENTS
                       {
                        Columns
@@ -895,29 +883,26 @@
       SINGLEINSTANCE false
       ID 'Pegging'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Form // FormPegging
+      OBJECTTYPE Form
       CREATETYPE FormPegging
       CONTENTS
       {
        State := normal
        (354,421,990,664)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5507;]TabIdx[1]Selection[FRONT]
-      }
-      BASEINFOOBJECTS
-      {
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5507;]TabIdx[0]Selection[NONE]
       }
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [108486.1.1171911809]
-        OBJECTTYPE SplitterWnd // SplitterWnd1
+        OBJECTTYPE SplitterWnd
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [108486.1.1171911810]
-          OBJECTTYPE SplitterPane // SplitterPane
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            Size 50.132802124834
@@ -928,13 +913,13 @@
            INFOOBJECT
            {
             KEY [108486.1.1171921411]
-            OBJECTTYPE SplitterWnd // SplitterWndDemand_MP_Pegging
+            OBJECTTYPE SplitterWnd
             INFOOBJECTS
             {
              INFOOBJECT
              {
               KEY [108486.1.1171921412]
-              OBJECTTYPE SplitterPane // SplitterPane2
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                Size 52.6515151515151
@@ -945,7 +930,7 @@
                INFOOBJECT
                {
                 KEY [108486.1.1171921414]
-                OBJECTTYPE List // ListDemand
+                OBJECTTYPE List
                 CONTENTS
                 {
                  Quantorrow := false
@@ -955,7 +940,7 @@
                  INFOOBJECT
                  {
                   KEY [108486.1.1171924299]
-                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelDemand_MP
+                  OBJECTTYPE GUIDataSetLevel
                   CONTENTS
                   {
                    Columns
@@ -1100,7 +1085,7 @@
              INFOOBJECT
              {
               KEY [108486.1.1171921413]
-              OBJECTTYPE SplitterPane // SplitterPane3
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                Size 47.3484848484849
@@ -1111,7 +1096,7 @@
                INFOOBJECT
                {
                 KEY [113694.0.1490022148]
-                OBJECTTYPE List // ListDemandPegging
+                OBJECTTYPE List
                 CONTENTS
                 {
                  Quantorrow := false
@@ -1121,7 +1106,7 @@
                  INFOOBJECT
                  {
                   KEY [113694.0.1490022154]
-                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel2
+                  OBJECTTYPE GUIDataSetLevel
                   CONTENTS
                   {
                    Columns
@@ -1222,7 +1207,7 @@
          INFOOBJECT
          {
           KEY [108486.1.1171911811]
-          OBJECTTYPE SplitterPane // SplitterPane1
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            Size 49.867197875166
@@ -1233,13 +1218,13 @@
            INFOOBJECT
            {
             KEY [108486.1.1175693802]
-            OBJECTTYPE SplitterWnd // SplitterWndSupply_MP_Pegging
+            OBJECTTYPE SplitterWnd
             INFOOBJECTS
             {
              INFOOBJECT
              {
               KEY [108486.1.1175693803]
-              OBJECTTYPE SplitterPane // SplitterPane4
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                Size 52.6315789473684
@@ -1250,7 +1235,7 @@
                INFOOBJECT
                {
                 KEY [108486.1.1175693804]
-                OBJECTTYPE List // ListSupply
+                OBJECTTYPE List
                 CONTENTS
                 {
                  Quantorrow := false
@@ -1260,7 +1245,7 @@
                  INFOOBJECT
                  {
                   KEY [108486.1.1175693807]
-                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelSupply_MP
+                  OBJECTTYPE GUIDataSetLevel
                   CONTENTS
                   {
                    Columns
@@ -1384,7 +1369,7 @@
              INFOOBJECT
              {
               KEY [108486.1.1175693810]
-              OBJECTTYPE SplitterPane // SplitterPane5
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                Size 47.3684210526316
@@ -1395,7 +1380,7 @@
                INFOOBJECT
                {
                 KEY [108486.1.1175693811]
-                OBJECTTYPE List // ListSupplyPegging
+                OBJECTTYPE List
                 CONTENTS
                 {
                  Quantorrow := false
@@ -1405,7 +1390,7 @@
                  INFOOBJECT
                  {
                   KEY [108486.1.1175693814]
-                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel4
+                  OBJECTTYPE GUIDataSetLevel
                   CONTENTS
                   {
                    Columns
@@ -1511,23 +1496,20 @@
       SINGLEINSTANCE false
       ID '浜у搧瑙勫垝鏁版嵁鐭╅樀'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Form // FormProductPlanningMatrix
+      OBJECTTYPE Form
       CREATETYPE FormProductPlanningMatrix
       CONTENTS
       {
        State := normal
        (0,0,0,0)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4493;]TabIdx[0]Selection[NONE]
-      }
-      BASEINFOOBJECTS
-      {
+       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4493;]TabIdx[0]Selection[FRONT]
       }
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [127710.1.821866707]
-        OBJECTTYPE CheckBox // CheckBoxFilterByProductLevel
+        OBJECTTYPE CheckBox
         CONTENTS
         {
          Checkstate 1
@@ -1536,19 +1518,16 @@
        INFOOBJECT
        {
         KEY [127710.1.821866918]
-        OBJECTTYPE StringSelection // StringSelectionProductLevel
+        OBJECTTYPE StringSelection
         CONTENTS
         {
          BoundValue '[Leaf product]'
-        }
-        INFOOBJECTS
-        {
         }
        }
        INFOOBJECT
        {
         KEY [127710.1.818312567]
-        OBJECTTYPE MatrixEditor // MatrixEditorProductPlanning
+        OBJECTTYPE MatrixEditor
         CONTENTS
         {
          RowHeight 29
@@ -1561,13 +1540,13 @@
          INFOOBJECT
          {
           KEY [127710.1.819572713]
-          OBJECTTYPE GUIScaleView // MatrixEditorColumns
+          OBJECTTYPE GUIScaleView
           INFOOBJECTS
           {
            INFOOBJECT
            {
             KEY [127710.1.820829335]
-            OBJECTTYPE UserConfigurableInformation // UserConfigurableInformationPeriod
+            OBJECTTYPE UserConfigurableInformation
             CONTENTS
             {
              ObjectText 'VALUE(object.Start())'
@@ -1578,13 +1557,13 @@
          INFOOBJECT
          {
           KEY [127710.1.819572710]
-          OBJECTTYPE GUIScaleView // MatrixEditorRows
+          OBJECTTYPE GUIScaleView
           INFOOBJECTS
           {
            INFOOBJECT
            {
             KEY [127710.1.820300549]
-            OBJECTTYPE UserConfigurableInformation // UserConfigurableInformationPISP
+            OBJECTTYPE UserConfigurableInformation
             CONTENTS
             {
              ObjectText 'VALUE( object.Name() ) (VALUE( object.UnitOfMeasureName() ))'
@@ -1602,29 +1581,26 @@
       SINGLEINSTANCE false
       ID '閿�鍞渶姹�'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Form // FormSalesDemands
+      OBJECTTYPE Form
       CREATETYPE FormSalesDemands
       CONTENTS
       {
        State := normal
        (1344,0,192,928)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4493;]TabIdx[1]Selection[FOCUS]
-      }
-      BASEINFOOBJECTS
-      {
+       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4493;]TabIdx[1]Selection[NONE]
       }
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [124112.0.87054864]
-        OBJECTTYPE SplitterWnd // SplitterWnd1
+        OBJECTTYPE SplitterWnd
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [124112.0.87054865]
-          OBJECTTYPE SplitterPane // SplitterPaneSalesDemand
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            Size 72.2642807983482
@@ -1635,7 +1611,7 @@
            INFOOBJECT
            {
             KEY [124112.0.87250426]
-            OBJECTTYPE List // ListSalesDemand
+            OBJECTTYPE List
             CONTENTS
             {
              Quantorrow := false
@@ -1645,7 +1621,7 @@
              INFOOBJECT
              {
               KEY [124112.0.87253131]
-              OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelSalesDemand
+              OBJECTTYPE GUIDataSetLevel
               CONTENTS
               {
                Columns
@@ -1780,7 +1756,7 @@
          INFOOBJECT
          {
           KEY [124112.0.87054866]
-          OBJECTTYPE SplitterPane // SplitterPaneSalesDemandInPeriod
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            Size 27.7357192016518
@@ -1791,13 +1767,13 @@
            INFOOBJECT
            {
             KEY [116826.1.6886965]
-            OBJECTTYPE SplitterWnd // SplitterWnd
+            OBJECTTYPE SplitterWnd
             INFOOBJECTS
             {
              INFOOBJECT
              {
               KEY [116826.1.6886966]
-              OBJECTTYPE SplitterPane // SplitterPane
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                VISIBLE true
@@ -1807,7 +1783,7 @@
                INFOOBJECT
                {
                 KEY [116826.1.6887229]
-                OBJECTTYPE List // ListAggregatedSalesDemandInPeriod
+                OBJECTTYPE List
                 CONTENTS
                 {
                  Quantorrow := false
@@ -1817,7 +1793,7 @@
                  INFOOBJECT
                  {
                   KEY [116826.1.6887235]
-                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelSalesDemandInPeriod
+                  OBJECTTYPE GUIDataSetLevel
                   CONTENTS
                   {
                    Columns
@@ -1910,7 +1886,7 @@
              INFOOBJECT
              {
               KEY [116826.1.6886967]
-              OBJECTTYPE SplitterPane // SplitterPane552
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                VISIBLE true
@@ -1920,7 +1896,7 @@
                INFOOBJECT
                {
                 KEY [116826.1.6889558]
-                OBJECTTYPE List // ListDisaggregatedSalesDemandInPeriod
+                OBJECTTYPE List
                 CONTENTS
                 {
                  Quantorrow := false
@@ -1930,7 +1906,7 @@
                  INFOOBJECT
                  {
                   KEY [116826.1.6889563]
-                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel
+                  OBJECTTYPE GUIDataSetLevel
                   CONTENTS
                   {
                    Columns
@@ -2035,29 +2011,26 @@
       SINGLEINSTANCE false
       ID '鍔犲伐璺緞'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Form // FormRoutings
+      OBJECTTYPE Form
       CREATETYPE FormRoutings
       CONTENTS
       {
        State := normal
        (0,0,0,0)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5507;]TabIdx[0]Selection[NONE]
-      }
-      BASEINFOOBJECTS
-      {
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5507;]TabIdx[1]Selection[NONE]
       }
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [136682.0.365497231]
-        OBJECTTYPE SplitterWnd // SplitterWnd1
+        OBJECTTYPE SplitterWnd
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [136682.0.365497232]
-          OBJECTTYPE SplitterPane // SplitterPane
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            VISIBLE true
@@ -2067,7 +2040,7 @@
            INFOOBJECT
            {
             KEY [136682.0.365497233]
-            OBJECTTYPE List // ListRouting
+            OBJECTTYPE List
             CONTENTS
             {
              Quantorrow := false
@@ -2077,7 +2050,7 @@
              INFOOBJECT
              {
               KEY [136682.0.365497235]
-              OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelRouting
+              OBJECTTYPE GUIDataSetLevel
               CONTENTS
               {
                Columns
@@ -2322,7 +2295,7 @@
          INFOOBJECT
          {
           KEY [136682.0.365497250]
-          OBJECTTYPE SplitterPane // SplitterPane1
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            VISIBLE true
@@ -2332,19 +2305,16 @@
            INFOOBJECT
            {
             KEY [136682.0.365497251]
-            OBJECTTYPE SplitterWnd // SplitterWnd2
+            OBJECTTYPE SplitterWnd
             INFOOBJECTS
             {
              INFOOBJECT
              {
               KEY [136682.0.365497252]
-              OBJECTTYPE SplitterPane // SplitterPane2
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                VISIBLE true
-              }
-              INFOOBJECTS
-              {
               }
              }
             }
@@ -2356,7 +2326,7 @@
        INFOOBJECT
        {
         KEY [136682.0.365502343]
-        OBJECTTYPE CheckBox // CheckBoxFilterProduct
+        OBJECTTYPE CheckBox
         CONTENTS
         {
          Checkstate 1
@@ -2364,6 +2334,882 @@
        }
       }
      }
+     INFOOBJECT
+     {
+      KEY [414702.0.340554698]
+      SINGLEINSTANCE false
+      ID '鍔熻兘娴嬭瘯鎸夐挳'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Form
+      CREATETYPE FormTestButtonCollection
+      CONTENTS
+      {
+       State := normal
+       (0,0,0,0)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5507;]TabIdx[3]Selection[FOCUS]
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [514.0.2141306]
+      SINGLEINSTANCE false
+      ID '鍚庡彴杈撳嚭'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Dialog
+      CREATETYPE dlgServerMessages
+      CONTENTS
+      {
+       State := normal
+       (0,0,0,0)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5507;]TabIdx[2]Selection[NONE]
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [514.0.2141287]
+        OBJECTTYPE List
+        CONTENTS
+        {
+         Quantorrow := false
+        }
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [536.0.860799]
+          OBJECTTYPE GUIDataSetLevel
+          CONTENTS
+          {
+           Columns
+           {
+             Definition := [514.0.2141302]
+             {
+               [514.0.2141305]
+             }
+             SubTotals := true
+             Visible
+             {
+               Column internal[DataSetDataColumn] [514.0.2141305]
+               {
+                 Header := 'Message'
+                 Width := 100
+                 Subtotals := false
+                 Specific
+                 {
+                   DataPath := 'Message [1.2.530]'
+                 }
+               }
+             }
+           }
+           Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="internal[ClientReport]">\n  <GEBFiltering Key="@Default_Filter1" TargetType="internal[ClientReport]">\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="@Message1" ElementType="internal[ClientReport]" ValueType="String">\n        <ColumnID>[414702.1.53972260]</ColumnID>\n        <BaseName>Message</BaseName>\n        <Name>Message</Name>\n        <Title>Message</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>true</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Message</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@3">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@4" Column="@Message1">\n          <ColumnID>[414702.1.53972260]</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'
+           DataMemberSort 'Index [1.2.531]' true true
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [414702.0.137524322]
+      SINGLEINSTANCE false
+      ID 'Analysis GlobalOTDTable'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Form
+      CREATETYPE frmStandardAnalysisGlobalOTDTable
+      CONTENTS
+      {
+       State := normal
+       (0,0,0,0)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4493;]TabIdx[2]Selection[NONE]
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [530.0.3531801]
+        OBJECTTYPE SplitterWnd
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [530.0.3531802]
+          OBJECTTYPE SplitterPane
+          CONTENTS
+          {
+           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.0.340560328]' 0
+                 
+                   NAME 'Analysis1'
+                 }
+                 COLUMNSETTINGS
+                 {
+                   CapacityAllocationResults
+                   {
+                     Columns
+                     {
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [414702.1.64628063]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'Date [414702.0.388471425]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.64628064]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'Description [414702.0.388471435]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.64628065]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'Division [414702.0.340560477]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.64628066]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'ID [414702.0.388471445]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.64628067]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'ManufacturedDate [414702.0.388471485]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.64628068]
+                         {
+                           Width := 173
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'ModuleBase [414702.0.340560467]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.64628069]
+                         {
+                           Width := 199
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'ModuleMaterialCode [414702.0.340560428]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.64628070]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'ModuleMeasurementUnit [414702.0.340560457]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.64628071]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'NumberOfModules [414702.0.340560441]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.64628072]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'NumberOfPanels [414702.0.340560390]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.64628073]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'PanelBase [414702.0.340560370]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.64628074]
+                         {
+                           Width := 180
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'PanelMaterialCode [414702.0.340560380]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.64628075]
+                         {
+                           Width := 231
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'PanelMeasurementUnit [414702.0.340560403]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.64628076]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'ProductID [414702.0.388471455]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.64628077]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'RequirementDate [414702.0.340560505]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.64628078]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'StockingPointID [414702.0.388471465]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.64628079]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'UserQuantity [414702.0.388471475]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.64628080]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'VersionNumber [414702.0.340560354]'
+                           }
+                         }
+                       }
+                     }
+                   }
+                 }
+                 CURRENT 'Analysis1'
+                 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 := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Name [1.2.2366]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [530.1.25480394]
+                       {
+                         Header := 'Description'
+                         Width := 100
+                         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 102 50
+                 COLUMN 103 50
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+         INFOOBJECT
+         {
+          KEY [530.0.3531803]
+          OBJECTTYPE SplitterPane
+          CONTENTS
+          {
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [530.0.3531811]
+            OBJECTTYPE SplitterWnd
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [530.0.3531812]
+              OBJECTTYPE SplitterPane
+              CONTENTS
+              {
+               Size 44.6569920844327
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [530.0.3532136]
+                OBJECTTYPE SplitterWnd
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [530.0.3532137]
+                  OBJECTTYPE SplitterPane
+                  CONTENTS
+                  {
+                   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 := 100
+                                 Subtotals := false
+                                 Specific
+                                 {
+                                   DataPath := 'Name [1.2.34]'
+                                 }
+                               }
+                               Column internal[DataSetDataColumn] [530.1.32701549]
+                               {
+                                 Header := 'Description'
+                                 Width := 100
+                                 Subtotals := false
+                                 Specific
+                                 {
+                                   DataPath := 'Description [1.2.2564]'
+                                 }
+                               }
+                               Column internal[DataSetDataColumn] [678.0.64301138]
+                               {
+                                 Header := 'astype(UITypeDataMember).DataType.FullName'
+                                 Width := 100
+                                 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
+                  {
+                   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 207
+                        }
+                       }
+                      }
+                     }
+                    }
+                   }
+                  }
+                 }
+                }
+               }
+              }
+             }
+             INFOOBJECT
+             {
+              KEY [530.0.3531813]
+              OBJECTTYPE SplitterPane
+              CONTENTS
+              {
+               Size 55.3430079155673
+               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.64628063]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Date [414702.0.388471425]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.64628064]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Description [414702.0.388471435]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.64628065]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Division [414702.0.340560477]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.64628066]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ID [414702.0.388471445]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.64628067]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ManufacturedDate [414702.0.388471485]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.64628068]
+                       {
+                         Width := 173
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ModuleBase [414702.0.340560467]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.64628069]
+                       {
+                         Width := 199
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ModuleMaterialCode [414702.0.340560428]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.64628070]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ModuleMeasurementUnit [414702.0.340560457]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.64628071]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'NumberOfModules [414702.0.340560441]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.64628072]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'NumberOfPanels [414702.0.340560390]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.64628073]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'PanelBase [414702.0.340560370]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.64628074]
+                       {
+                         Width := 180
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'PanelMaterialCode [414702.0.340560380]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.64628075]
+                       {
+                         Width := 231
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'PanelMeasurementUnit [414702.0.340560403]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.64628076]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ProductID [414702.0.388471455]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.64628077]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'RequirementDate [414702.0.340560505]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.64628078]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'StockingPointID [414702.0.388471465]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.64628079]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'UserQuantity [414702.0.388471475]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.64628080]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'VersionNumber [414702.0.340560354]'
+                         }
+                       }
+                     }
+                   }
+                  }
+                 }
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
     }
    }
   }
diff --git a/_var/_Main/ProjSettings/MacroPlannerWebApp/Views/ManufactureLT.vw b/_var/_Main/ProjSettings/MacroPlannerWebApp/Views/ManufactureLT.vw
new file mode 100644
index 0000000..76e471c
--- /dev/null
+++ b/_var/_Main/ProjSettings/MacroPlannerWebApp/Views/ManufactureLT.vw
@@ -0,0 +1,239 @@
+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: false
+        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
+            }
+          }
+        }
+      }
+      form_SWF_DialogWorkflowParameter
+      {
+        title: 'S&OP Workflow Parameters'
+        shown: true
+        componentID: 'SWF_DialogWorkflowParameter'
+        layout
+        {
+          mode: 'dockright'
+          index: 2
+        }
+        components
+        {
+          SWF_DialogWorkflowParameter_PanelCurrentDate
+          {
+            sizeRatio: 1
+          }
+          SWF_DialogWorkflowParameter_PanelIntegration
+          {
+            sizeRatio: 1
+          }
+          SWF_DialogWorkflowParameter_PanelSynchronizeRoles
+          {
+            sizeRatio: 1
+          }
+          SWF_DialogWorkflowParameter_PanelRequestDatasetSync
+          {
+            sizeRatio: 1
+          }
+          SWF_DialogWorkflowParameter_PanelKickQueues
+          {
+            sizeRatio: 1
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: 'ActionBarPageData'
+    group: ''
+    index: 1
+    image: 'CODE_LINE'
+    description: '鍒堕�燣T'
+  }
+  formatversion: 2
+  id: 'ManufactureLT'
+  name: 'ManufactureLT'
+  isglobal: false
+  isroot: true
+}

--
Gitblit v1.9.3