From ff1d40a1a235da7c3bdfa26070af267f19c7a3d3 Mon Sep 17 00:00:00 2001
From: renhao <renhui.hao@capgemini.com>
Date: 星期三, 18 十月 2023 09:29:50 +0800
Subject: [PATCH] Merge branch 'dev'

---
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Component_ListPanelMaterialTM.def                                                                                 |    4 
 _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                                                                                                     |    4 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def                                                                                                |   16 
 _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/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_CreateIfNotExist.qbl                                                                                                  |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Method_NewWorkOrderType.def                                                                               |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/Response_DataHolderPanelTianHua_OnCreated.def                                                                  |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Component_ListCapacityAndSaleBudgeFilterItem.def                                                     |    4 
 _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_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                                                                                                                 |    8 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_update.qbl                                                                                                       |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonGenerateTestData_OnClick.def                                                                    |    8 
 _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                                                                                                                |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def                                                                   |   14 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_saveData.qbl                                                                                                    |    2 
 _Main/BL/Type_VersionStatus/StaticMethod_CreateOrUpdate.qbl                                                                                                                   |    2 
 _Main/BL/Type_PRHistoryData/Method_PrintCall.qbl                                                                                                                              |    2 
 _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_CapacityAllocationResultsRuleConfiguration/StaticMethod_Export.qbl                                                                                              |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_ButtonGenerateCapacityAllocationR#39.def                          |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Response_pnlActions_btnCancel_OnClick.def                                                                        |   15 
 _Main/BL/Type_VersionControl/StaticMethod_CreateNewVersion.qbl                                                                                                                |    2 
 _Main/BL/Type_MacroPlan/Method_DoASyncCreateLog.qbl                                                                                                                           |    8 
 _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/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_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/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl                                                                                            |   26 
 _Main/BL/Type_PanelMaterialSportsHealth/StaticMethod_ReceiveDataGeneration.qbl                                                                                                |   14 
 _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl                                                                                                             |   12 
 _Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlActions_btnOk_OnClick.def                                                                                  |    2 
 _Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl                                                                            |    2 
 _Main/BL/Type_ManufactureLTImputation/StaticMethod_Transfer#25.qbl                                                                                                            |    4 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_ProductInLane.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/BL/Relations/Relation_CapacityAllocationResultsRuleConfiguration_GlobalOTDSOP_GlobalOTDSO.qbl                                                                           |   23 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingProductData.qbl                                                                                                                  |   94 +
 _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/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_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 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl                                                                                                  |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_ListCapacityAllocationResultsRuleConfiguration_MenuGenerateByPeggin.def         |    2 
 _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 
 _Main/BL/Relations/Relation_ManufactureLTImputation_GlobalOTDSOP_GlobalOTDSOP_ManufactureLTImpu.qbl                                                                           |   23 
 _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_CapacityAndSaleBudgeCompareItemColumn/StaticMethod_CreateIfNotExist.qbl                                                                                         |    2 
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl                                                                                                 |   46 
 _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/UI/MacroPlannerWebApp/Component_FormManufactureLT/Component_ListManufactureLT#943.def                                                                                   |    4 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_SynchronizeData.qbl                                                                                               |    8 
 _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/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/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                                                                                   |    2 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_SynchronizeInventoryTargets.qbl                                                                                  |    4 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_CreateIfNotExist.qbl                                                                                             |    2 
 _Main/BL/Dataset_GlobalOTDSOP/_ROOT_Dataset_GlobalOTDSOP.qbl                                                                                                                  |    9 
 _Main/BL/Type_PriorityResult/StaticMethod_CalculateBracketScore.qbl                                                                                                           |    2 
 _var/_Main/ProjSettings/MacroPlanner/ColSch/Global.cs                                                                                                                         |  574 ++++----
 _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/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Component_ListPRHistoryData#844.def                                                                                   |    4 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl                                                                                               |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Response_PanelPRHistoryButton_ButtonExportPRHistory_OnClick.def                                                       |    2 
 _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                                                                                                          |   40 
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration3.qbl                                                                                                 |   10 
 _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_FormCapacityAllocationResultsRuleConfiguration/Component_ListCapacityAllocationResultsRuleConfiguration.def                             |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/Response_DataHolderPanelTianHua_OnDataChanged.def                                                              |    2 
 _Main/BL/Type_GlobalOTDSOP/Method_SynchronizeOrders.qbl                                                                                                                       |    0 
 _Main/BL/Type_PRHistoryData/StaticMethod_Export.qbl                                                                                                                           |    2 
 _Main/BL/Type_GlobalOTDSOP/Method_ReceivingPanelMaterials.qbl                                                                                                                 |    0 
 _Main/UI/MacroPlannerWebApp/Component_DialogFusionData/Response_pnlReceiveDatas_lblTianHua_OnCreated.def                                                                      |    2 
 _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/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                                                                                                                       |   12 
 _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/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/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuScenarioDataDistribution_OnClick.def                                        |   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_ManufactureLTImputation/StaticMethod_CreateOrUpdate.qbl                                                                                                         |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Response_DataHolderPanelTM18_OnCreated.def                                                                        |    2 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingProductInLaneData.qbl                                                                                                            |   26 
 _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/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Response_pnlActions_btnOk_OnClick.def                                                                            |   30 
 _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                                                                                                    |    2 
 _Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning.qbl                                                                                                                      |    5 
 _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_MacroPlan/Method_DoASyncMappingOperationBOMDataRouting.qbl                                                                                                      |  102 +
 _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/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/BL/Type_DMF_CustomLogic/Method_OnFinished.qbl                                                                                                                           |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSportsHealth/Component_ListPanelMaterialSportsHealth.def                                                               |    4 
 _Main/BL/Type_VersionControl/StaticMethod_CreateNewSceneVersion.qbl                                                                                                           |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl                                                                                                |    2 
 _Main/BL/Type_PanelMaterialVehicle/StaticMethod_ReceiveDataGeneration.qbl                                                                                                     |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick.def                                              |    2 
 _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/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompareExport.qbl                                                                                                       |    0 
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_ObtainTheFinalOutputProduct.qbl                                                                                          |    4 
 _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_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/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                                                                                                                   |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTM18/Response_DataHolderPanelTM18_OnDataChanged.def                                                                    |    2 
 _Main/BL/Type_PanelMaterialTM18/StaticMethod_ReceiveDataGeneration.qbl                                                                                                        |   14 
 _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_MenuEdit_OnClick.def                                                                          |    3 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByMonth.qbl                                                                                                 |   93 +
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def                                                                         |    2 
 _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/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                                                                                                                                                                     |   21 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioSelection.def                                                                    |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def                                     |    4 
 _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                                                                                                                          |   21 
 _Main/BL/Type_PRData/Method_DoCall.qbl                                                                                                                                        |    5 
 259 files changed, 3,325 insertions(+), 814 deletions(-)

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_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_GlobalOTDTable_GlobalOTDTable_ManufactureLT.qbl b/_Main/BL/Relations/Relation_ManufactureLTImputation_GlobalOTDTable_GlobalOTDTable_ManufactureLT.qbl
deleted file mode 100644
index 3a23be5..0000000
--- a/_Main/BL/Relations/Relation_ManufactureLTImputation_GlobalOTDTable_GlobalOTDTable_ManufactureLT.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation ManufactureLTImputation_GlobalOTDTable_GlobalOTDTable_ManufactureLTImputation
-{
-  #keys: '1[414384.0.964611377]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.964611379][414384.0.964611378][414384.0.964611380]'
-    Cardinality: '0to1'
-    ObjectDefinition: ManufactureLTImputation
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide ManufactureLTImputation
-  {
-    #keys: '3[414384.0.964611382][414384.0.964611381][414384.0.964611383]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    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
index 2b6d0a6..867dabd 100644
--- a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate1.qbl
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate1.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 StaticMethod CreateDate1 (
   MacroPlan macroPlan,
-  GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP globalOTDSOP,
   DependentDemand dependentDemand,
   NewSupply newSupply,
   Supply_MP firstNewSupply,
@@ -18,25 +18,25 @@
     
     if ( capacityAllocationResultsRuleConfiguration.PanelMaterialCode() = productID ) {
       info( "鎵惧埌浜嗭紒锛侊紒" );
-      globalOTDTable.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()
-                                               );
+      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 1c16b4d..a10d437 100644
--- a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration3.qbl
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration3.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 StaticMethod IterativeGeneration3 (
   MacroPlan macroPlan,
-  GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP globalOTDSOP,
   Supply_MP smp,
   Supply_MP firstSMP,
   Number numberOfPlies,
@@ -27,9 +27,9 @@
                 fulfillmentQuantity := ( dd.Quantity() / ns.Quantity() ) * fulfillmentQuantity;
                 info( "--------------------------------------------------------------" );
                 if ( not isnull( capacityAllocationResultsRuleConfiguration ) ) {
-                  CapacityAllocationResults::CreateDate1( macroPlan, globalOTDTable, dd, ns, firstSMP, capacityAllocationResultsRuleConfiguration, fulfillmentQuantity );
+                  CapacityAllocationResults::CreateDate1( macroPlan, globalOTDSOP, dd, ns, firstSMP, capacityAllocationResultsRuleConfiguration, fulfillmentQuantity );
                 }
-                CapacityAllocationResults::IterativeGeneration3( macroPlan, globalOTDTable, smp1, firstSMP, numberOfPlies, fulfillmentQuantity, capacityAllocationResultsRuleConfiguration );
+                CapacityAllocationResults::IterativeGeneration3( macroPlan, globalOTDSOP, smp1, firstSMP, numberOfPlies, fulfillmentQuantity, capacityAllocationResultsRuleConfiguration );
                 numberOfPlies--;
               }
             }
@@ -45,9 +45,9 @@
               numberOfPlies++;
               info( "--------------------------------------------------------------" );
               if ( not isnull( capacityAllocationResultsRuleConfiguration ) ) {
-                CapacityAllocationResults::CreateDate1( macroPlan, globalOTDTable, targetDependentDemand, ns, firstSMP, capacityAllocationResultsRuleConfiguration, f.Quantity() );
+                CapacityAllocationResults::CreateDate1( macroPlan, globalOTDSOP, targetDependentDemand, ns, firstSMP, capacityAllocationResultsRuleConfiguration, f.Quantity() );
               }
-              CapacityAllocationResults::IterativeGeneration3( macroPlan, globalOTDTable, smp1, firstSMP, numberOfPlies, f.Quantity(), capacityAllocationResultsRuleConfiguration );
+              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 416ea24..bc20514 100644
--- a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Test.qbl
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Test.qbl
@@ -2,14 +2,14 @@
 #parent: #root
 StaticMethod Test (
   MacroPlan macroPlan,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDSOP globalOTDSOP
 )
 {
   TextBody:
   [*
-    globalOTDTable.CapacityAllocationResults( relflush );
+    globalOTDSOP.CapacityAllocationResults( relflush );
     
-    capacityAllocationResultsRuleConfiguration := select( globalOTDTable, CapacityAllocationResultsRuleConfiguration, carrc, 
+    capacityAllocationResultsRuleConfiguration := select( globalOTDSOP, CapacityAllocationResultsRuleConfiguration, carrc, 
                                                           carrc.ModuleMaterialCode() = "ProXOver 1 D2.6 A" and
                                                           carrc.StockingPointID() = "Carco Philadelphia" );
     
@@ -18,7 +18,7 @@
       traverse ( pisp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ).Supply_MP, smp, 
                  /*smp.ProductInStockingPointInPeriodPlanning().Start().Date() = Date::Construct( 2020, 4, 7 ) and*/
                  smp.Quantity() > 0 ) {                                                                  
-        CapacityAllocationResults::IterativeGeneration3( macroPlan, globalOTDTable, smp, smp, 1, smp.Quantity(), capacityAllocationResultsRuleConfiguration );
+        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
index a56cf1b..e12a971 100644
--- a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Test1.qbl
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Test1.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 StaticMethod Test1 (
   MacroPlan macroPlan,
-  GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP globalOTDSOP,
   CapacityAllocationResultsRuleConfigurations capacityAllocationResultsRuleConfigurations
 )
 {
@@ -14,7 +14,7 @@
       traverse ( pisp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ).Supply_MP, smp, 
                  /*smp.ProductInStockingPointInPeriodPlanning().Start().Date() = Date::Construct( 2020, 4, 7 ) and*/
                  smp.Quantity() > 0 ) {                                                                  
-        CapacityAllocationResults::IterativeGeneration3( macroPlan, globalOTDTable, smp, smp, 1, smp.Quantity(), carrc );
+        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_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..082e4a6 100644
--- a/_Main/BL/Type_DMF_CustomLogic/Method_OnFinished.qbl
+++ b/_Main/BL/Type_DMF_CustomLogic/Method_OnFinished.qbl
@@ -28,6 +28,9 @@
     // 鍒涘缓澶╅┈鍏ㄥ眬鏁版嵁闆�
     GlobalOTDTable::OnServerStartup();
     
+    // 鍒涘缓澶╅┈SOP鍏ㄥ眬鏁版嵁闆�
+    GlobalOTDSOP::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_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_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/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_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 96%
rename from _Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompare.qbl
rename to _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
index 6937389..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,7 +35,7 @@
     this.CapacityAndSaleBudgeCompareItemRow( relflush );
     this.CapacityAndSaleBudgeCompareItemColumn( relflush );
     // ====姹囨�绘墍鏈夊嚭鐜扮殑浜у搧====
-    historyData := selectset( this, Global_MappingAnnualBudgetData, item, true );
+    historyData := selectset( otdTable, Global_MappingAnnualBudgetData, item, true );
     debuginfo( "historyData : " + [String]historyData.Size() );
     
     traverse( historyData, Elements, one ) {
@@ -77,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 );
         }
@@ -120,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_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_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_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_MacroPlan/Method_DoASyncCreateLog.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncCreateLog.qbl
new file mode 100644
index 0000000..615b14d
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncCreateLog.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Method DoASyncCreateLog (
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody: 'Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, "DataDistribution", "" );'
+}
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/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..b543dcf
--- /dev/null
+++ "b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043896.qbl"
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DoASync (
+  MacroPlan macroPlan,
+  String businessTypeStr,
+  Boolean isKeyProduct,
+  Boolean createPurchaseSupplyMaterial,
+  const GlobalOTDTable globalOTDTable
+)
+{
+  Description: '鍗曟鍚屾'
+  TextBody:
+  [*
+    // yypsybs Aug-17-2023 (created)
+    businessTypes := construct( Strings );
+    if( businessTypeStr.Length() > 0 ) {
+        businessTypes := businessTypeStr.Tokenize( ',' );
+    }
+    MacroPlan::DoASync( macroPlan, businessTypes, isKeyProduct, createPurchaseSupplyMaterial ,globalOTDTable);
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/StaticMethod_DoASync.qbl b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync.qbl
new file mode 100644
index 0000000..f0f1769
--- /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() )
+    //-> DoASyncCreateLog( globalOTDTable )
+    -> MacroPlan::DoASync( businessTypeStr,
+                           isKeyProduct,
+                           createPurchaseSupplyMaterial,
+                           globalOTDTable
+                          )
+    -> Exception()
+    -> MacroPlan::DoASyncOnException( globalOTDTable );
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/StaticMethod_DoASyncOnException.qbl b/_Main/BL/Type_MacroPlan/StaticMethod_DoASyncOnException.qbl
new file mode 100644
index 0000000..92fef0b
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/StaticMethod_DoASyncOnException.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DoASyncOnException (
+  Exception exception,
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, "DataDistribution", "" );
+    globalOTDTable.SettingFailureDetails( exception.ErrorNumber(), exception.Message(), "DataDistribution", "鏁版嵁鍒嗗彂" );
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/StaticMethod_DoASyncSuccess.qbl b/_Main/BL/Type_MacroPlan/StaticMethod_DoASyncSuccess.qbl
new file mode 100644
index 0000000..dfc34f1
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/StaticMethod_DoASyncSuccess.qbl
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DoASyncSuccess (
+  Void void,
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    // hongjli Oct-15-2023 (created)
+  *]
+}
diff --git a/_Main/BL/Type_ManufactureLTImputation/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_ManufactureLTImputation/StaticMethod_CreateOrUpdate.qbl
index 27fc818..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 (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   String orgCode,
   String productId,
   String desc
diff --git "a/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Transfer\04325.qbl" "b/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Transfer\04325.qbl"
index 2845682..7e45171 100644
--- "a/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Transfer\04325.qbl"
+++ "b/_Main/BL/Type_ManufactureLTImputation/StaticMethod_Transfer\04325.qbl"
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Transfer (
-  MacroPlan macroPlan,
-  GlobalOTDTable parent
+  const MacroPlan macroPlan,
+  GlobalOTDSOP parent
 )
 {
   TextBody:
diff --git a/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate.qbl
index 662ef7e..3739dd6 100644
--- a/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate.qbl
+++ b/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate.qbl
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateOrUpdate (
-  Operation op,
-  GlobalOTDTable parent
+  const Operation op,
+  GlobalOTDSOP parent
 ) as ManufactureLTProcessSection
 {
   TextBody:
diff --git a/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate0.qbl b/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate0.qbl
index 533457a..6ec4b16 100644
--- a/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate0.qbl
+++ b/_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate0.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateOrUpdate (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   MacroPlan macroPlan,
   String orgCode,
   String productId,
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_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 dff5567..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
@@ -18,7 +19,7 @@
     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.qbl b/_Main/BL/Type_PRHistoryData/StaticMethod_Export.qbl
index 132c301..02ee2f6 100644
--- a/_Main/BL/Type_PRHistoryData/StaticMethod_Export.qbl
+++ b/_Main/BL/Type_PRHistoryData/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_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/UI/MacroPlanner/Component_DialogManufactureLTImputation/Method_New\043221.def" "b/_Main/UI/MacroPlanner/Component_DialogManufactureLTImputation/Method_New\043221.def"
index e6a3de6..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[GlobalOTDTable] 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 fb1599a..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,
-  GlobalOTDTable owner
+  GlobalOTDSOP owner
 ) as ManufactureLTImputation id:Method_DialogManufactureLTImputation_New
 {
   #keys: '[414384.0.703976686]'
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/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/_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/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 9d16e0c..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,20 +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 {
         data.Delete();
-        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()
+                                                                );
       }
       
       
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/Method_OnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
index d2fe1c9..d2aa450 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
@@ -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
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..f2e440f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogDataDistribution/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[414702.1.84941735]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ApplyChanges();
+      
+      businessType := select( GlobalOTDTable, 
+                              BusinessType, 
+                              b, 
+                              b.ScenarioName() = dropDownStringListGeneral.Text()
+                             );
+      
+      //Global_BrokerExecuteLog::CreateInOperation( GlobalOTDTable, "DataDistribution", ApplicationMacroPlanner.GetUserName() );
+      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_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_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 8e85a2c..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'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_ListCapacityAllocationResultsRuleConfiguration_MenuGenerateByPeggin.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_ListCapacityAllocationResultsRuleConfiguration_MenuGenerateByPeggin.def
index 3bbd52f..1cafe5e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_ListCapacityAllocationResultsRuleConfiguration_MenuGenerateByPeggin.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_ListCapacityAllocationResultsRuleConfiguration_MenuGenerateByPeggin.def
@@ -16,7 +16,7 @@
   {
     Body:
     [*
-      CapacityAllocationResults::Test1( MacroPlan, GlobalOTDTable, selection );
+      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/Component_ListCapacityAndSaleBudge.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
index a0f1d91..4af954a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
@@ -38,6 +38,6 @@
   ]
   Properties:
   [
-    Taborder: 3
+    Taborder: 2
   ]
 }
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
index e7dcebd..7b8522f 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonGenerateTestData_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonGenerateTestData_OnClick.def
@@ -15,10 +15,10 @@
     [*
       GlobalOTDTable.InitTestDataByYear( MacroPlan, DataHolderCapacityAndSaleBudgeFilterYear.Data() );
       Global_MappingAnnualBudgetData::SetOrgCodeFromForecast( GlobalOTDTable );
-      GlobalOTDTable.RefreshCapacityAndSaleBudgeFilter( true );
-      CapacityAndSaleBudgeFilterItem::Initial( GlobalOTDTable );
-      CapacityAndSaleBudgeFilterYear::Initial( GlobalOTDTable );
-      CapacityAndSaleBudgeFilterMonth::Initial( 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/_ROOT_Component_FormCapacityAndSaleBudge.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
index 995281a..7c799db 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
@@ -19,18 +19,6 @@
         Taborder: 1
       ]
     }
-    Component ButtonExportTest
-    {
-      #keys: '[414384.0.914711826]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Image: 'EXPORT1'
-        Label: '瀵煎嚭娴嬭瘯'
-        Taborder: 2
-        Visible: false
-      ]
-    }
     Component ButtonGenerateTestData
     {
       #keys: '[414384.0.971540693]'
@@ -38,7 +26,7 @@
       Properties:
       [
         Image: 'IMPORT1'
-        Label: '鏍规嵁绛涢�夋湀浠界敓鎴愭祴璇曟暟鎹�'
+        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_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_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_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_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 d71a6ee..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: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'ManufactureLTImputation'
       ]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/Response_ButtonLoad_OnClick\043417.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/Response_ButtonLoad_OnClick\043417.def"
index fca0b35..d5ba2d8 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/Response_ButtonLoad_OnClick\043417.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormManufactureLT/Response_ButtonLoad_OnClick\043417.def"
@@ -13,7 +13,7 @@
   {
     Body:
     [*
-      ManufactureLTImputation::Transfer( MacroPlan, GlobalOTDTable );
+      ManufactureLTImputation::Transfer( MacroPlan, GlobalOTDSOP );
     *]
     GroupServerCalls: false
   }
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 e83383e..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,7 +13,7 @@
   {
     Body:
     [*
-      Application.Download( "PRHistoryData.xlsx", PRHistoryData::Export( GlobalOTDTable ) );
+      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_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_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_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/_var/_Main/ProjSettings/MacroPlanner/ColSch/Global.cs b/_var/_Main/ProjSettings/MacroPlanner/ColSch/Global.cs
index 770884d..a4bffc1 100644
--- a/_var/_Main/ProjSettings/MacroPlanner/ColSch/Global.cs
+++ b/_var/_Main/ProjSettings/MacroPlanner/ColSch/Global.cs
@@ -95,293 +95,293 @@
     ColorSchemeChartEntry
     {
       Definition: 'CurrencyRates'
-      ChartEntryValue { Access: 738805.577453704 Color: '$B22900' Value: 'HUF' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B2004D' Value: '娓厓' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$35B2A6' Value: '榛庡反瀚╅晳' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$AFE572' Value: '涔屽吂鍒厠鏂潶鑻忓' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$0B00B2' Value: '鍦簹閭e厓' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$72E58B' Value: '鑻忎腹绗撼灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$729CE5' Value: '鎵樻媺灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E572CC' Value: '娲ュ反甯冮煢鍏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$6AFE00' Value: '鏍兼煡灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$72E5CE' Value: '鑿插緥瀹炬瘮绱�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E5A872' Value: 'TRY' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$981E4D' Value: '绗撼灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$003FFF' Value: 'DKK' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$35B2B0' Value: '闃挎浖閲屼簹灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FEA54C' Value: '宸存尝浜�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$6BB235' Value: '鏅哄埄姣旂储' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$98824C' Value: 'ZAR' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$144ECB' Value: '宸磋タ闆烽樋灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B23542' Value: '濉旀媺' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E572DF' Value: '鍊哄埜甯傚満鍗曚綅 - 娆ф床璁板笎鍗曚綅 17 (E.U.A.-17)' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4CFE6A' Value: '鎽╁皵澶氱摝鍒椾紛' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$00B282' Value: '涔熼棬绗撼灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$7B4C98' Value: '澧ㄨタ鍝ユ瘮绱�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$A000B2' Value: '鏂噷鍏板崱鍗㈡瘮' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FE4C6A' Value: '鍊哄埜甯傚満鍗曚綅 - 娆ф床璐у竵鍚堟垚鍗曚綅 (EURCO)' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$7C35B2' Value: 'CFA 娉曢儙 BEAC' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$984C89' Value: 'CHF' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$6A4CFE' Value: '婢抽棬鍏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B28635' Value: '鍠滃悕' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E5C472' Value: '鍔犵撼濉炶开锛堟棫锛�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CB5178' Value: '鍗㈡椇杈炬硶閮�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$5BFE4C' Value: '瀹夐亾灏旀瘮濉炲' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E1FE4C' Value: '宸村反澶氭柉鍏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$8200B2' Value: 'EEK' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4CFED2' Value: '闃垮瘜姹楀凹' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$754C98' Value: '鍏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$981E94' Value: '瑗跨彮鐗欐瘮濉炲' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4C9862' Value: '鍒氭灉娉曢儙' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$143FCB' Value: '鍙厬鎹㈡瘮濉炲甯愭埛' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$6E4C98' Value: 'CNY' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$63984C' Value: '鎽╂礇鍝ヨ开鎷夊' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$2DE583' Value: '灏兼硦灏斿崲姣�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E5742D' Value: '鎷夐噷' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$70984C' Value: 'Uruguary Peso en Unidades Indexadas' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$69984C' Value: '濉炲皵缁翠簹绗撼灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4CFEE1' Value: '绾︽棪绗撼灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$411E98' Value: '鏂板姞鍧″厓' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E52D8F' Value: '鍖楁湞椴滃厓' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$52E52D' Value: '鏂拌阿鍏嬪皵' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$1E9822' Value: '涔屽悏浜�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$20B200' Value: '鑻忓厠闆�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CBA114' Value: '椹潵瑗夸簹鏋楀悏鐗�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FE3F00' Value: '鍙厬鎹㈤┈鍏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$1E6198' Value: '甯冮殕杩硶閮�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$72E582' Value: '鑻忛噷鍗楀厓' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$988E4C' Value: '濉炶垖灏斿崲姣�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$72A6E5' Value: '鏂板崡鏂媺澶绾冲皵' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$14CB36' Value: '閽�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4C8998' Value: '鏂扮储灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B4FE4C' Value: '鍒╂瘮閲屼簹鍏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$00FE7F' Value: '鏅媺' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CDE52D' Value: '鏂板鎵�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$00B256' Value: 'KRW' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$14CB26' Value: '鏂囪幈鍏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$5196CB' Value: '椹揪鍔犳柉鍔犻樋閲屼簹閲�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B23800' Value: '閲�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$F04CFE' Value: '婢冲ぇ鎷夎タ浜�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$372DE5' Value: '鐗规畩缁撶畻甯佺 - 閲戞硶閮�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$2DE592' Value: '鍥炬牸閲屽厠' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$35B267' Value: '閲屽叞鍚夊凹' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FF00BF' Value: 'PHP' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B2005C' Value: 'RON' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B23595' Value: '涓滃姞鍕掓瘮鍏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$1E6C98' Value: '杈炬媺瑗�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CCE572' Value: 'JPY' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$78CB51' Value: 'USD' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$7F00FF' Value: 'PLN' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FE007F' Value: '鍏嬮瞾鎵庡' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$72E5C4' Value: 'NOK' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$1E5798' Value: '鏂板彴甯�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B2AF00' Value: 'HKD' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4C9868' Value: '钀ㄥ皵鐡﹀绉戦儙' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E57289' Value: '绂忔灄' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B12DE5' Value: '姣斿埄鏃舵硶閮�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$51ABCB' Value: '鍗楁柉鎷夊か绗撼灏旓紙宸蹭綔搴燂級' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$7135B2' Value: '闃块瞾宸村矝鐩�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$3FFE00' Value: '鍏嬮瞾鎭�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$2900B2' Value: '鍔犳嬁澶у厓' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FE00AA' Value: '鍙ゅ痉' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$2C1E98' Value: '鑽峰睘瀹夌殑鍒楁柉缇ゅ矝鐩�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FE4CF0' Value: '閾�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$0079B2' Value: '鑽峰叞鐩�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$6ECB51' Value: '闃垮鎷滅枂椹鐗癸紙鏃э級' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$359FB2' Value: '缁熻' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$7CCB14' Value: '鐗欎拱鍔犲厓' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4C6398' Value: 'INR' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$BFCB51' Value: '濂堟媺' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B5CB51' Value: '鍗㈡.鍫℃硶閮�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B29B35' Value: '鍊哄埜甯傚満鍗曚綅 - 娆ф床璁板笎鍗曚綅 9 (E.U.A.-9)' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$D2FE4C' Value: '闃垮鎷滅枂椹鐗�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$51CB9B' Value: '鐟炲吀鍏嬫湕' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$8A981E' Value: '涓归害鍏嬫湕' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4C9895' Value: 'SEK' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$63CB51' Value: '鍔皵鐗归瞾濮�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$A872E5' Value: '鍗″皵浼摝鑱傚吂' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FE4C5B' Value: '缇庡厓锛堟鏃ワ級' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$2FB200' Value: 'MYR' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4C5D98' Value: '濮斿唴鐟炴媺鍗氬埄鐡�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CB14B9' Value: '鍒楀厠' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4C9098' Value: '绾冲厠娉�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$8635B2' Value: '鍏堜护' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FEFE00' Value: '鍏嬫湕' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$A551CB' Value: 'Euro' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$54FE00' Value: '鐧戒縿缃楁柉鍗㈠竷' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$00FE6A' Value: '淇濆姞鍒╀簹鍒楀紬' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$0000FE' Value: '鍏嬬綏鍦颁簹绗撼灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$8BCB14' Value: '鐗规畩缁撶畻甯佺 - UIC 娉曢儙' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$97B200' Value: '鍑犲唴浜氭瘮缁嶆瘮绱�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E52D9F' Value: '椹揪鍔犳柉鍔犳硶閮�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$824C98' Value: '鑻忛噷鍗楃浘' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$61E52D' Value: '缂呭厓锛堝凡搴熷純锛�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$0002B2' Value: 'THB' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4CFE5B' Value: '鎵庝紛灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B2359F' Value: '鐩村竷缃楅檧闀�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CB518C' Value: '宸村搱椹厓' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$794CFE' Value: '鍊哄埜甯傚満鍗曚綅 - 娆ф床璐у竵鍗曚綅 (E.M.U.-6)' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B25600' Value: 'CFP 娉曢儙' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B2002F' Value: '鍑犲唴浜氭硶閮�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$9E72E5' Value: 'Unidades de formento' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$A22DE5' Value: '鍒╂槀' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B2A635' Value: '瀹芥湱' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CB149B' Value: '绉戞懇缃楁硶閮�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4C986E' Value: '涔屽共杈惧厛浠わ紙浣滃簾锛�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$14CBB0' Value: '鐡滄媺灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FE0094' Value: '绱㈣帿灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$981E39' Value: '涔屾媺鍦瘮绱�(1)' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4CFE4C' Value: '鐧戒縿缃楁柉鍗㈠竷锛堝凡浣滃簾锛�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$AF00B2' Value: '娲ュ反甯冮煢鍏冿紙涓嶅啀浣跨敤锛�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$874CFE' Value: '鍗板湴' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CB7251' Value: '鐟炲皵' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$1E9874' Value: '椹撼鐗癸紙涓嶅啀浣跨敤锛�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$72E578' Value: '鐜涚撼鐗�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$6735B2' Value: 'WIR 娆у厓' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FE4C87' Value: '鍩冨強闀�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$984B1E' Value: '寰峰浗椹厠' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$1E987E' Value: '鏂板湡鑰冲叾閲屾媺' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$80B235' Value: '鐩�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$88B200' Value: '绉戝宸村竵' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4CFEC3' Value: '鐖卞皵鍏伴晳' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CB5182' Value: '鎸▉鍏嬫湕' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B23537' Value: '闃挎媺浼仈鍚堥厠闀垮浗杩媺濮�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CB7C51' Value: '姊呰开鍗″皵' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E5D02D' Value: '澶氱背灏煎姞姣旂储' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$0088B2' Value: 'RUB' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$80981E' Value: '浼埄鍏瑰厓' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$2D43E5' Value: '涓滃笣姹跺焹搴撳' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$1A00B2' Value: '鏂礇浼愬厠鍏嬫湕' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E5B172' Value: '鍏嬬摝鏌�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$24981E' Value: '閾�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B951CB' Value: '娆ф床璐у竵鍗曚綅 (E.C.U.)' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$005CB2' Value: '鍔犵撼濉炶开' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$00E9FE' Value: '鍝ユ柉杈鹃粠鍔犵閮�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$51A1CB' Value: '鐟炲+娉曢儙' }
-      ChartEntryValue { Access: 738805.577453704 Color: 'Red' Value: 'EUR' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$964CFE' Value: '鍏嬬摝鏌�(1)' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$6314CB' Value: '鎷夎彶浜�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$BF00FE' Value: '娲涜拏' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$3542B2' Value: '绔嬮櫠瀹涢噷濉旀柉' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$35B248' Value: '鏂版墡浼婂皵' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E57280' Value: '鎵�缃楅棬缇ゅ矝鍏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$14C8CB' Value: '鏃犲竵绉�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$00BFFE' Value: '绱㈠' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$2E981E' Value: '鍏圭綏鎻愶紙宸蹭綔搴燂級' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B23580' Value: '鎷夎劚缁翠簹鍗㈠竷' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$984C76' Value: '鍒楀紬' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$72AFE5' Value: 'NZD' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4C87FE' Value: '鏃ュ渾' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$72E5D8' Value: '濉斿崱' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CB142F' Value: '淇勭綏鏂崲甯冿紙鏃у竵锛�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FE4CE1' Value: '鍏嬬綏鍦颁簹搴撶撼' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$985F1E' Value: '鍦熻�冲叾閲屾媺' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E172E5' Value: 'GBP' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$51CB90' Value: '浣涘緱瑙掑焹鏂簱澶�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FE4CFE' Value: '闃垮皵鍙婂埄浜氱绾冲皵' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E5642D' Value: '浼婃湕閲屼簹灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$354CB2' Value: 'Mexican Unidad de Inversion (UDI)' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$A900FE' Value: '鎷夎劚缁翠簹鎷夌壒' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$76B235' Value: '闃垮瘜姹楀凹锛堟棫锛�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$51CBA5' Value: '缇庢彁鍗★紙鏃э級' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B24700' Value: '鍚夊竷鎻愭硶閮�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$14CBBF' Value: '鏂扮綏椹凹浜氬垪浼�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$02B200' Value: '寮�鏇肩兢宀涘厓' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$61B235' Value: '瀹芥湱锛堝凡浣滃簾锛�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$72E5E1' Value: '鍗″灏旈噷浜氬皵' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FFBF00' Value: 'AUD' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$DCE52D' Value: 'CFA 娉曢儙 BCEAO' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$9100B2' Value: '椹�充粬閲屾媺' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$98954C' Value: '绾崇背姣斾簹鍏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$984C83' Value: '璐㈡斂娉曢儙' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$98884C' Value: '浜氱編灏间簹寰锋媺濮�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$11B200' Value: '澧ㄨタ鍝ユ瘮绱紙宸蹭綔搴燂級' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$5414CB' Value: '淇勭綏鏂崲甯�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4C9698' Value: '娌欑壒閲屼簹灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$002AFE' Value: '鍝ヤ鸡姣斾簹姣旂储' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$00B274' Value: '鑻忎腹闀�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$C3E572' Value: '鏂愭祹鍏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$5D51CB' Value: '钁¤悇鐗欏焹鏂簱澶�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$2DBDE5' Value: '鍐板矝鍏嬫湕' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$981E43' Value: '娉曞浗娉曢儙' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4C5698' Value: '濮嗙淮澶�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$35AAB2' Value: 'Unidad de Valor Constante (UVC)' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$6DCB14' Value: '姣涢噷姹傛柉鍗㈡瘮' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$6851CB' Value: 'WIR 娉曢儙' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B9E572' Value: '鎰忓ぇ鍒╅噷鎷�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CB1420' Value: '涔熼棬閲屼簹灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E57276' Value: '鍧氭垐' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FEE900' Value: '涔屽共杈惧厛浠�' }
-      ChartEntryValue { Access: 738805.577453704 Color: 'Cyan' Value: 'HRK' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$00D4FE' Value: '閭﹀姞' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$76984C' Value: 'SGD' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$1E986A' Value: '娴嬭瘯' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$5351CB' Value: '鍩冨淇勬瘮浜氭瘮灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$00B265' Value: '璧幈' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$984C7C' Value: '缇庡厓锛堝悓鏃ワ級' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$371E98' Value: '缇庡厓' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B29135' Value: '鍊哄埜甯傚満鍗曚綅 - 娆ф床璁板笎鍗曚綅 17锛堝凡浣滃簾锛�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FEB44C' Value: '鍧︽灏间簹鍏堜护' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E52D80' Value: '鐗瑰埆鎻愭鏉�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4CFEF0' Value: '鑲凹浜氬厛浠�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$51B5CB' Value: 'RMB' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FED400' Value: '鏍奸瞾鍚変簹鎭エ' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$AF51CB' Value: '閲戣瀺鍏板痉' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4C96FE' Value: '鍗板害鍗㈡瘮' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CBC351' Value: 'BRL' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$35B25D' Value: 'Unidad de Valor Real' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$2DCDE5' Value: '涔屾媺鍦瘮绱�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$35B252' Value: '闃挎牴寤锋瘮绱�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$881E98' Value: '闊╁厓' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$76981E' Value: '鐡﹀姫闃垮浘' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$C02DE5' Value: '鐗圭珛灏艰揪鍜屽宸村摜鍏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$A6B200' Value: '鍩烘櫘' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$5159CB' Value: 'TWD' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$006BB2' Value: '鍙欏埄浜氶晳' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$7293E5' Value: '鏂拌タ鍏板厓' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CB8651' Value: '鍗㈡瘮' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$7FFF00' Value: 'BGN' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$921E98' Value: '鍗氬埄鐡�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$98551E' Value: '鐜诲埄缁翠簹姣旂储' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$51CB86' Value: 'Dollar' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$C9CB51' Value: '鍗楁柉鎷夊か绗撼灏�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$14CB45' Value: '鍙厬鎹㈢殑娉曢儙' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$C3FE4C' Value: '鑻遍晳' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$9400FE' Value: '鍙ゅ反姣旂储' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$76E572' Value: 'LVL' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FE964C' Value: '娆у厓' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CB9114' Value: '绉戝宸�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$2DAEE5' Value: '绐佸凹鏂绾冲皵' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$71E52D' Value: '娉伴摙' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4C5098' Value: '鍒椾紛' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FEC34C' Value: '鍒╂瘮浜氱绾冲皵' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$FE4C79' Value: '鍏扮壒' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$59CB51' Value: '濉斿悏鍏嬫柉鍧﹀崲甯�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B2003E' Value: '鍦h但鍕掓嬁闀�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E5BB72' Value: '鑻忎腹绗撼灏旓紙鏃э級' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$145DCB' Value: '寰锋媺鍏嬮┈' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$00FE55' Value: '椹厠' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4CA5FE' Value: '濉炴郸璺柉闀�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$2DE574' Value: '澶氬竷鎷�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E572D6' Value: '绱㈤┈閲屽厛浠�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E57293' Value: 'LTL' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$7314CB' Value: '绉戝▉鐗圭绾冲皵' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4C985B' Value: 'MXN' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$0015FE' Value: '鐧炬厱澶у厓锛堢櫨鎱曞ぇ鍏冿級' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$C351CB' Value: '浼︾毊鎷�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$4CB4FE' Value: '婢冲厓' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$3561B2' Value: '鎹峰厠鍏嬫湕' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$9572E5' Value: '绂忓厠鍏扮兢宀涢晳' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$2D34E5' Value: '姣旂储鍙姌鎹�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$984C50' Value: 'CAD' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$3556B2' Value: '浼婃媺鍏嬬绾冲皵' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$E5DF2D' Value: '宸村熀鏂潶鍗㈡瘮' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CB5196' Value: '浜烘皯甯�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CB8214' Value: '鍗㈠竷' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$B2358A' Value: '鍏圭綏鎻�' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$8B72E5' Value: 'IDR' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$00FF3F' Value: 'CZK' }
-      ChartEntryValue { Access: 738805.577453704 Color: '$CB14AA' Value: '宸存灄绗撼灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B22900' Value: 'HUF' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B2004D' Value: '娓厓' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$35B2A6' Value: '榛庡反瀚╅晳' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$AFE572' Value: '涔屽吂鍒厠鏂潶鑻忓' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$0B00B2' Value: '鍦簹閭e厓' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$72E58B' Value: '鑻忎腹绗撼灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$729CE5' Value: '鎵樻媺灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E572CC' Value: '娲ュ反甯冮煢鍏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$6AFE00' Value: '鏍兼煡灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$72E5CE' Value: '鑿插緥瀹炬瘮绱�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E5A872' Value: 'TRY' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$981E4D' Value: '绗撼灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$003FFF' Value: 'DKK' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$35B2B0' Value: '闃挎浖閲屼簹灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FEA54C' Value: '宸存尝浜�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$6BB235' Value: '鏅哄埄姣旂储' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$98824C' Value: 'ZAR' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$144ECB' Value: '宸磋タ闆烽樋灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B23542' Value: '濉旀媺' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E572DF' Value: '鍊哄埜甯傚満鍗曚綅 - 娆ф床璁板笎鍗曚綅 17 (E.U.A.-17)' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4CFE6A' Value: '鎽╁皵澶氱摝鍒椾紛' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$00B282' Value: '涔熼棬绗撼灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$7B4C98' Value: '澧ㄨタ鍝ユ瘮绱�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$A000B2' Value: '鏂噷鍏板崱鍗㈡瘮' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FE4C6A' Value: '鍊哄埜甯傚満鍗曚綅 - 娆ф床璐у竵鍚堟垚鍗曚綅 (EURCO)' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$7C35B2' Value: 'CFA 娉曢儙 BEAC' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$984C89' Value: 'CHF' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$6A4CFE' Value: '婢抽棬鍏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B28635' Value: '鍠滃悕' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E5C472' Value: '鍔犵撼濉炶开锛堟棫锛�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CB5178' Value: '鍗㈡椇杈炬硶閮�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$5BFE4C' Value: '瀹夐亾灏旀瘮濉炲' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E1FE4C' Value: '宸村反澶氭柉鍏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$8200B2' Value: 'EEK' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4CFED2' Value: '闃垮瘜姹楀凹' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$754C98' Value: '鍏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$981E94' Value: '瑗跨彮鐗欐瘮濉炲' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4C9862' Value: '鍒氭灉娉曢儙' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$143FCB' Value: '鍙厬鎹㈡瘮濉炲甯愭埛' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$6E4C98' Value: 'CNY' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$63984C' Value: '鎽╂礇鍝ヨ开鎷夊' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$2DE583' Value: '灏兼硦灏斿崲姣�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E5742D' Value: '鎷夐噷' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$70984C' Value: 'Uruguary Peso en Unidades Indexadas' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$69984C' Value: '濉炲皵缁翠簹绗撼灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4CFEE1' Value: '绾︽棪绗撼灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$411E98' Value: '鏂板姞鍧″厓' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E52D8F' Value: '鍖楁湞椴滃厓' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$52E52D' Value: '鏂拌阿鍏嬪皵' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$1E9822' Value: '涔屽悏浜�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$20B200' Value: '鑻忓厠闆�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CBA114' Value: '椹潵瑗夸簹鏋楀悏鐗�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FE3F00' Value: '鍙厬鎹㈤┈鍏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$1E6198' Value: '甯冮殕杩硶閮�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$72E582' Value: '鑻忛噷鍗楀厓' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$988E4C' Value: '濉炶垖灏斿崲姣�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$72A6E5' Value: '鏂板崡鏂媺澶绾冲皵' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$14CB36' Value: '閽�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4C8998' Value: '鏂扮储灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B4FE4C' Value: '鍒╂瘮閲屼簹鍏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$00FE7F' Value: '鏅媺' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CDE52D' Value: '鏂板鎵�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$00B256' Value: 'KRW' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$14CB26' Value: '鏂囪幈鍏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$5196CB' Value: '椹揪鍔犳柉鍔犻樋閲屼簹閲�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B23800' Value: '閲�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$F04CFE' Value: '婢冲ぇ鎷夎タ浜�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$372DE5' Value: '鐗规畩缁撶畻甯佺 - 閲戞硶閮�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$2DE592' Value: '鍥炬牸閲屽厠' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$35B267' Value: '閲屽叞鍚夊凹' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FF00BF' Value: 'PHP' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B2005C' Value: 'RON' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B23595' Value: '涓滃姞鍕掓瘮鍏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$1E6C98' Value: '杈炬媺瑗�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CCE572' Value: 'JPY' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$78CB51' Value: 'USD' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$7F00FF' Value: 'PLN' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FE007F' Value: '鍏嬮瞾鎵庡' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$72E5C4' Value: 'NOK' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$1E5798' Value: '鏂板彴甯�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B2AF00' Value: 'HKD' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4C9868' Value: '钀ㄥ皵鐡﹀绉戦儙' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E57289' Value: '绂忔灄' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B12DE5' Value: '姣斿埄鏃舵硶閮�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$51ABCB' Value: '鍗楁柉鎷夊か绗撼灏旓紙宸蹭綔搴燂級' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$7135B2' Value: '闃块瞾宸村矝鐩�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$3FFE00' Value: '鍏嬮瞾鎭�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$2900B2' Value: '鍔犳嬁澶у厓' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FE00AA' Value: '鍙ゅ痉' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$2C1E98' Value: '鑽峰睘瀹夌殑鍒楁柉缇ゅ矝鐩�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FE4CF0' Value: '閾�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$0079B2' Value: '鑽峰叞鐩�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$6ECB51' Value: '闃垮鎷滅枂椹鐗癸紙鏃э級' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$359FB2' Value: '缁熻' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$7CCB14' Value: '鐗欎拱鍔犲厓' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4C6398' Value: 'INR' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$BFCB51' Value: '濂堟媺' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B5CB51' Value: '鍗㈡.鍫℃硶閮�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B29B35' Value: '鍊哄埜甯傚満鍗曚綅 - 娆ф床璁板笎鍗曚綅 9 (E.U.A.-9)' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$D2FE4C' Value: '闃垮鎷滅枂椹鐗�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$51CB9B' Value: '鐟炲吀鍏嬫湕' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$8A981E' Value: '涓归害鍏嬫湕' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4C9895' Value: 'SEK' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$63CB51' Value: '鍔皵鐗归瞾濮�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$A872E5' Value: '鍗″皵浼摝鑱傚吂' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FE4C5B' Value: '缇庡厓锛堟鏃ワ級' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$2FB200' Value: 'MYR' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4C5D98' Value: '濮斿唴鐟炴媺鍗氬埄鐡�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CB14B9' Value: '鍒楀厠' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4C9098' Value: '绾冲厠娉�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$8635B2' Value: '鍏堜护' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FEFE00' Value: '鍏嬫湕' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$A551CB' Value: 'Euro' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$54FE00' Value: '鐧戒縿缃楁柉鍗㈠竷' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$00FE6A' Value: '淇濆姞鍒╀簹鍒楀紬' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$0000FE' Value: '鍏嬬綏鍦颁簹绗撼灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$8BCB14' Value: '鐗规畩缁撶畻甯佺 - UIC 娉曢儙' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$97B200' Value: '鍑犲唴浜氭瘮缁嶆瘮绱�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E52D9F' Value: '椹揪鍔犳柉鍔犳硶閮�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$824C98' Value: '鑻忛噷鍗楃浘' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$61E52D' Value: '缂呭厓锛堝凡搴熷純锛�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$0002B2' Value: 'THB' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4CFE5B' Value: '鎵庝紛灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B2359F' Value: '鐩村竷缃楅檧闀�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CB518C' Value: '宸村搱椹厓' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$794CFE' Value: '鍊哄埜甯傚満鍗曚綅 - 娆ф床璐у竵鍗曚綅 (E.M.U.-6)' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B25600' Value: 'CFP 娉曢儙' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B2002F' Value: '鍑犲唴浜氭硶閮�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$9E72E5' Value: 'Unidades de formento' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$A22DE5' Value: '鍒╂槀' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B2A635' Value: '瀹芥湱' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CB149B' Value: '绉戞懇缃楁硶閮�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4C986E' Value: '涔屽共杈惧厛浠わ紙浣滃簾锛�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$14CBB0' Value: '鐡滄媺灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FE0094' Value: '绱㈣帿灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$981E39' Value: '涔屾媺鍦瘮绱�(1)' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4CFE4C' Value: '鐧戒縿缃楁柉鍗㈠竷锛堝凡浣滃簾锛�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$AF00B2' Value: '娲ュ反甯冮煢鍏冿紙涓嶅啀浣跨敤锛�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$874CFE' Value: '鍗板湴' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CB7251' Value: '鐟炲皵' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$1E9874' Value: '椹撼鐗癸紙涓嶅啀浣跨敤锛�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$72E578' Value: '鐜涚撼鐗�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$6735B2' Value: 'WIR 娆у厓' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FE4C87' Value: '鍩冨強闀�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$984B1E' Value: '寰峰浗椹厠' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$1E987E' Value: '鏂板湡鑰冲叾閲屾媺' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$80B235' Value: '鐩�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$88B200' Value: '绉戝宸村竵' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4CFEC3' Value: '鐖卞皵鍏伴晳' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CB5182' Value: '鎸▉鍏嬫湕' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B23537' Value: '闃挎媺浼仈鍚堥厠闀垮浗杩媺濮�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CB7C51' Value: '姊呰开鍗″皵' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E5D02D' Value: '澶氱背灏煎姞姣旂储' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$0088B2' Value: 'RUB' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$80981E' Value: '浼埄鍏瑰厓' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$2D43E5' Value: '涓滃笣姹跺焹搴撳' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$1A00B2' Value: '鏂礇浼愬厠鍏嬫湕' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E5B172' Value: '鍏嬬摝鏌�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$24981E' Value: '閾�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B951CB' Value: '娆ф床璐у竵鍗曚綅 (E.C.U.)' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$005CB2' Value: '鍔犵撼濉炶开' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$00E9FE' Value: '鍝ユ柉杈鹃粠鍔犵閮�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$51A1CB' Value: '鐟炲+娉曢儙' }
+      ChartEntryValue { Access: 738766.584444444 Color: 'Red' Value: 'EUR' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$964CFE' Value: '鍏嬬摝鏌�(1)' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$6314CB' Value: '鎷夎彶浜�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$BF00FE' Value: '娲涜拏' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$3542B2' Value: '绔嬮櫠瀹涢噷濉旀柉' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$35B248' Value: '鏂版墡浼婂皵' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E57280' Value: '鎵�缃楅棬缇ゅ矝鍏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$14C8CB' Value: '鏃犲竵绉�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$00BFFE' Value: '绱㈠' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$2E981E' Value: '鍏圭綏鎻愶紙宸蹭綔搴燂級' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B23580' Value: '鎷夎劚缁翠簹鍗㈠竷' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$984C76' Value: '鍒楀紬' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$72AFE5' Value: 'NZD' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4C87FE' Value: '鏃ュ渾' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$72E5D8' Value: '濉斿崱' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CB142F' Value: '淇勭綏鏂崲甯冿紙鏃у竵锛�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FE4CE1' Value: '鍏嬬綏鍦颁簹搴撶撼' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$985F1E' Value: '鍦熻�冲叾閲屾媺' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E172E5' Value: 'GBP' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$51CB90' Value: '浣涘緱瑙掑焹鏂簱澶�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FE4CFE' Value: '闃垮皵鍙婂埄浜氱绾冲皵' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E5642D' Value: '浼婃湕閲屼簹灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$354CB2' Value: 'Mexican Unidad de Inversion (UDI)' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$A900FE' Value: '鎷夎劚缁翠簹鎷夌壒' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$76B235' Value: '闃垮瘜姹楀凹锛堟棫锛�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$51CBA5' Value: '缇庢彁鍗★紙鏃э級' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B24700' Value: '鍚夊竷鎻愭硶閮�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$14CBBF' Value: '鏂扮綏椹凹浜氬垪浼�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$02B200' Value: '寮�鏇肩兢宀涘厓' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$61B235' Value: '瀹芥湱锛堝凡浣滃簾锛�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$72E5E1' Value: '鍗″灏旈噷浜氬皵' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FFBF00' Value: 'AUD' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$DCE52D' Value: 'CFA 娉曢儙 BCEAO' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$9100B2' Value: '椹�充粬閲屾媺' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$98954C' Value: '绾崇背姣斾簹鍏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$984C83' Value: '璐㈡斂娉曢儙' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$98884C' Value: '浜氱編灏间簹寰锋媺濮�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$11B200' Value: '澧ㄨタ鍝ユ瘮绱紙宸蹭綔搴燂級' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$5414CB' Value: '淇勭綏鏂崲甯�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4C9698' Value: '娌欑壒閲屼簹灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$002AFE' Value: '鍝ヤ鸡姣斾簹姣旂储' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$00B274' Value: '鑻忎腹闀�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$C3E572' Value: '鏂愭祹鍏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$5D51CB' Value: '钁¤悇鐗欏焹鏂簱澶�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$2DBDE5' Value: '鍐板矝鍏嬫湕' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$981E43' Value: '娉曞浗娉曢儙' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4C5698' Value: '濮嗙淮澶�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$35AAB2' Value: 'Unidad de Valor Constante (UVC)' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$6DCB14' Value: '姣涢噷姹傛柉鍗㈡瘮' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$6851CB' Value: 'WIR 娉曢儙' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B9E572' Value: '鎰忓ぇ鍒╅噷鎷�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CB1420' Value: '涔熼棬閲屼簹灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E57276' Value: '鍧氭垐' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FEE900' Value: '涔屽共杈惧厛浠�' }
+      ChartEntryValue { Access: 738766.584444444 Color: 'Cyan' Value: 'HRK' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$00D4FE' Value: '閭﹀姞' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$76984C' Value: 'SGD' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$1E986A' Value: '娴嬭瘯' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$5351CB' Value: '鍩冨淇勬瘮浜氭瘮灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$00B265' Value: '璧幈' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$984C7C' Value: '缇庡厓锛堝悓鏃ワ級' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$371E98' Value: '缇庡厓' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B29135' Value: '鍊哄埜甯傚満鍗曚綅 - 娆ф床璁板笎鍗曚綅 17锛堝凡浣滃簾锛�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FEB44C' Value: '鍧︽灏间簹鍏堜护' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E52D80' Value: '鐗瑰埆鎻愭鏉�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4CFEF0' Value: '鑲凹浜氬厛浠�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$51B5CB' Value: 'RMB' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FED400' Value: '鏍奸瞾鍚変簹鎭エ' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$AF51CB' Value: '閲戣瀺鍏板痉' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4C96FE' Value: '鍗板害鍗㈡瘮' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CBC351' Value: 'BRL' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$35B25D' Value: 'Unidad de Valor Real' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$2DCDE5' Value: '涔屾媺鍦瘮绱�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$35B252' Value: '闃挎牴寤锋瘮绱�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$881E98' Value: '闊╁厓' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$76981E' Value: '鐡﹀姫闃垮浘' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$C02DE5' Value: '鐗圭珛灏艰揪鍜屽宸村摜鍏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$A6B200' Value: '鍩烘櫘' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$5159CB' Value: 'TWD' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$006BB2' Value: '鍙欏埄浜氶晳' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$7293E5' Value: '鏂拌タ鍏板厓' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CB8651' Value: '鍗㈡瘮' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$7FFF00' Value: 'BGN' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$921E98' Value: '鍗氬埄鐡�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$98551E' Value: '鐜诲埄缁翠簹姣旂储' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$51CB86' Value: 'Dollar' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$C9CB51' Value: '鍗楁柉鎷夊か绗撼灏�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$14CB45' Value: '鍙厬鎹㈢殑娉曢儙' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$C3FE4C' Value: '鑻遍晳' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$9400FE' Value: '鍙ゅ反姣旂储' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$76E572' Value: 'LVL' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FE964C' Value: '娆у厓' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CB9114' Value: '绉戝宸�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$2DAEE5' Value: '绐佸凹鏂绾冲皵' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$71E52D' Value: '娉伴摙' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4C5098' Value: '鍒椾紛' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FEC34C' Value: '鍒╂瘮浜氱绾冲皵' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$FE4C79' Value: '鍏扮壒' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$59CB51' Value: '濉斿悏鍏嬫柉鍧﹀崲甯�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B2003E' Value: '鍦h但鍕掓嬁闀�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E5BB72' Value: '鑻忎腹绗撼灏旓紙鏃э級' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$145DCB' Value: '寰锋媺鍏嬮┈' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$00FE55' Value: '椹厠' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4CA5FE' Value: '濉炴郸璺柉闀�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$2DE574' Value: '澶氬竷鎷�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E572D6' Value: '绱㈤┈閲屽厛浠�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E57293' Value: 'LTL' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$7314CB' Value: '绉戝▉鐗圭绾冲皵' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4C985B' Value: 'MXN' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$0015FE' Value: '鐧炬厱澶у厓锛堢櫨鎱曞ぇ鍏冿級' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$C351CB' Value: '浼︾毊鎷�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$4CB4FE' Value: '婢冲厓' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$3561B2' Value: '鎹峰厠鍏嬫湕' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$9572E5' Value: '绂忓厠鍏扮兢宀涢晳' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$2D34E5' Value: '姣旂储鍙姌鎹�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$984C50' Value: 'CAD' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$3556B2' Value: '浼婃媺鍏嬬绾冲皵' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$E5DF2D' Value: '宸村熀鏂潶鍗㈡瘮' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CB5196' Value: '浜烘皯甯�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CB8214' Value: '鍗㈠竷' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$B2358A' Value: '鍏圭綏鎻�' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$8B72E5' Value: 'IDR' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$00FF3F' Value: 'CZK' }
+      ChartEntryValue { Access: 738766.584444444 Color: '$CB14AA' Value: '宸存灄绗撼灏�' }
     }
     ColorSchemeEntry
     {

--
Gitblit v1.9.3