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

---
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_UnitOfMeasureName.qbl                                                                                                  |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl                                                                                          |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuConversionFactor.def                                                                     |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuProduct_MP.def                                                                           |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def                                                                                                |    3 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_Export#666.qbl                                                                                                      |  507 ++
 _Main/BL/Type_PRData/Attribute_PRReleaseStatus.qbl                                                                                                                            |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales8.qbl                                                                                                      |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick.def                                              |   20 
 _Main/BL/Type_PRHistoryData/StaticMethod_ExportTheFileStream.qbl                                                                                                              |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity11.qbl                                                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Component_ListPRData#844.def                                                                                                    |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListCustomOrder.def                                                                                     |   41 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_PanelButton_ButtonTransform_OnClick.def                                                              |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormProducts/Response_TIANMA_JITUAN_ListProduct_844_MenuMarkingPanelMaterial_OnClick.def                                                |   19 
 _Main/BL/EDI/Broker_GlobalOTDTable_AnnualBudgetData.qbl                                                                                                                       |  398 +
 _Main/BL/Type_PRData/Function_CalcSendTimeString.qbl                                                                                                                          |    6 
 _Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                           |   31 
 _Main/BL/Type_PRData/Attribute_CreateBy.qbl                                                                                                                                   |    8 
 _Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByHalfYear.qbl                                                                                                         |   21 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByHalfYear.qbl                                                                                                   |   24 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                                |   33 
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_Test.qbl                                                                                                                 |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/Component_ListIssueWorkOrder.def                                                                                     |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ProductID.qbl                                                                                                          |    8 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceByHalfYear.qbl                                                                                                    |   24 
 _Main/BL/Type_PRData/StaticMethod_DoCall.qbl                                                                                                                                  |    2 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupPlanViews.def                                                                           |   18 
 _Main/UI/MacroPlannerWebApp/Views/面板拉料_集团操作.vw                                                                                                                                | 1471 ++++++
 _Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityBySeason.qbl                                                                                                          |   21 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity4.qbl                                                                                                |    8 
 _Main/UI/MacroPlannerWebApp/Views/Test.vw                                                                                                                                     |  283 -
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales12.qbl                                                                                                     |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def                                                                        |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageForecast.def                                                                           |   10 
 _Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_AutomaticallyGenerateRule.qbl                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelCustomOrder#682.def                                                                                |   15 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByHalfYear.qbl                                                                                               |   21 
 _Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                        |   31 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def                                                                                   |   14 
 _Main/UI/MacroPlannerWebApp/Views/年度产销复盘.vw                                                                                                                                   |  777 +++
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales1.qbl                                                                                                      |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity10.qbl                                                                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def                                                                           |    2 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_ProductName.qbl                                                                                                        |    8 
 _Main/BL/Type_Global_MappingProviderCapacity/_ROOT_Type_Global_MappingProviderCapacity.qbl                                                                                    |   10 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity1.qbl                                                                                                |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def                                                                        |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormProducts/_ROOT_Component_FormProducts.def                                                                                           |   10 
 _Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Test.qbl                                                                                                |   61 
 _Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityByHalfYear.qbl                                                                                                        |   21 
 _Main/BL/Type_PRHistoryData/Attribute_PreparerId#603.qbl                                                                                                                      |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelUnitOfMeasure_MP.def                                                                               |   15 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity7.qbl                                                                                              |    8 
 _Main/BL/Type_PRData/Attribute_CreateTimeString.qbl                                                                                                                           |    7 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason#000.qbl                                                                                             |   19 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Component_pnlContent.def                                                                                     |    1 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_Rate.qbl                                                                                                               |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/_ROOT_Type_Global_MappingAnnualBudgetData.qbl                                                                                    |   10 
 _Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceBySeason#763.qbl                                                                                                       |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageConversionFactor.def                                                                   |   10 
 _Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button884_OnClick.def                                                                                       |   12 
 _Main/BL/Type_FillingCapacityOrder/StaticMethod_CreateCustomOrder.qbl                                                                                                         |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_ListProduct#844.def                                                                                              |   14 
 _var/_Main/ProjSettings/MacroPlannerWebApp/Views/Capacity___sale_budge.vw                                                                                                     |    2 
 _Main/BL/Type_GlobalDTOTable/Method_InitTestData#12.qbl                                                                                                                       |   39 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInYear.qbl                                                                                                   |   15 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInYear.qbl                                                                                              |   15 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_StockingPointID.qbl                                                                                                    |    8 
 _Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl                                                                                                                   |    4 
 _Main/BL/Type_PRData/StaticMethod_ProductIdOver14Days.qbl                                                                                                                     |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderUnlock_OnClick.def                                                 |    2 
 _Main/UI/MacroPlannerWebApp/Views/填产.vw                                                                                                                                       |  607 ++
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_PanelImportAndExport.def                                                       |   12 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_CutsNumber.qbl                                                                                                         |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl                                                                                            |   19 
 _Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl                                                                                                                            |    4 
 _Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityByMonth.qbl                                                                                                           |   22 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity8.qbl                                                                                                |    8 
 _Main/BL/Type_PRData/StaticMethod_CanCall.qbl                                                                                                                                 |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListConversionFactor.def                                                                                |   41 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_Export.qbl                                                                                                          |   13 
 _Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                         |   34 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelProduct_MP.def                                                                                     |   15 
 _Main/BL/Type_MasterPlanReleaseWorkOrder/StaticMethod_GenerateAndDistributeWorkOrders1.qbl                                                                                    |   41 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelOperation.def                                                                                      |   15 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales5.qbl                                                                                                      |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick.def             |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelInterfaceDataDisplayContent.def                                                                    |   22 
 _Main/BL/Type_MacroPlan/Attribute_CreatePurchaseSupplyMaterial.qbl                                                                                                            |    7 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_IsPartRecognition.qbl                                                                                                  |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity3.qbl                                                                                              |    8 
 _Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                            |   35 
 _Main/UI/MacroPlannerWebApp/Views/对接ERP进行PR释放.vw                                                                                                                              |  177 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_YearNo.qbl                                                                                                             |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByMonth.qbl                                                                                                  |   22 
 _Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                       |   31 
 _Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                                |   33 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupSalesViews#633.def                                                                      |   15 
 _Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl                                                                                                                   |    4 
 _Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_AutomaticallyGenerateCapacityAllocationResults.qbl                                                      |   25 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceBySeason.qbl                                                                                                      |   24 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByYear.qbl                                                                                                       |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/_ROOT_Component_FormPanelMaterialSpecializedDisplay.def                                             |    1 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_CapacityEquivalent.qbl                                                                                                 |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales9.qbl                                                                                                      |    8 
 _Main/BL/Type_Global_MappingProviderCapacity/StaticMethod_GetByProductId.qbl                                                                                                  |   13 
 _Main/BL/Type_MasterPlanReleaseWorkOrder/StaticMethod_ObtainOrganizationCode.qbl                                                                                              |   19 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_ActualCapacity.qbl                                                                                                     |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageInterfaceDataDisplayContent.def                                                        |   10 
 _Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl                                                                                         |   10 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_LotSize.qbl                                                                                                            |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListForecast.def                                                                                        |   41 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def                                                                                     |   78 
 _Main/BL/Type_MacroPlan/Attribute_IsKeyProduct.qbl                                                                                                                            |    7 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl                                                                                                  |   20 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity3.qbl                                                                                                |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity8.qbl                                                                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupPlanViews_ButtonOrderLockAndUnlock_OnCl.def                                |   16 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MaskNumber.qbl                                                                                                         |    8 
 _Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_OnException.qbl                                                                                                      |    9 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_BusinessSort.qbl                                                                                                       |    8 
 _Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                         |   32 
 _Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl                                                                                                            |   22 
 _Main/UI/MacroPlannerWebApp/Views/物料标签_计划策略.vw                                                                                                                                |  262 +
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_MinimumQuantity.qbl                                                                                                    |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuCreateShowData_OnClick.def                                                             |   24 
 _Main/UI/MacroPlannerWebApp/Views/Capacity___sale_budge.vw                                                                                                                    |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderFresh_OnClick.def                                                  |    3 
 _Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_OnException.qbl                                                                                                          |    9 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupInventoryViews_ButtonMaterialLabelingPl.def                                |   16 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityBySeason.qbl                                                                                                     |   24 
 _Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                              |   33 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales10.qbl                                                                                                     |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def                                                                                   |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelOperationBOM.def                                                                                   |   15 
 _Main/BL/Type_Global_MappingProduct_MP/StaticMethod_GetByProductId.qbl                                                                                                        |   15 
 _Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateData.qbl                                                                                                            |   20 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_DisplayTechSort.qbl                                                                                                    |    8 
 _Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeMacroPlanData.qbl                                                                    |   34 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_ProviderName.qbl                                                                                                       |    8 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnCapacityAllocationAndProductionFillin.def                                |   16 
 _Main/BL/Relations/Relation_Global_MappingAnnualBudgetData_GlobalOTDTable_GlobalOTDTable_Global.qbl                                                                           |   23 
 _Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl                                                                                                                        |    4 
 _Main/BL/Type_Global_MappingOperation/Attribute_OrganId.qbl                                                                                                                   |    7 
 _Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl                                                                                                                    |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderLock_OnClick.def                                                   |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListOperation.def                                                                                       |   41 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageUnitOfMeasure_MP.def                                                                   |   10 
 _Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl                                                                                                                          |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales4.qbl                                                                                                      |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_AutomaticallyGenerate_OnClick.def                          |   16 
 _Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateFillingCapacityOrder.qbl                                                                                            |    8 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialGroupOperations_O.def                                |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def                                                  |    4 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ProductLineAndSpecification.qbl                                                                                        |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity4.qbl                                                                                              |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_BusinessType.qbl                                                                                                       |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity7.qbl                                                                                                |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity6.qbl                                                                                                |    8 
 _Main/BL/Type_PRData/Attribute_LineAttribute3.qbl                                                                                                                             |    7 
 _Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl                                                                                                                  |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/_ROOT_Component_FormShowInterfaceData.def                                                                         |    3 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity2.qbl                                                                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageCustomOrder.def                                                                        |   10 
 _Main/BL/Type_Global_MappingAnnualBudgetData/TypeIndex_Global_MappingAnnualBudgetDataTypeIndex.qbl                                                                            |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageOperationBOM.def                                                                       |   10 
 _Main/UI/MacroPlannerWebApp/Views/冲减.vw                                                                                                                                       |  900 +++
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageInventory.def                                                                            |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity12.qbl                                                                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Component_ListPRHistoryData#844.def                                                                                   |    2 
 _Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl                                                                                                                              |   31 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def                                                                                   |   12 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl                                                                                               |   19 
 _Main/BL/Relations/Relation_Global_MappingProviderCapacity_GlobalOTDTable_GlobalOTDTable_Global.qbl                                                                           |   23 
 _Main/BL/Type_PRData/Attribute_CreateTime.qbl                                                                                                                                 |    8 
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration3.qbl                                                                                                 |   54 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity9.qbl                                                                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelSalesSegment_MP#154.def                                                                            |   15 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_ProductID.qbl                                                                                                          |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_PanelList.def                                                                                                    |    8 
 _Main/BL/Type_CustomerOrder/StaticMethod_DoSync.qbl                                                                                                                           |    5 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity2.qbl                                                                                                |    8 
 _Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                               |   33 
 _Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl                                                                                                                    |    4 
 _Main/BL/Type_Global_MappingLaneLeg/StaticMethod_OnException.qbl                                                                                                              |    9 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_PlantName.qbl                                                                                                          |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuForecast.def                                                                             |   10 
 _Main/BL/Type_PRHistoryData/StaticMethod_ProductIdOver14Days.qbl                                                                                                              |    2 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByMonth.qbl                                                                                                      |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageProduct_MP.def                                                                         |   10 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgTest.def                                                                                           |   10 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPagePlan.def                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def                                                                                 |    6 
 _Main/UI/MacroPlannerWebApp/Views/面板拉料_各事业部操作.vw                                                                                                                              |   94 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def                                                                                         |    4 
 _Main/BL/Type_Global_ShowCell/StaticMethod_ShowData.qbl                                                                                                                       |    8 
 _Main/BL/Type_PRData/StaticMethod_TestData.qbl                                                                                                                                |   36 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListProduct_MP.def                                                                                      |   41 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_OrganName.qbl                                                                                                          |    8 
 _Main/BL/Type_Forecast/StaticMethod_DoSync.qbl                                                                                                                                |    5 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales11.qbl                                                                                                     |    8 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceByYear.qbl                                                                                                        |   20 
 _Main/BL/Type_GlobalDTOTable/Method_RefreshCapacityAndSaleBudgeFilter.qbl                                                                                                     |   26 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales3.qbl                                                                                                      |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_MenuEdit_OnClic.def                |   20 
 _var/_Main/ModelSettings/Common/Dev-21/_ROOT_Role_Dev-21.properties                                                                                                           |    2 
 _Main/BL/Type_MasterPlanReleaseWorkOrder/StaticMethod_GenerateAndDistributeWorkOrders.qbl                                                                                     |   16 
 _Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart#156.qbl                                                                                                         |  123 
 _Main/UI/MacroPlanner/Component_FormTestButtonCollection/_ROOT_Component_FormTestButtonCollection.def                                                                         |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def                                                  |    6 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity5.qbl                                                                                              |    8 
 _Main/BL/Type_Global_MappingOperation/StaticMethod_GetByProductId.qbl                                                                                                         |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_listContextMenuCapacityAllocationResultsRuleConfiguration_MenuAutoC.def         |   20 
 _Main/BL/Type_PRData/Attribute_DeliveryDate.qbl                                                                                                                               |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity10.qbl                                                                                             |    8 
 _Main/BL/Type_Global_MappingOperationBOM/StaticMethod_CreateTestData.qbl                                                                                                      |   27 
 _Main/BL/Type_PRData/Attribute_OrganName.qbl                                                                                                                                  |    8 
 _Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning#662.qbl                                                                                                                  |   86 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_MatrixEditorShowInterfaceData.def                                                                       |    1 
 _Main/BL/Type_PRHistoryData/Attribute_DeliveryDate#168.qbl                                                                                                                    |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_SetOrgCodeFromForecast.qbl                                                                                          |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnC#663.def |    2 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_LeadTime.qbl                                                                                                           |    8 
 _var/_Main/ProjSettings/MacroPlanner/Views/X_分析视图_[414702.1.50321581].vw                                                                                                      | 2370 ++++++++++
 _Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/_ROOT_Component_FormIssueWorkOrder.def                                                                               |    1 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceByMonth.qbl                                                                                                       |   21 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInPCSInYear.qbl                                                                                                |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageOperation.def                                                                          |   10 
 _Main/BL/Type_Global_MappingLane/StaticMethod_OnException.qbl                                                                                                                 |    9 
 _Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Response_TIANMA_JITUAN_mbMainMenu_MenuDoSync_OnClick.def                                                           |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuCustomOrder.def                                                                          |   10 
 _Main/UI/MacroPlannerWebApp/Views/接口测试.vw                                                                                                                                     |  979 ++++
 _Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl                                                                                                                       |    6 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_OrganCode.qbl                                                                                                          |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity12.qbl                                                                                             |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales7.qbl                                                                                                      |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_listContextMenuProduct#1.def                                                                                     |   28 
 _Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning.qbl                                                                                                                      |   12 
 _Main/BL/Type_ProductInStockingPointInPeriod/StaticMethod_GetByMRPCalverNo.qbl                                                                                                |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuOperationBOM.def                                                                         |   10 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity5.qbl                                                                                                |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ID.qbl                                                                                                                 |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/Response_PanelButton_ButtonGeneratePlannedData_OnClick#124.def                                                       |    4 
 _Main/UI/MacroPlannerWebApp/Views/订单锁定_解锁.vw                                                                                                                                  |  414 +
 _Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationAllMappingBrokerAndAPI.qbl                                                                                           |   10 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity1.qbl                                                                                              |    8 
 _Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def                                                                                       |    6 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnDockingERPForPRRelease_OnClick.def                                       |   16 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonLoad_OnClick.def                                                                               |    6 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_OrgCodeFromBom.qbl                                                                                                     |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ResolutionRatio.qbl                                                                                                    |    8 
 _Main/BL/Type_CapacityAllocationResultsRuleConfiguration/Attribute_PanelMaterialStockingPointID.qbl                                                                           |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity11.qbl                                                                                               |    8 
 _Main/BL/Type_Global_ShowCell/StaticMethod_CreateShowData_Forecast.qbl                                                                                                        |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_listContextMenuCapacityAllocationResultsRuleConfiguration.def                  |   21 
 _Main/BL/Type_Global_ShowCell/StaticMethod_GenerateDataThroughReflection.qbl                                                                                                  |   30 
 _Main/BL/Type_MacroPlan/Attribute_BusinessType.qbl                                                                                                                            |    7 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl                                                                                                |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListInterfaceDataDisplayContent.def                                                                     |   41 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2.def                                                                                   |   65 
 _Main/BL/Type_ERPRequestOfPR/StaticMethod_Create.qbl                                                                                                                          |    2 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_IsSpecialDisplay.qbl                                                                                                   |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuUnitOfMeasure_MP.def                                                                     |   10 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ShippingForm.qbl                                                                                                       |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelForecast.def                                                                                       |   15 
 _Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompare.qbl                                                                                                           |   30 
 _Main/BL/Type_PRData/Method_PrintCall.qbl                                                                                                                                     |    5 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupInventoryViews#981.def                                                                  |   18 
 _Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByYear#0.qbl                                                                                                           |   20 
 _Main/BL/Type_MacroPlan/DefaultValue_BusinessType.qbl                                                                                                                         |    0 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales2.qbl                                                                                                      |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelConversionFactor.def                                                                               |   15 
 _Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_RecursiveGeneration.qbl                                                                                 |   38 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl                                                                                                   |   20 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialOperationsOfEachB.def                                |   16 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleBySeason.qbl                                                                                                 |   21 
 _Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityByYear.qbl                                                                                                            |   20 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_IsSecondSource.qbl                                                                                                     |    8 
 _Main/BL/Type_MasterPlanReleaseWorkOrderTabulation/Attribute_OrganizationInfomation.qbl                                                                                       |    8 
 _Main/BL/Type_Global_MappingOperation/Attribute_DestinationOrganizationId.qbl                                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupSalesViews_ButtonOffsetting_OnClick.def                                    |   16 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl                                                                                              |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListUnitOfMeasure_MP.def                                                                                |   41 
 _var/_Main/ProjSettings/MacroPlannerWebApp/Views/PR_DATA.vw                                                                                                                   |  428 +
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity6.qbl                                                                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def                                                                     |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListOperationBOM.def                                                                                    |   41 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity9.qbl                                                                                                |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByMonth.qbl                                                                                                 |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def                                                                         |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def                                      |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuOperation.def                                                                            |   10 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupSalesViews_ButtonSalesFillingCapacity_O.def                                |   16 
 _Main/BL/Type_MPSync/StaticMethod_TestData.qbl                                                                                                                                |   27 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnAnnualProductionAndSalesReview_OnClic.def                                |   16 
 /dev/null                                                                                                                                                                     |   19 
 _Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan#127.qbl                                                                                                        |  122 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuInterfaceDataDisplayContent.def                                                          |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listContextMenuMaterial455#1.def                                                      |   16 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales6.qbl                                                                                                      |    8 
 _Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_OnException.qbl                                                                                                     |    9 
 _Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl                                                                                                                     |    8 
 _Main/BL/Type_PRData/Method_DoCall.qbl                                                                                                                                        |   12 
 304 files changed, 13,360 insertions(+), 624 deletions(-)

diff --git a/_Main/BL/EDI/Broker_GlobalOTDTable_AnnualBudgetData.qbl b/_Main/BL/EDI/Broker_GlobalOTDTable_AnnualBudgetData.qbl
new file mode 100644
index 0000000..a2e490d
--- /dev/null
+++ b/_Main/BL/EDI/Broker_GlobalOTDTable_AnnualBudgetData.qbl
@@ -0,0 +1,398 @@
+Quintiq file version 2.0
+#parent: #root
+EDIBroker GlobalOTDTable_AnnualBudgetData
+{
+  MDSDefinition: GlobalOTDTable
+  TimeZone: 'ACT'
+  UseOSTimeZone: false
+  EDIModelLink.Destination DES_AnnualBudgetData
+  {
+    EDIMLTable Global_MappingAnnualBudgetData
+    {
+      PrimaryKeyColumns: ID
+      TargetType: Global_MappingAnnualBudgetData
+      TypeIndex: Global_MappingAnnualBudgetDataTypeIndex
+      EDIMLColumn BusinessSort { Attribute: BusinessSort ValueType: String }
+      EDIMLColumn BusinessType { Attribute: BusinessType ValueType: String }
+      EDIMLColumn CapacityEquivalent { Attribute: CapacityEquivalent ValueType: String }
+      EDIMLColumn CutsNumber { Attribute: CutsNumber ValueType: String }
+      EDIMLColumn DisplayTechSort { Attribute: DisplayTechSort ValueType: String }
+      EDIMLColumn ID { Attribute: ID ValueType: String }
+      EDIMLColumn MaskNumber { Attribute: MaskNumber ValueType: String }
+      EDIMLColumn MonthlyModCapacity1 { Attribute: MonthlyModCapacity1 ValueType: String }
+      EDIMLColumn MonthlyModCapacity10 { Attribute: MonthlyModCapacity10 ValueType: String }
+      EDIMLColumn MonthlyModCapacity11 { Attribute: MonthlyModCapacity11 ValueType: String }
+      EDIMLColumn MonthlyModCapacity12 { Attribute: MonthlyModCapacity12 ValueType: String }
+      EDIMLColumn MonthlyModCapacity2 { Attribute: MonthlyModCapacity2 ValueType: String }
+      EDIMLColumn MonthlyModCapacity3 { Attribute: MonthlyModCapacity3 ValueType: String }
+      EDIMLColumn MonthlyModCapacity4 { Attribute: MonthlyModCapacity4 ValueType: String }
+      EDIMLColumn MonthlyModCapacity5 { Attribute: MonthlyModCapacity5 ValueType: String }
+      EDIMLColumn MonthlyModCapacity6 { Attribute: MonthlyModCapacity6 ValueType: String }
+      EDIMLColumn MonthlyModCapacity7 { Attribute: MonthlyModCapacity7 ValueType: String }
+      EDIMLColumn MonthlyModCapacity8 { Attribute: MonthlyModCapacity8 ValueType: String }
+      EDIMLColumn MonthlyModCapacity9 { Attribute: MonthlyModCapacity9 ValueType: String }
+      EDIMLColumn MonthlySales1 { Attribute: MonthlySales1 ValueType: String }
+      EDIMLColumn MonthlySales10 { Attribute: MonthlySales10 ValueType: String }
+      EDIMLColumn MonthlySales11 { Attribute: MonthlySales11 ValueType: String }
+      EDIMLColumn MonthlySales12 { Attribute: MonthlySales12 ValueType: String }
+      EDIMLColumn MonthlySales2 { Attribute: MonthlySales2 ValueType: String }
+      EDIMLColumn MonthlySales3 { Attribute: MonthlySales3 ValueType: String }
+      EDIMLColumn MonthlySales4 { Attribute: MonthlySales4 ValueType: String }
+      EDIMLColumn MonthlySales5 { Attribute: MonthlySales5 ValueType: String }
+      EDIMLColumn MonthlySales6 { Attribute: MonthlySales6 ValueType: String }
+      EDIMLColumn MonthlySales7 { Attribute: MonthlySales7 ValueType: String }
+      EDIMLColumn MonthlySales8 { Attribute: MonthlySales8 ValueType: String }
+      EDIMLColumn MonthlySales9 { Attribute: MonthlySales9 ValueType: String }
+      EDIMLColumn MonthlySheetCapacity1 { Attribute: MonthlySheetCapacity1 ValueType: String }
+      EDIMLColumn MonthlySheetCapacity10 { Attribute: MonthlySheetCapacity10 ValueType: String }
+      EDIMLColumn MonthlySheetCapacity11 { Attribute: MonthlySheetCapacity11 ValueType: String }
+      EDIMLColumn MonthlySheetCapacity12 { Attribute: MonthlySheetCapacity12 ValueType: String }
+      EDIMLColumn MonthlySheetCapacity2 { Attribute: MonthlySheetCapacity2 ValueType: String }
+      EDIMLColumn MonthlySheetCapacity3 { Attribute: MonthlySheetCapacity3 ValueType: String }
+      EDIMLColumn MonthlySheetCapacity4 { Attribute: MonthlySheetCapacity4 ValueType: String }
+      EDIMLColumn MonthlySheetCapacity5 { Attribute: MonthlySheetCapacity5 ValueType: String }
+      EDIMLColumn MonthlySheetCapacity6 { Attribute: MonthlySheetCapacity6 ValueType: String }
+      EDIMLColumn MonthlySheetCapacity7 { Attribute: MonthlySheetCapacity7 ValueType: String }
+      EDIMLColumn MonthlySheetCapacity8 { Attribute: MonthlySheetCapacity8 ValueType: String }
+      EDIMLColumn MonthlySheetCapacity9 { Attribute: MonthlySheetCapacity9 ValueType: String }
+      EDIMLColumn OrgCodeFromBom { Attribute: OrgCodeFromBom ValueType: String }
+      EDIMLColumn OrganCode { Attribute: OrganCode ValueType: String }
+      EDIMLColumn OrganName { Attribute: OrganName ValueType: String }
+      EDIMLColumn PlantName { Attribute: PlantName ValueType: String }
+      EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
+      EDIMLColumn ProductLineAndSpecification { Attribute: ProductLineAndSpecification ValueType: String }
+      EDIMLColumn ResolutionRatio { Attribute: ResolutionRatio ValueType: String }
+      EDIMLColumn ShippingForm { Attribute: ShippingForm ValueType: String }
+      EDIMLColumn YearNo { Attribute: YearNo ValueType: String }
+    }
+  }
+  EDIODBCLink.Source MID_AnnualBudgetData
+  {
+    DataIntegrityStrategy: 'Disabled'
+    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
+    EDIODBCLinkTable MID_ANNUALBUDGETDATA
+    {
+      OthersMayCreateTable: true
+      OthersMayDeleteRow: true
+      OthersMayDropTable: true
+      OthersMayFlushTable: true
+      OthersMayInsertRow: true
+      Parameters: '/owner="YUXTEST"'
+      RecordModificationHintStrategy: 'None'
+      EDIODBCLinkColumn BUSINESSSORT
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn BUSINESSTYPE
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn CAPACITYEQUIVALENT
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn CUTSNUMBER
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn DISPLAYTECHSORT
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn ID
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MASKNUMBER
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYMODCAPACITY1
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYMODCAPACITY10
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYMODCAPACITY11
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYMODCAPACITY12
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYMODCAPACITY2
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYMODCAPACITY3
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYMODCAPACITY4
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYMODCAPACITY5
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYMODCAPACITY6
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYMODCAPACITY7
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYMODCAPACITY8
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYMODCAPACITY9
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSALES1
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSALES10
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSALES11
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSALES12
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSALES2
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSALES3
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSALES4
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSALES5
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSALES6
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSALES7
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSALES8
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSALES9
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSHEETCAPACITY1
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSHEETCAPACITY10
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSHEETCAPACITY11
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSHEETCAPACITY12
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSHEETCAPACITY2
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSHEETCAPACITY3
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSHEETCAPACITY4
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSHEETCAPACITY5
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSHEETCAPACITY6
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSHEETCAPACITY7
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSHEETCAPACITY8
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MONTHLYSHEETCAPACITY9
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn ORGANCODE
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn ORGANNAME
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn PLANTNAME
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn PRODUCTID
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn PRODUCTLINEANDSPECIFICATION
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn RESOLUTIONRATIO
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn SHIPPINGFORM
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn YEARNO
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+    }
+  }
+  EDITransformation.Transformation TransformationAnnualBudgetData
+  {
+    EDITableTransformation
+    {
+      InputTable: MID_ANNUALBUDGETDATA
+      OutputTable: Global_MappingAnnualBudgetData
+      EDIColumnMatch { InputColumn: BUSINESSSORT OutputColumn: BusinessSort }
+      EDIColumnMatch { InputColumn: BUSINESSTYPE OutputColumn: BusinessType }
+      EDIColumnMatch { InputColumn: CAPACITYEQUIVALENT OutputColumn: CapacityEquivalent }
+      EDIColumnMatch { InputColumn: CUTSNUMBER OutputColumn: CutsNumber }
+      EDIColumnMatch { InputColumn: DISPLAYTECHSORT OutputColumn: DisplayTechSort }
+      EDIColumnMatch { InputColumn: ID OutputColumn: ID }
+      EDIColumnMatch { InputColumn: MASKNUMBER OutputColumn: MaskNumber }
+      EDIColumnMatch { InputColumn: MONTHLYMODCAPACITY1 OutputColumn: MonthlyModCapacity1 }
+      EDIColumnMatch { InputColumn: MONTHLYMODCAPACITY10 OutputColumn: MonthlyModCapacity10 }
+      EDIColumnMatch { InputColumn: MONTHLYMODCAPACITY11 OutputColumn: MonthlyModCapacity11 }
+      EDIColumnMatch { InputColumn: MONTHLYMODCAPACITY12 OutputColumn: MonthlyModCapacity12 }
+      EDIColumnMatch { InputColumn: MONTHLYMODCAPACITY2 OutputColumn: MonthlyModCapacity2 }
+      EDIColumnMatch { InputColumn: MONTHLYMODCAPACITY3 OutputColumn: MonthlyModCapacity3 }
+      EDIColumnMatch { InputColumn: MONTHLYMODCAPACITY4 OutputColumn: MonthlyModCapacity4 }
+      EDIColumnMatch { InputColumn: MONTHLYMODCAPACITY5 OutputColumn: MonthlyModCapacity5 }
+      EDIColumnMatch { InputColumn: MONTHLYMODCAPACITY6 OutputColumn: MonthlyModCapacity6 }
+      EDIColumnMatch { InputColumn: MONTHLYMODCAPACITY7 OutputColumn: MonthlyModCapacity7 }
+      EDIColumnMatch { InputColumn: MONTHLYMODCAPACITY8 OutputColumn: MonthlyModCapacity8 }
+      EDIColumnMatch { InputColumn: MONTHLYMODCAPACITY9 OutputColumn: MonthlyModCapacity9 }
+      EDIColumnMatch { InputColumn: MONTHLYSALES1 OutputColumn: MonthlySales1 }
+      EDIColumnMatch { InputColumn: MONTHLYSALES10 OutputColumn: MonthlySales10 }
+      EDIColumnMatch { InputColumn: MONTHLYSALES11 OutputColumn: MonthlySales11 }
+      EDIColumnMatch { InputColumn: MONTHLYSALES12 OutputColumn: MonthlySales12 }
+      EDIColumnMatch { InputColumn: MONTHLYSALES2 OutputColumn: MonthlySales2 }
+      EDIColumnMatch { InputColumn: MONTHLYSALES3 OutputColumn: MonthlySales3 }
+      EDIColumnMatch { InputColumn: MONTHLYSALES4 OutputColumn: MonthlySales4 }
+      EDIColumnMatch { InputColumn: MONTHLYSALES5 OutputColumn: MonthlySales5 }
+      EDIColumnMatch { InputColumn: MONTHLYSALES6 OutputColumn: MonthlySales6 }
+      EDIColumnMatch { InputColumn: MONTHLYSALES7 OutputColumn: MonthlySales7 }
+      EDIColumnMatch { InputColumn: MONTHLYSALES8 OutputColumn: MonthlySales8 }
+      EDIColumnMatch { InputColumn: MONTHLYSALES9 OutputColumn: MonthlySales9 }
+      EDIColumnMatch { InputColumn: MONTHLYSHEETCAPACITY1 OutputColumn: MonthlySheetCapacity1 }
+      EDIColumnMatch { InputColumn: MONTHLYSHEETCAPACITY10 OutputColumn: MonthlySheetCapacity10 }
+      EDIColumnMatch { InputColumn: MONTHLYSHEETCAPACITY11 OutputColumn: MonthlySheetCapacity11 }
+      EDIColumnMatch { InputColumn: MONTHLYSHEETCAPACITY12 OutputColumn: MonthlySheetCapacity12 }
+      EDIColumnMatch { InputColumn: MONTHLYSHEETCAPACITY2 OutputColumn: MonthlySheetCapacity2 }
+      EDIColumnMatch { InputColumn: MONTHLYSHEETCAPACITY3 OutputColumn: MonthlySheetCapacity3 }
+      EDIColumnMatch { InputColumn: MONTHLYSHEETCAPACITY4 OutputColumn: MonthlySheetCapacity4 }
+      EDIColumnMatch { InputColumn: MONTHLYSHEETCAPACITY5 OutputColumn: MonthlySheetCapacity5 }
+      EDIColumnMatch { InputColumn: MONTHLYSHEETCAPACITY6 OutputColumn: MonthlySheetCapacity6 }
+      EDIColumnMatch { InputColumn: MONTHLYSHEETCAPACITY7 OutputColumn: MonthlySheetCapacity7 }
+      EDIColumnMatch { InputColumn: MONTHLYSHEETCAPACITY8 OutputColumn: MonthlySheetCapacity8 }
+      EDIColumnMatch { InputColumn: MONTHLYSHEETCAPACITY9 OutputColumn: MonthlySheetCapacity9 }
+      EDIColumnMatch { InputColumn: ORGANCODE OutputColumn: OrganCode }
+      EDIColumnMatch { InputColumn: ORGANNAME OutputColumn: OrganName }
+      EDIColumnMatch { InputColumn: PLANTNAME OutputColumn: PlantName }
+      EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductID }
+      EDIColumnMatch { InputColumn: PRODUCTLINEANDSPECIFICATION OutputColumn: ProductLineAndSpecification }
+      EDIColumnMatch { InputColumn: RESOLUTIONRATIO OutputColumn: ResolutionRatio }
+      EDIColumnMatch { InputColumn: SHIPPINGFORM OutputColumn: ShippingForm }
+      EDIColumnMatch { InputColumn: YEARNO OutputColumn: YearNo }
+    }
+  }
+}
diff --git a/_Main/BL/Relations/Relation_Global_MappingAnnualBudgetData_GlobalOTDTable_GlobalOTDTable_Global.qbl b/_Main/BL/Relations/Relation_Global_MappingAnnualBudgetData_GlobalOTDTable_GlobalOTDTable_Global.qbl
new file mode 100644
index 0000000..a3208a1
--- /dev/null
+++ b/_Main/BL/Relations/Relation_Global_MappingAnnualBudgetData_GlobalOTDTable_GlobalOTDTable_Global.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation Global_MappingAnnualBudgetData_GlobalOTDTable_GlobalOTDTable_Global_MappingAnnualBudgetData
+{
+  #keys: '1[414384.0.933884750]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[414384.0.933884752][414384.0.933884751][414384.0.933884753]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingAnnualBudgetData
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Global_MappingAnnualBudgetData
+  {
+    #keys: '3[414384.0.933884755][414384.0.933884754][414384.0.933884756]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_Global_MappingProviderCapacity_GlobalOTDTable_GlobalOTDTable_Global.qbl b/_Main/BL/Relations/Relation_Global_MappingProviderCapacity_GlobalOTDTable_GlobalOTDTable_Global.qbl
new file mode 100644
index 0000000..4b3c927
--- /dev/null
+++ b/_Main/BL/Relations/Relation_Global_MappingProviderCapacity_GlobalOTDTable_GlobalOTDTable_Global.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation Global_MappingProviderCapacity_GlobalOTDTable_GlobalOTDTable_Global_MappingProviderCapacity
+{
+  #keys: '1[414384.0.953290006]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[414384.0.953290008][414384.0.953290007][414384.0.953290009]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingProviderCapacity
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Global_MappingProviderCapacity
+  {
+    #keys: '3[414384.0.953290011][414384.0.953290010][414384.0.953290012]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MappingAnnualBudget_MPSync_MPSync_MappingAnnualBudget.qbl b/_Main/BL/Relations/Relation_MappingAnnualBudget_MPSync_MPSync_MappingAnnualBudget.qbl
deleted file mode 100644
index 4f9165c..0000000
--- a/_Main/BL/Relations/Relation_MappingAnnualBudget_MPSync_MPSync_MappingAnnualBudget.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MappingAnnualBudget_MPSync_MPSync_MappingAnnualBudget
-{
-  #keys: '1[414384.0.874289921]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MPSync
-  {
-    #keys: '3[414384.0.874289923][414384.0.874289922][414384.0.874289924]'
-    Cardinality: '0to1'
-    ObjectDefinition: MappingAnnualBudget
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide MappingAnnualBudget
-  {
-    #keys: '3[414384.0.874289926][414384.0.874289925][414384.0.874289927]'
-    Cardinality: '1toN'
-    ObjectDefinition: MPSync
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration3.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration3.qbl
new file mode 100644
index 0000000..a3edaf0
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration3.qbl
@@ -0,0 +1,54 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod IterativeGeneration3 (
+  Supply_MP smp,
+  Number numberOfPlies,
+  Real fulfillmentQuantity
+)
+{
+  TextBody:
+  [*
+    info( "灞傛暟锛�", numberOfPlies );
+    ontype ( smp ) {
+      NewSupply as ns : {
+        info( "渚涘簲绫诲瀷锛圢ewSupply锛�", "    渚涘簲閲忥細", ns.Quantity(), "    瀹為檯鐢ㄩ噺锛�", fulfillmentQuantity );
+        ontype ( ns.PeriodTask_MP() ) {
+          PeriodTaskOperation as pto : {
+            info( "鎿嶄綔鍛ㄦ湡浠诲姟    ", "渚涘簲鏃堕棿锛�", ns.Start().Format( "Y-M2-D2" ), "    鍛ㄦ湡浠诲姟KEY锛�", pto.Key(), "    ",
+                  ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name() );
+            traverse ( pto, DependentDemand, dd, dd.Quantity() > 0 ) {
+              traverse ( dd, Fulfillment, f ) {
+                smp1 := f.Supply_MP();
+                numberOfPlies++;
+                info( "--------------------------------------------------------------" );
+                fulfillmentQuantity := fulfillmentQuantity * ns.ProcessOutput().astype( OperationOutput ).Quantity() *
+                                                             dd.ProcessInput().astype( OperationInput ).Quantity();
+                CapacityAllocationResults::IterativeGeneration3( smp1, numberOfPlies, fulfillmentQuantity );
+                numberOfPlies--;
+              }
+            }
+          }
+           
+          PeriodTaskLaneLeg as ptll : {
+            targetDependentDemand := select( ptll, DependentDemand, dd, dd.ProcessInput().ProductInStockingPoint_MP().ProductID() = ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() and
+                                             dd.Quantity() = ns.Quantity() );
+            info( "杞﹂亾鍛ㄦ湡浠诲姟    ", "渚涘簲鏃堕棿锛�", ns.Start().Format( "Y-M2-D2" ), "    鍛ㄦ湡浠诲姟KEY锛�", ptll.Key(), "    ", 
+                  targetDependentDemand.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name() );
+            traverse ( targetDependentDemand, Fulfillment, f ) {
+              smp1 := f.Supply_MP();
+              numberOfPlies++;
+              info( "--------------------------------------------------------------" );
+              CapacityAllocationResults::IterativeGeneration3( smp1, numberOfPlies, f.Quantity() );
+              numberOfPlies--;
+            } 
+          }
+        }
+      }
+          
+      InventorySupply as is : {
+        info( "渚涘簲绫诲瀷锛圛nventorySupply锛�    ", "渚涘簲鏃堕棿锛�", is.Date().Format( "Y-M2-D2" ), "    渚涘簲閲忥細", is.Quantity(), 
+              "    瀹為檯鐢ㄩ噺锛�", fulfillmentQuantity, "    ", is.ProductInStockingPoint_MP().Name() );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Test.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Test.qbl
new file mode 100644
index 0000000..7000af7
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Test.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Test (
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    traverse ( macroPlan, Product_MP.ProductInStockingPoint_MP, pisp, pisp.ProductID() = "ProXOver 1 D2.6 A"        and 
+                                                                      pisp.StockingPointID() = "Carco Philadelphia" ) {
+      traverse ( pisp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ).Supply_MP, smp, 
+               smp.ProductInStockingPointInPeriodPlanning().Start().Date() = Date::Construct( 2020, 4, 7 ) and
+               smp.Quantity() > 0 ) {                                                                  
+        CapacityAllocationResults::IterativeGeneration3( smp, 1, smp.Quantity() );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/Attribute_PanelMaterialStockingPointID.qbl b/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/Attribute_PanelMaterialStockingPointID.qbl
new file mode 100644
index 0000000..d26fc6e
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/Attribute_PanelMaterialStockingPointID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PanelMaterialStockingPointID
+{
+  #keys: '3[414702.1.15456051][414702.1.15456050][414702.1.15456052]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_AutomaticallyGenerateCapacityAllocationResults.qbl b/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_AutomaticallyGenerateCapacityAllocationResults.qbl
new file mode 100644
index 0000000..494bfc6
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_AutomaticallyGenerateCapacityAllocationResults.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod AutomaticallyGenerateCapacityAllocationResults (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    targetProduct_MP := select( macroPlan, Product_MP, tempPMP, tempPMP.ID() = "ProSports Spider D2.6 M" );
+    
+    period_MPS := null( Period_MPs );
+    traverse ( macroPlan, PeriodSpecification_MP, psmp, psmp.ID() = "Planning periods" ) {
+      period_MPS := selectsortedset( psmp, PeriodSpecificationPeriod.Period_MP, pmp, not pmp.IsHistorical(), pmp.StartDate() );
+    }
+    
+    traverse ( targetProduct_MP, ProductInStockingPoint_MP, pisp ) {
+      traverse ( period_MPS, Elements, pmp, pmp.StartDate() = Date::Construct( 2020, 4, 1 ) ) { 
+        info( pmp.StartDate().Format( "Y-M2-D2" ), "    outputPISP锛�", pisp.Name() );
+        CapacityAllocationResultsRuleConfiguration::RecursiveGeneration( macroPlan, pisp, pisp, pmp.StartDate() );
+        info( "-------------------------------------------------------------------------------------------------------" );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_AutomaticallyGenerateRule.qbl b/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_AutomaticallyGenerateRule.qbl
new file mode 100644
index 0000000..c2effb5
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_AutomaticallyGenerateRule.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod AutomaticallyGenerateRule (
+  MacroPlan macroPlan,
+  GlobalOTDTable globalOTDTable
+)
+{
+}
diff --git a/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_RecursiveGeneration.qbl b/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_RecursiveGeneration.qbl
new file mode 100644
index 0000000..1068c7b
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_RecursiveGeneration.qbl
@@ -0,0 +1,38 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod RecursiveGeneration (
+  MacroPlan macroPlan,
+  ProductInStockingPoint_MP outputPISP,
+  ProductInStockingPoint_MP firstPISP,
+  Date startDate
+)
+{
+  TextBody:
+  [*
+    traverse ( outputPISP, ProcessOutput.AsProcessOutput, pmp ) {
+      
+      ontype( pmp ) {
+        
+        Operation as o : {  
+          traverse ( o, OperationInput, oi ) {
+            oiPISP := oi.ProductInStockingPoint_MP();
+            CapacityAllocationResultsRuleConfiguration::RecursiveGeneration( macroPlan, oiPISP, firstPISP, startDate );
+            info( "杈撳叆PISP锛�", oiPISP.Name(), "    杈撳嚭PISP锛�", outputPISP.Name(), "    绗竴娆ISP锛�", firstPISP.Name() );
+          }
+        }
+        
+        LaneLeg as ll : {
+          traverse ( ll, LaneLegInput, lli ) {
+            lliPISP := lli.ProductInStockingPoint_MP();
+            if ( lliPISP.ProductID() = outputPISP.ProductID() ) {
+              CapacityAllocationResultsRuleConfiguration::RecursiveGeneration( macroPlan, lliPISP, firstPISP, startDate );
+              info( "杈撳叆PISP锛�", lliPISP.Name(), "    杈撳嚭PISP锛�", outputPISP.Name(), "    绗竴娆ISP锛�", firstPISP.Name() );
+            }
+          }
+        }
+        
+      }
+      
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Test.qbl b/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Test.qbl
new file mode 100644
index 0000000..dd2083a
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Test.qbl
@@ -0,0 +1,61 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Test (
+  MacroPlan this
+)
+{
+  TextBody:
+  [*
+    pispnames := construct( Strings );
+    
+    traverse( this, SalesDemand.ProductInStockingPoint_MP, pisp )
+    {
+      if( not exists( pisp, ProcessOutput.AsProcessOutput.ProcessInput, processinput, true ) )
+      {
+        pispnames.Add( pisp.Name() );
+      }
+      else
+      {
+        dummyprocesses := selectset( pisp, ProcessOutput.AsProcessOutput, process, true );
+        index := 0;
+        limit := 10000;
+        
+        while( index < dummyprocesses.Size()
+               and index < limit )
+        {
+          dummyprocess := dummyprocesses.Element( index );
+          index++;
+          
+          pisps := construct( ProductInStockingPoint_MPs );
+          
+          if( dummyprocess.istype( Operation ) )
+          {
+            pisps := selectset( dummyprocess, astype( Operation ).RoutingStep.Routing.InputPISPNodeInRouting.ProductInStockingPoint_MP, pisp2,
+                                not pisp2.IsSystem() );
+          }
+          else if( dummyprocess.istype( LaneLeg ) )
+          {
+            pisps := selectset( dummyprocess, astype( LaneLeg ).LaneLegInput.ProductInStockingPoint_MP, pisp2,
+                                pisp2.Product_MP() = pisp.Product_MP() );
+          }
+          
+          traverse( pisps, Elements, pisp2 )
+          {
+            if( not exists( pisp2, ProcessOutput.AsProcessOutput.ProcessInput, processinput, true ) )
+            {
+              pispnames.Add( pisp2.Name() );
+            }
+            else
+            {
+              dummyprocesses2 := selectset( pisp2, ProcessOutput.AsProcessOutput, process, true );
+              dummyprocesses.AddInPlace( dummyprocesses2 );
+            }
+          }
+        }
+      }
+    }
+    
+    pispnames := pispnames.Unique().Sort();
+    info( pispnames.ToString( String::NewLine() ) );
+  *]
+}
diff --git a/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateData.qbl b/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateData.qbl
index 0f86052..bb13b39 100644
--- a/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateData.qbl
+++ b/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateData.qbl
@@ -1,21 +1,25 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateData (
-  MacroPlan macroPlan
+  MacroPlan macroPlan,
+  Scenario scenario
 )
 {
   TextBody:
   [*
+    macroPlan.CustomerAndForecastOrder( relflush );
+    
     traverse ( macroPlan, SalesDemand.astype( CustomerOrder ), co, true ) {
       macroPlan.CustomerAndForecastOrder( relnew,
-                                          OrderID := co.OrderID(),
-                                          ProductID := co.ProductID(),
-                                          BusinessType := co.BusinessType(),
-                                          Customer := co.CustomerName(),
-                                          CustomerID := co.CustomerID(),
-                                          Quantity := co.Quantity(),
+                                          VerNo             := scenario.Name(),
+                                          OrderID           := co.OrderID(),
+                                          ProductID         := co.ProductID(),
+                                          BusinessType      := co.BusinessType(),
+                                          Customer          := co.CustomerName(),
+                                          CustomerID        := co.CustomerID(),
+                                          Quantity          := co.Quantity(),
                                           UnitOfMeasureName := co.UnitOfMeasureName(),
-                                          DemandDate := co.StartDate()
+                                          DemandDate        := co.StartDate()
                                          );
     }
   *]
diff --git a/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateFillingCapacityOrder.qbl b/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateFillingCapacityOrder.qbl
index dc39665..9bc36fc 100644
--- a/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateFillingCapacityOrder.qbl
+++ b/_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateFillingCapacityOrder.qbl
@@ -9,9 +9,9 @@
   [*
     // NBoTk Sep-13-2023 (created)
     
-    owner.FillingCapacityOrder(relnew,ProductID := data.ProductID(),BusinessType := data.BusinessType(),Customer := data.Customer(),CustomerID := data.CustomerID(),
-                                    Quantity := data.Quantity(),UnitOfMeasureName := data.UnitOfMeasureName(),PanelBigSheetQuantity := data.PanelBigSheetQuantity(),SalesAmount := data.SalesAmount(),
-                                    ForecastDemandDate := data.ForecastDemandDate(),DemandDate := data.DemandDate(),VerNo := data.VerNo(),SalesSegmentName := data.SalesSegmentName()
-                                    );
+    //owner.FillingCapacityOrder(relnew,ProductID := data.ProductID(),BusinessType := data.BusinessType(),Customer := data.Customer(),CustomerID := data.CustomerID(),
+    //                                Quantity := data.Quantity(),UnitOfMeasureName := data.UnitOfMeasureName(),PanelBigSheetQuantity := data.PanelBigSheetQuantity(),SalesAmount := data.SalesAmount(),
+    //                                ForecastDemandDate := data.ForecastDemandDate(),DemandDate := data.DemandDate(),VerNo := data.VerNo(),SalesSegmentName := data.SalesSegmentName()
+    //                                );
   *]
 }
diff --git a/_Main/BL/Type_CustomerOrder/StaticMethod_DoSync.qbl b/_Main/BL/Type_CustomerOrder/StaticMethod_DoSync.qbl
index 170d328..4994e49 100644
--- a/_Main/BL/Type_CustomerOrder/StaticMethod_DoSync.qbl
+++ b/_Main/BL/Type_CustomerOrder/StaticMethod_DoSync.qbl
@@ -3,7 +3,8 @@
 StaticMethod DoSync (
   MacroPlan macroPlan,
   Strings businessTypes,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  Strings organcodelist
 )
 {
   TextBody:
@@ -12,6 +13,6 @@
     //info( "Forecast Finished, Start CustomerOrder Data Broker" );
     //macroPlan.Broker_OTD_CustomerOrder().Execute();
     info( "CustomerOrder Data Broker Finished, Start CustomerOrder Mapping" );
-    macroPlan.MappingCustomerOrderData( businessTypes,globalOTDTable );
+    macroPlan.MappingCustomerOrderData( businessTypes,globalOTDTable, organcodelist );
   *]
 }
diff --git a/_Main/BL/Type_ERPRequestOfPR/StaticMethod_Create.qbl b/_Main/BL/Type_ERPRequestOfPR/StaticMethod_Create.qbl
index 1c4c527..585f285 100644
--- a/_Main/BL/Type_ERPRequestOfPR/StaticMethod_Create.qbl
+++ b/_Main/BL/Type_ERPRequestOfPR/StaticMethod_Create.qbl
@@ -11,7 +11,7 @@
     
     request.BusinessType( history.BusinessType() );
     request.DataID( history.DataID() );
-    request.DeliveryDate( history.ProduceRequiredDate() );
+    request.DeliveryDate( history.DeliveryDate() );
     request.MRPCalverNo( history.MRPCalverNo() );
     request.OrganCode( history.OrganCode() );
     request.ProductID( history.ProductID() );
diff --git a/_Main/BL/Type_FillingCapacityOrder/StaticMethod_CreateCustomOrder.qbl b/_Main/BL/Type_FillingCapacityOrder/StaticMethod_CreateCustomOrder.qbl
index c40a89b..8a20d4c 100644
--- a/_Main/BL/Type_FillingCapacityOrder/StaticMethod_CreateCustomOrder.qbl
+++ b/_Main/BL/Type_FillingCapacityOrder/StaticMethod_CreateCustomOrder.qbl
@@ -14,7 +14,7 @@
     targetCustomerOrder := CustomerOrder::Create( targetProduct_MP,
                                                   targetStockingPoint_MP,
                                                   OS::GenerateGUIDAsString(),
-                                                  fillingCapacityOrder.OrderDate(),
+                                                  fillingCapacityOrder.DemandDate(),
                                                   quantity,
                                                   0.0,
                                                   "Normal",
diff --git a/_Main/BL/Type_Forecast/StaticMethod_DoSync.qbl b/_Main/BL/Type_Forecast/StaticMethod_DoSync.qbl
index 1fdba27..e952521 100644
--- a/_Main/BL/Type_Forecast/StaticMethod_DoSync.qbl
+++ b/_Main/BL/Type_Forecast/StaticMethod_DoSync.qbl
@@ -3,7 +3,8 @@
 StaticMethod DoSync (
   MacroPlan macroPlan,
   Strings businessTypes,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  Strings organcodelist
 )
 {
   TextBody:
@@ -12,6 +13,6 @@
     //info( "OperationCost Finished, Start Forecast Data Broker" );
     //macroPlan.Broker_OTD_Forecast().Execute();
     info( "Forecast Data Broker Finished, Start Forecast Mapping" );
-    macroPlan.MappingForecastData( businessTypes,globalOTDTable );
+    macroPlan.MappingForecastData( businessTypes,globalOTDTable, organcodelist );
   *]
 }
diff --git a/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByHalfYear.qbl b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByHalfYear.qbl
new file mode 100644
index 0000000..f76ff98
--- /dev/null
+++ b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByHalfYear.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetFulfilledBalanceByHalfYear (
+  Strings productNo,
+  MacroPlan macroPlan,
+  Number yearNo,
+  Number halfNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    fromMonth := 1 + ( halfNo - 1 ) * 6;
+    toMonth := 6 + ( halfNo - 1 ) * 6;
+    result := 0.0;
+    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
+      result := result + Forecast::GetFulfilledBalanceByMonth( productNo, macroPlan, yearNo, i );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl
new file mode 100644
index 0000000..2d3b108
--- /dev/null
+++ b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetFulfilledBalanceByMonth (
+  Strings productNo,
+  MacroPlan macroPlan,
+  Number yearNo,
+  Number monthNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := sum( macroPlan, 
+                   Product_MP.SalesDemand,
+                   item, 
+                   item.istype( Forecast ) and productNo.Find( item.ProductID() ) > -1 
+                   and item.StartDate().Year() = yearNo
+                   and item.StartDate().Month() = monthNo,
+                   item.FulfilledQuantity() * item.Price() );
+    return result;
+  *]
+}
diff --git "a/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceBySeason\043763.qbl" "b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceBySeason\043763.qbl"
new file mode 100644
index 0000000..c78100e
--- /dev/null
+++ "b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceBySeason\043763.qbl"
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetFulfilledBalanceBySeason (
+  Strings productNo,
+  MacroPlan macroPlan,
+  Number yearNo,
+  Number seasonNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    fromMonth := 1 + ( seasonNo - 1 ) * 3;
+    toMonth := 3 + ( seasonNo - 1 ) * 3;
+    result := 0.0;
+    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
+      result := result + Forecast::GetFulfilledBalanceByMonth( productNo, macroPlan, yearNo, i );
+    }
+    return result;
+  *]
+}
diff --git "a/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByYear\0430.qbl" "b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByYear\0430.qbl"
new file mode 100644
index 0000000..c9f43be
--- /dev/null
+++ "b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByYear\0430.qbl"
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetFulfilledBalanceByYear (
+  Strings productNo,
+  MacroPlan macroPlan,
+  Number yearNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := sum( macroPlan, 
+                   Product_MP.SalesDemand,
+                   item, 
+                   item.istype( Forecast ) and productNo.Find( item.ProductID() ) > -1 
+                   and item.StartDate().Year() = yearNo, 
+                   item.FulfilledQuantity() * item.Price() );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityByHalfYear.qbl b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityByHalfYear.qbl
new file mode 100644
index 0000000..1381ede
--- /dev/null
+++ b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityByHalfYear.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetFulfilledQuantityByHalfYear (
+  Strings productNo,
+  MacroPlan macroPlan,
+  Number yearNo,
+  Number halfNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    fromMonth := 1 + ( halfNo - 1 ) * 6;
+    toMonth := 6 + ( halfNo - 1 ) * 6;
+    result := 0.0;
+    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
+      result := result + Forecast::GetFulfilledQuantityByMonth( productNo, macroPlan, yearNo, i );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityByMonth.qbl b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityByMonth.qbl
new file mode 100644
index 0000000..83c7781
--- /dev/null
+++ b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityByMonth.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetFulfilledQuantityByMonth (
+  Strings productNo,
+  MacroPlan macroPlan,
+  Number yearNo,
+  Number monthNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := sum( macroPlan, 
+                   Product_MP.SalesDemand,
+                   item, 
+                   item.istype( Forecast ) and productNo.Find( item.ProductID() ) > -1 
+                   and item.StartDate().Year() = yearNo
+                   and item.StartDate().Month() = monthNo,
+                   item.FulfilledQuantity() );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityBySeason.qbl b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityBySeason.qbl
new file mode 100644
index 0000000..c763c5c
--- /dev/null
+++ b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityBySeason.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetFulfilledQuantityBySeason (
+  Strings productNo,
+  MacroPlan macroPlan,
+  Number yearNo,
+  Number seasonNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    fromMonth := 1 + ( seasonNo - 1 ) * 3;
+    toMonth := 3 + ( seasonNo - 1 ) * 3;
+    result := 0.0;
+    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
+      result := result + Forecast::GetFulfilledQuantityByMonth( productNo, macroPlan, yearNo, i );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityByYear.qbl b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityByYear.qbl
new file mode 100644
index 0000000..0edb9d9
--- /dev/null
+++ b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityByYear.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetFulfilledQuantityByYear (
+  Strings productNo,
+  MacroPlan macroPlan,
+  Number yearNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := sum( macroPlan, 
+                   Product_MP.SalesDemand,
+                   item, 
+                   item.istype( Forecast ) and productNo.Find( item.ProductID() ) > -1 
+                   and item.StartDate().Year() = yearNo, 
+                   item.FulfilledQuantity() );
+    return result;
+  *]
+}
diff --git "a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart\043156.qbl" "b/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart\043156.qbl"
index 6afbad7..f860d1f 100644
--- "a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart\043156.qbl"
+++ "b/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart\043156.qbl"
@@ -9,9 +9,7 @@
   CapacityAndSaleBudgeFilterPlaceOfProductionOfArrays placeOfProductionOfArrays,
   CapacityAndSaleBudgeFilterYears years,
   CapacityAndSaleBudgeFilterMonths months,
-  MPSync mpSync,
-  GlobalOTDTable otdTable,
-  MacroPlan mappingParent
+  GlobalOTDTable otdTable
 )
 {
   Description: '鎸夊叆鍙傚鐞嗘暟鎹紝浜х敓闇�瑕佺殑CapacityAndSaleBudgeChartElement'
@@ -19,62 +17,68 @@
   [*
     // yypsybs Sep-19-2023 (created)
     // true, false
-    info( saleOrCapacity );
+    //info( saleOrCapacity );
     // 鏈�;瀛e害;鍗婂勾;骞�
-    info( groupBy );
+    //info( groupBy );
     // 闈㈡澘鍩哄湴;浜嬩笟閮�
-    info( byBusinessTypeOrByOrgCode );
-    traverse( businessTypes, Elements, businessType ) {
-      debuginfo( "businessType : " + businessType.BusinessType() );
-    }
-    traverse( placeOfProductionOfArrays, Elements, placeOfProductionOfArray ) {
-      debuginfo( "placeOfProductionOfArray : " + placeOfProductionOfArray.PlaceOfProductionOfArray() );
-    }
-    traverse( macroPlans, Elements, macroPlan ) {
-      debuginfo( "macroPlan : " + macroPlan.ScenarioName() );  
-    }
+    //info( byBusinessTypeOrByOrgCode );
+    //traverse( businessTypes, Elements, businessType ) {
+    //  info( "businessType : " + businessType.BusinessType() );
+    //}
+    //traverse( placeOfProductionOfArrays, Elements, placeOfProductionOfArray ) {
+    //  info( "placeOfProductionOfArray : " + placeOfProductionOfArray.PlaceOfProductionOfArray() );
+    //}
+    //traverse( macroPlans, Elements, macroPlan ) {
+    //  info( "macroPlan : " + macroPlan.ScenarioName() );  
+    //}
     // 骞翠唤涓嶉�夋椂鍏ㄩ��
     if( years.Size() = 0 ) {
       years := selectsortedset( this, CapacityAndSaleBudgeFilterYear, item, true, item.YearNo() );
     }
-    traverse( years, Elements, year ) {
-      debuginfo( "yearNo : " + [String]year.YearNo() );
-    }
+    //traverse( years, Elements, year ) {
+    //  debuginfo( "yearNo : " + [String]year.YearNo() );
+    //}
     // 鏈堜唤涓嶉�夋椂鍏ㄩ��
     if( months.Size() = 0 ) {
       months := selectsortedset( this, CapacityAndSaleBudgeFilterMonth, item, true, item.MonthNo() );
     }
-    traverse( months, Elements, month ) {
-      debuginfo( "monthNo : " + [String]month.MonthNo() );
-    }
+    //traverse( months, Elements, month ) {
+    //  debuginfo( "monthNo : " + [String]month.MonthNo() );
+    //}
     
     // ====娓呯悊鏃ф暟鎹�====
     this.CapacityAndSaleBudgeChartRow( relflush );
     this.CapacityAndSaleBudgeChartElement( relflush );
     
     // ====鎸夐潰鏉垮熀鍦板拰浜嬩笟閮ㄥ浜у搧杩涜绛涢�夊垎缁�====
-    historyData := selectset( mpSync, MappingCapacityAndSaleBudge, item, true );
+    historyData := selectset( otdTable, Global_MappingAnnualBudgetData, item, true );
     if( businessTypes.Size() > 0 ) {
       businessTypeStrings := selectuniquevalues( businessTypes, Elements, item, true, item.BusinessType() );
       historyData := selectset( historyData, Elements, item, businessTypeStrings.Find( item.BusinessType() ) > -1 );
     }
     if( placeOfProductionOfArrays.Size() > 0 ) {
       placeOfProductionOfArrayStrings := selectuniquevalues( placeOfProductionOfArrays, Elements, item, true, item.PlaceOfProductionOfArray() );
-      historyData := selectset( historyData, Elements, item, placeOfProductionOfArrayStrings.Find( item.PlaceOfProductionOfArray() ) > -1 );
+      historyData := selectset( historyData, Elements, item, placeOfProductionOfArrayStrings.Find( item.OrgCodeFromBom() ) > -1 );
     }
     //info( "historyData : " + [String]historyData.Size() );
     traverse( historyData, Elements, item ) {
-      row := CapacityAndSaleBudgeChartRow::CreateIfNotExist( this, item.BusinessType(), item.PlaceOfProductionOfArray() );
+      row := CapacityAndSaleBudgeChartRow::CreateIfNotExist( this, item.BusinessType(), item.OrgCodeFromBom() );
       // 璁板綍姣忚鍖呭惈鍝簺product
-      CapacityAndSaleBudgeChartRowProduct::CreateIfNotExist( row, item.ProductCode() );
+      CapacityAndSaleBudgeChartRowProduct::CreateIfNotExist( row, item.ProductID() );
     }
     rows := selectset( this, CapacityAndSaleBudgeChartRow, item, true );
     //info( "rows : " + [String]rows.Size() );
-    placeOfProductionOfArrayList := selectuniquevalues( historyData, Elements, item, item.PlaceOfProductionOfArray() );
+    placeOfProductionOfArrayList := selectuniquevalues( historyData, Elements, item, item.OrgCodeFromBom() );
+    //traverse( placeOfProductionOfArrayList, Elements, item ) {
+    //  info( "placeOfProduction : " + item );  
+    //}
     businessTypeList := selectuniquevalues( historyData, Elements, item, item.BusinessType() );
+    //traverse( businessTypeList, Elements, item ) {
+    //  info( "businessType : " + item );  
+    //}
     // 鐢熸垚鍥捐〃鍏冪礌
     traverse( years, Elements, year ) {
-      debuginfo( "process year start : " + [String]year.YearNo() );
+    //  debuginfo( "process year start : " + [String]year.YearNo() );
       if( byBusinessTypeOrByOrgCode = "闈㈡澘鍩哄湴" and groupBy = "骞�" ) {
         // 鐩爣
         traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
@@ -83,8 +87,8 @@
                                                  TimeStringAndScenarioName := [String]year.YearNo() + "骞�-鐩爣",
                                                  BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                  Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                     MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, year.YearNo() ),
-                                                                     MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, year.YearNo() ) )
+                                                                     Global_MappingAnnualBudgetData::GetSaleByYear( productCodeList, otdTable, year.YearNo() ),
+                                                                     Global_MappingForecast::GetQuantityByYear( productCodeList, otdTable, year.YearNo() ) )
                                                  );  
           // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
@@ -92,7 +96,7 @@
                                                    TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName(),
                                                    BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                    Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                       MappingCustomerOrder::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ),
+                                                                       Forecast::GetFulfilledBalanceByYear( productCodeList, macroPlan, year.YearNo() ),
                                                                        Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ) 
                                                                        )
                                                    ); 
@@ -107,8 +111,8 @@
                                                    TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
                                                    BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                    Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                       MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ),
-                                                                       MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ) )
+                                                                       Global_MappingAnnualBudgetData::GetSaleByHalfYear( productCodeList, otdTable, year.YearNo(), halfNo ),
+                                                                       Global_MappingForecast::GetQuantityByHalfYear( productCodeList, otdTable, year.YearNo(), halfNo ) )
                                                    );  
             // S&OP
             traverse( macroPlans, Elements, macroPlan ) {
@@ -116,7 +120,7 @@
                                                      TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
                                                      BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                      Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                         MappingCustomerOrder::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ),
+                                                                         Forecast::GetFulfilledBalanceByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ),
                                                                          Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo )
                                                                          )
                                                      ); 
@@ -128,15 +132,12 @@
         for( seasonNo := 1; seasonNo <= 4; seasonNo := seasonNo + 1 ) {
           traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
             productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
-      //      info( "productCodeList : " + [String]productCodeList.Size() );
-      //      info( "MappingCapacityAndSaleBudge::GetSheetBySeason : " + [String]MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) );
-      //      info( "seasonNo : " + [String]seasonNo );
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + [String]seasonNo + "瀛e害-鐩爣",
                                                    BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                    Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                       MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ),
-                                                                       MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ) )
+                                                                       Global_MappingAnnualBudgetData::GetSaleBySeason( productCodeList, otdTable, year.YearNo(), seasonNo ),
+                                                                       Global_MappingForecast::GetQuantityBySeason( productCodeList, otdTable, year.YearNo(), seasonNo ) )
                                                    );  
       //      info( "productCodeList : " + [String]productCodeList.Size() );
             // S&OP
@@ -145,7 +146,7 @@
                                                      TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
                                                      BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                      Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                         MappingCustomerOrder::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ) ,
+                                                                         Forecast::GetFulfilledBalanceBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ) ,
                                                                          Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo )
                                                                          )
                                                      ); 
@@ -155,7 +156,7 @@
       }
       if ( byBusinessTypeOrByOrgCode = "闈㈡澘鍩哄湴" and groupBy = "鏈�" ) {
         traverse( months, Elements, month ) {
-          info( "process month start : " + [String]month.MonthNo() );
+    //      info( "process month start : " + [String]month.MonthNo() );
           monthNoString := ifexpr( month.MonthNo() <= 9, "0" + [String]month.MonthNo(), [String]month.MonthNo() );
           traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
             productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
@@ -163,8 +164,8 @@
                                                    TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + monthNoString + "鏈�-鐩爣",
                                                    BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                    Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                       MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ),
-                                                                       MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ) )
+                                                                       Global_MappingAnnualBudgetData::GetSaleByMonth( productCodeList, otdTable, year.YearNo(), month.MonthNo() ),
+                                                                       Global_MappingForecast::GetQuantityByMonth( productCodeList, otdTable, year.YearNo(), month.MonthNo() ) )
                                                    );  
             // S&OP
             traverse( macroPlans, Elements, macroPlan ) {
@@ -172,13 +173,13 @@
                                                      TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + monthNoString + "鏈�-" + macroPlan.ScenarioName(),
                                                      BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                      Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                         MappingCustomerOrder::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ),
+                                                                         Forecast::GetFulfilledBalanceByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ),
                                                                          Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ) 
                                                                          )
                                                      ); 
             }
           }
-          info( "process month end : " + [String]month.MonthNo() );
+    //      info( "process month end : " + [String]month.MonthNo() );
         }
       }
       if( byBusinessTypeOrByOrgCode = "浜嬩笟閮�" and groupBy = "骞�" ) {
@@ -189,8 +190,8 @@
                                                  TimeStringAndScenarioName := [String]year.YearNo() + "骞�-鐩爣",
                                                  BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                  Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                     MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, year.YearNo() ),
-                                                                     MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, year.YearNo() ) )
+                                                                     Global_MappingAnnualBudgetData::GetSaleByYear( productCodeList, otdTable, year.YearNo() ),
+                                                                     Global_MappingForecast::GetQuantityByYear( productCodeList, otdTable, year.YearNo() ) )
                                                  );  
           // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
@@ -198,7 +199,7 @@
                                                    TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName(),
                                                    BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                    Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                       MappingCustomerOrder::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ) ,
+                                                                       Forecast::GetFulfilledBalanceByYear( productCodeList, macroPlan, year.YearNo() ) ,
                                                                        Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() )
                                                                        )
                                                    ); 
@@ -213,8 +214,8 @@
                                                    TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
                                                    BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                    Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                       MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ),
-                                                                       MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ) )
+                                                                       Global_MappingAnnualBudgetData::GetSaleByHalfYear( productCodeList, otdTable, year.YearNo(), halfNo ),
+                                                                       Global_MappingForecast::GetQuantityByHalfYear( productCodeList, otdTable, year.YearNo(), halfNo ) )
                                                    );  
             // S&OP
             traverse( macroPlans, Elements, macroPlan ) {
@@ -222,7 +223,7 @@
                                                      TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
                                                      BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                      Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                         MappingCustomerOrder::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ) ,
+                                                                         Forecast::GetFulfilledBalanceByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ) ,
                                                                          Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo )
                                                                          )
                                                      ); 
@@ -232,15 +233,15 @@
       }
       if ( byBusinessTypeOrByOrgCode = "浜嬩笟閮�" and groupBy = "瀛e害" ) {
         for( seasonNo := 1; seasonNo <= 4; seasonNo := seasonNo + 1 ) {
-          debuginfo( "process season start : " + [String]seasonNo );
+    //      debuginfo( "process season start : " + [String]seasonNo );
           traverse( businessTypeList, Elements, businessType ) {
             productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + [String]seasonNo + "瀛e害-鐩爣",
                                                    BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                    Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                       MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ),
-                                                                       MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ) )
+                                                                       Global_MappingAnnualBudgetData::GetSaleBySeason( productCodeList, otdTable, year.YearNo(), seasonNo ),
+                                                                       Global_MappingForecast::GetQuantityBySeason( productCodeList, otdTable, year.YearNo(), seasonNo ) )
                                                    );  
             // S&OP
             traverse( macroPlans, Elements, macroPlan ) {
@@ -248,18 +249,18 @@
                                                      TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
                                                      BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                      Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                         MappingCustomerOrder::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ),
+                                                                         Forecast::GetFulfilledBalanceBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ),
                                                                          Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ) 
                                                                          )
                                                      ); 
             }                    
           }
-          info( "process season end : " + [String]seasonNo );
+    //      info( "process season end : " + [String]seasonNo );
         }
       }
       if ( byBusinessTypeOrByOrgCode = "浜嬩笟閮�" and groupBy = "鏈�" ) {
         traverse( months, Elements, month ) {
-          debuginfo( "process month start : " + [String]month.MonthNo() );
+    //      debuginfo( "process month start : " + [String]month.MonthNo() );
           monthNoString := ifexpr( month.MonthNo() <= 9, "0" + [String]month.MonthNo(), [String]month.MonthNo() );
           traverse( businessTypeList, Elements, businessType ) {
             productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
@@ -267,8 +268,8 @@
                                                    TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + monthNoString + "鏈�-鐩爣",
                                                    BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                    Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                       MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ),
-                                                                       MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ) )
+                                                                       Global_MappingAnnualBudgetData::GetSaleByMonth( productCodeList, otdTable, year.YearNo(), month.MonthNo() ),
+                                                                       Global_MappingForecast::GetQuantityByMonth( productCodeList, otdTable, year.YearNo(), month.MonthNo() ) )
                                                    );  
             // S&OP
             traverse( macroPlans, Elements, macroPlan ) {
@@ -276,16 +277,16 @@
                                                      TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + monthNoString + "鏈�-" + macroPlan.ScenarioName(),
                                                      BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                      Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                         MappingCustomerOrder::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ) ,
+                                                                         Forecast::GetFulfilledBalanceByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ) ,
                                                                          Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() )
                                                                          )
                                                      ); 
             }            
           }
-          debuginfo( "process month end : " + [String]month.MonthNo() );
+    //      debuginfo( "process month end : " + [String]month.MonthNo() );
         }
       }
-      debuginfo( "process year end : " + [String]year.YearNo() )
+    //  debuginfo( "process year end : " + [String]year.YearNo() )
     }
     //info( "CapacityAndSaleBudgeChartElement : " + [String]selectset( this, CapacityAndSaleBudgeChartElement, item, true ).Size() );
     //traverse( this, CapacityAndSaleBudgeChartRow, row ) {
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart.qbl b/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart.qbl
deleted file mode 100644
index fbb2caf..0000000
--- a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart.qbl
+++ /dev/null
@@ -1,264 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method CapacityAndSaleBudgeChart (
-  MacroPlans macroPlans,
-  String saleOrCapacity,
-  String groupBy,
-  String byBusinessTypeOrByOrgCode,
-  String businessTypeChosen,
-  String placeOfProductionOfArrayChosen,
-  String year,
-  MPSync mpSync,
-  GlobalOTDTable otdTable,
-  MacroPlan mappingParent
-)
-{
-  Description:
-  [*
-    鎸夊叆鍙傚鐞嗘暟鎹紝浜х敓闇�瑕佺殑CapacityAndSaleBudgeChartElement
-    锛侊紒锛侊紒搴熷純锛侊紒锛侊紒
-  *]
-  TextBody:
-  [*
-    // yypsybs Sep-19-2023 (created)
-    // true, false
-    info( saleOrCapacity );
-    // 鏈�;瀛e害;鍗婂勾;骞�
-    info( groupBy );
-    // 闈㈡澘鍩哄湴;浜嬩笟閮�
-    info( byBusinessTypeOrByOrgCode );
-    info( businessTypeChosen );
-    info( placeOfProductionOfArrayChosen );
-    info( year );
-    
-    // ====娓呯悊鏃ф暟鎹�====
-    this.CapacityAndSaleBudgeChartRow( relflush );
-    this.CapacityAndSaleBudgeChartElement( relflush );
-    
-    // ====鎸夐潰鏉垮熀鍦板拰浜嬩笟閮ㄥ浜у搧杩涜绛涢�夊垎缁�====
-    historyData := selectset( mpSync, MappingCapacityAndSaleBudge, item, true );
-    if( placeOfProductionOfArrayChosen <> "" ) {
-      historyData := selectset( historyData, Elements, item, item.PlaceOfProductionOfArray() = placeOfProductionOfArrayChosen );
-    }
-    if( businessTypeChosen <> "" ) {
-      historyData := selectset( historyData, Elements, item, item.BusinessType() = businessTypeChosen );
-    }
-    //info( "historyData : " + [String]historyData.Size() );
-    traverse( historyData, Elements, item ) {
-      row := CapacityAndSaleBudgeChartRow::CreateIfNotExist( this, item.BusinessType(), item.PlaceOfProductionOfArray() );
-      // 璁板綍姣忚鍖呭惈鍝簺product
-      CapacityAndSaleBudgeChartRowProduct::CreateIfNotExist( row, item.ProductCode() );
-    }
-    rows := selectset( this, CapacityAndSaleBudgeChartRow, item, true );
-    //info( "rows : " + [String]rows.Size() );
-    placeOfProductionOfArrayList := selectuniquevalues( historyData, Elements, item, item.PlaceOfProductionOfArray() );
-    businessTypeList := selectuniquevalues( historyData, Elements, item, item.BusinessType() );
-    // 鐢熸垚鍥捐〃鍏冪礌
-    if( byBusinessTypeOrByOrgCode = "闈㈡澘鍩哄湴" and groupBy = "骞�" ) {
-      // 鐩爣
-      traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
-        productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
-        this.CapacityAndSaleBudgeChartElement( relnew, 
-                                               TimeStringAndScenarioName := [String]year + "骞�-鐩爣",
-                                               BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                               Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                   MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, [Number]year ),
-                                                                   MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, [Number]year ) )
-                                               );  
-        // S&OP
-        traverse( macroPlans, Elements, macroPlan ) {
-          this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                 TimeStringAndScenarioName := [String]year + "骞�-" + macroPlan.ScenarioName(),
-                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                     0.0,
-                                                                     Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, [Number]year ) )
-                                                 ); 
-        }                    
-      }
-    } 
-    if ( byBusinessTypeOrByOrgCode = "闈㈡澘鍩哄湴" and groupBy = "鍗婂勾" ) {
-      for( halfNo := 1; halfNo <= 2; halfNo := halfNo + 1 ) {
-        traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
-          productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
-          this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                 TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
-                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                     MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ),
-                                                                     MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ) )
-                                                 );  
-          // S&OP
-          traverse( macroPlans, Elements, macroPlan ) {
-            this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                   TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
-                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                       0.0,
-                                                                       Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, [Number]year, halfNo ) )
-                                                   ); 
-          }                    
-        }
-      }
-    }
-    if ( byBusinessTypeOrByOrgCode = "闈㈡澘鍩哄湴" and groupBy = "瀛e害" ) {
-      for( seasonNo := 1; seasonNo <= 4; seasonNo := seasonNo + 1 ) {
-        traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
-          productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
-    //      info( "productCodeList : " + [String]productCodeList.Size() );
-    //      info( "MappingCapacityAndSaleBudge::GetSheetBySeason : " + [String]MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) );
-    //      info( "seasonNo : " + [String]seasonNo );
-          this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                 TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-鐩爣",
-                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                     MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ),
-                                                                     MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) )
-                                                 );  
-    //      info( "productCodeList : " + [String]productCodeList.Size() );
-          // S&OP
-          traverse( macroPlans, Elements, macroPlan ) {
-            this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                   TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
-                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                       0.0,
-                                                                       Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, [Number]year, seasonNo ) )
-                                                   ); 
-          }                    
-        }
-      }
-    }
-    if ( byBusinessTypeOrByOrgCode = "闈㈡澘鍩哄湴" and groupBy = "鏈�" ) {
-      for( monthNo := 1; monthNo <= 12; monthNo := monthNo + 1 ) {
-        monthNoString := ifexpr( monthNo <= 9, "0" + [String]monthNo, [String]monthNo );
-        traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
-          productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
-          this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                 TimeStringAndScenarioName := [String]year + "骞�-绗�" + monthNoString + "鏈�-鐩爣",
-                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                     MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ),
-                                                                     MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ) )
-                                                 );  
-          // S&OP
-          traverse( macroPlans, Elements, macroPlan ) {
-            this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                   TimeStringAndScenarioName := [String]year + "骞�-绗�" + monthNoString + "鏈�-" + macroPlan.ScenarioName(),
-                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                       0.0,
-                                                                       Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, [Number]year, monthNo ) )
-                                                   ); 
-          }                    
-        }
-      }
-    }
-    if( byBusinessTypeOrByOrgCode = "浜嬩笟閮�" and groupBy = "骞�" ) {
-      // 鐩爣
-      traverse( businessTypeList, Elements, businessType ) {
-        productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
-        this.CapacityAndSaleBudgeChartElement( relnew, 
-                                               TimeStringAndScenarioName := [String]year + "骞�-鐩爣",
-                                               BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                               Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                   MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, [Number]year ),
-                                                                   MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, [Number]year ) )
-                                               );  
-        // S&OP
-        traverse( macroPlans, Elements, macroPlan ) {
-          this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                 TimeStringAndScenarioName := [String]year + "骞�-" + macroPlan.ScenarioName(),
-                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                     0.0,
-                                                                     Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, [Number]year ) )
-                                                 ); 
-        }                    
-      }
-    } 
-    if ( byBusinessTypeOrByOrgCode = "浜嬩笟閮�" and groupBy = "鍗婂勾" ) {
-      for( halfNo := 1; halfNo <= 2; halfNo := halfNo + 1 ) {
-        traverse( businessTypeList, Elements, businessType ) {
-          productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
-          this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                 TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
-                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                     MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ),
-                                                                     MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ) )
-                                                 );  
-          // S&OP
-          traverse( macroPlans, Elements, macroPlan ) {
-            this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                   TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
-                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                       0.0,
-                                                                       Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, [Number]year, halfNo ) )
-                                                   ); 
-          }                    
-        }
-      }
-    }
-    if ( byBusinessTypeOrByOrgCode = "浜嬩笟閮�" and groupBy = "瀛e害" ) {
-      for( seasonNo := 1; seasonNo <= 4; seasonNo := seasonNo + 1 ) {
-        traverse( businessTypeList, Elements, businessType ) {
-          productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
-          this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                 TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-鐩爣",
-                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                     MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ),
-                                                                     MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) )
-                                                 );  
-          // S&OP
-          traverse( macroPlans, Elements, macroPlan ) {
-            this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                   TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
-                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                       0.0,
-                                                                       Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, [Number]year, seasonNo ) )
-                                                   ); 
-          }                    
-        }
-      }
-    }
-    if ( byBusinessTypeOrByOrgCode = "浜嬩笟閮�" and groupBy = "鏈�" ) {
-      for( monthNo := 1; monthNo <= 12; monthNo := monthNo + 1 ) {
-        monthNoString := ifexpr( monthNo <= 9, "0" + [String]monthNo, [String]monthNo );
-        traverse( businessTypeList, Elements, businessType ) {
-          productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
-          this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                 TimeStringAndScenarioName := [String]year + "骞�-绗�" + monthNoString + "鏈�-鐩爣",
-                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                     MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ),
-                                                                     MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ) )
-                                                 );  
-          // S&OP
-          traverse( macroPlans, Elements, macroPlan ) {
-            this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                   TimeStringAndScenarioName := [String]year + "骞�-绗�" + monthNoString + "鏈�-" + macroPlan.ScenarioName(),
-                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-                                                                       0.0,
-                                                                       Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, [Number]year, monthNo ) )
-                                                   ); 
-          }                    
-        }
-      }
-    }
-    //info( "CapacityAndSaleBudgeChartElement : " + [String]selectset( this, CapacityAndSaleBudgeChartElement, item, true ).Size() );
-    //traverse( this, CapacityAndSaleBudgeChartRow, row ) {
-    //  info( "==鈫�==" );
-    //  info( row.BusinessType() );
-    //  info( row.PlaceOfProductionOfArray() );
-    //  elements := selectset( row, CapacityAndSaleBudgeChartRowProduct, cell, true );
-    //  info( elements.Size() );
-    //  info( row.GetProductCodes().Concatenate( " | " ) );
-    //  info( "==鈫�==" );
-    //}
-  *]
-}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompare.qbl b/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompare.qbl
index 90a0bff..ccbd232 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompare.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompare.qbl
@@ -5,9 +5,7 @@
   CapacityAndSaleBudgeFilterItems items,
   CapacityAndSaleBudgeFilterYears years,
   CapacityAndSaleBudgeFilterMonths months,
-  MPSync mpSync,
-  GlobalOTDTable otdTable,
-  MacroPlan mappingParent
+  GlobalOTDTable otdTable
 )
 {
   Description: 'todo : mappingParent鏀逛负mpSync, random鍒犱簡'
@@ -37,16 +35,16 @@
     this.CapacityAndSaleBudgeCompareItemRow( relflush );
     this.CapacityAndSaleBudgeCompareItemColumn( relflush );
     // ====姹囨�绘墍鏈夊嚭鐜扮殑浜у搧====
-    historyData := selectset( mpSync, MappingCapacityAndSaleBudge, item, true );
+    historyData := selectset( this, Global_MappingAnnualBudgetData, item, true );
     debuginfo( "historyData : " + [String]historyData.Size() )
     traverse( historyData, Elements, one ) {
-      productCode := one.ProductCode();
-      MappingBOM::CreateTestData( mappingParent, "浜嬩笟閮�" + [String](productCode.Length() mod 3), [String](productCode.Length() mod 4), productCode );
-      boms := selectset( mappingParent, MappingBOM, bom, bom.ProductCode() = productCode );
+      productCode := one.ProductID();
+      Global_MappingOperationBOM::CreateTestData( otdTable, "浜嬩笟閮�" + [String](productCode.Length() mod 3), "闈㈡澘鍩哄湴" + [String](productCode.Length() mod 4), productCode );
+      boms := selectset( otdTable, Global_MappingOperationBOM, bom, bom.ProductCode() = productCode );
       if( boms.Size() > 0 ) {
         bom := boms.First();
         businessType := bom.BusinessType();
-        placeOfProductionOfArray := one.PlaceOfProductionOfArray();
+        placeOfProductionOfArray := bom.OrganCode();
         // 鐩稿悓闈㈡澘鍩哄湴鍜屼簨涓氶儴鐨勬斁涓�琛�
         row := CapacityAndSaleBudgeCompareItemRow::CreateIfNotExist( this, businessType, placeOfProductionOfArray );
         // 璁板綍姣忚鍖呭惈鍝簺product
@@ -57,7 +55,7 @@
     }
     debuginfo( "CapacityAndSaleBudgeCompareItemRow : " + [String]selectset( this, CapacityAndSaleBudgeCompareItemRow, item, true ).Size() );
     // ====浠庡乏鍚戝彸鐢熸垚鍒楀ご涓庡唴瀹�====
-    // 浜嬩笟閮紝缁勭粐
+    // 浜嬩笟閮紝闈㈡澘鍩哄湴
     debuginfo( "dealing businessType and placeOfProductionOfArray" )
     columnBusinessType := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜嬩笟閮�" );
     columnPlaceOfProductionOfArray := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍩哄湴" );
@@ -69,7 +67,7 @@
     }
     // 闈㈡澘鍒嗛厤閲� - 骞村害棰勭畻 (sheets)
     // 鏍煎紡锛� 闈㈡澘鍒嗛厤閲� - 骞� - 鏈堬紙1-12 & total锛� - 骞村害棰勭畻/scenarioName
-    info( "dealing 闈㈡澘鍒嗛厤閲�" )
+    debuginfo( "dealing 闈㈡澘鍒嗛厤閲�" )
     if( CapacityAndSaleBudgeFilterItem::Contains( items, "闈㈡澘鍒嗛厤閲�" ) ) {
       traverse( years, Elements, year ) {
         debuginfo( "闈㈡澘鍒嗛厤閲�" + [String]year.YearNo() + "骞�" );
@@ -78,14 +76,14 @@
         traverse( months, Elements, month ) {
           columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
           traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-            cellReal := MappingCapacityAndSaleBudge::GetSheetByMonth( row.GetProductCodes(), mpSync, DateTime::Now().Year(), month.MonthNo() );
+            cellReal := Global_MappingForecast::GetQuantityByMonth( row.GetProductCodes(), this, 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 := MappingCapacityAndSaleBudge::GetSheetByYear( row.GetProductCodes(), mpSync, year.YearNo() );
+          cellReal := Global_MappingForecast::GetQuantityByYear( row.GetProductCodes(), this, year.YearNo() );
           cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
           cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
         }
@@ -121,14 +119,14 @@
         traverse( months, Elements, month ) {
           columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
           traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-            cellReal := MappingCapacityAndSaleBudge::GetSaleByMonth( row.GetProductCodes(), mpSync, year.YearNo(), month.MonthNo() );
+            cellReal := Global_MappingAnnualBudgetData::GetSaleByMonth( row.GetProductCodes(), this, 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 := MappingCapacityAndSaleBudge::GetSaleByYear( row.GetProductCodes(), mpSync, year.YearNo() );
+          cellReal := Global_MappingAnnualBudgetData::GetSaleByYear( row.GetProductCodes(), this, year.YearNo() );
           cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
           cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
         }
@@ -138,7 +136,7 @@
           traverse( months, Elements, month ) {
             columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-" + macroPlan.ScenarioName() );
             traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-              cellReal := MappingAnnualBudget::GetSaleByMonth( row.GetProductCodes(), mpSync, year.YearNo(), month.MonthNo() );
+              cellReal := Forecast::GetFulfilledBalanceByMonth( row.GetProductCodes(), macroPlan, year.YearNo(), month.MonthNo() );
               cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
               cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
             }
@@ -146,7 +144,7 @@
           columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-total-" + macroPlan.ScenarioName() );
           traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
             // QID 23
-            cellReal := MappingAnnualBudget::GetSaleByYear( row.GetProductCodes(), mpSync, year.YearNo() );
+            cellReal := Forecast::GetFulfilledBalanceByYear( row.GetProductCodes(), macroPlan, year.YearNo() );
             cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
             cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
           }
diff --git "a/_Main/BL/Type_GlobalDTOTable/Method_InitTestData\04312.qbl" "b/_Main/BL/Type_GlobalDTOTable/Method_InitTestData\04312.qbl"
new file mode 100644
index 0000000..f59360c
--- /dev/null
+++ "b/_Main/BL/Type_GlobalDTOTable/Method_InitTestData\04312.qbl"
@@ -0,0 +1,39 @@
+Quintiq file version 2.0
+#parent: #root
+Method InitTestData (
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    // yypsybs Oct-7-2023 (created)
+    productCodeList := selectuniquevalues( macroPlan, Product_MP, item, item.ID() );
+    debuginfo( "productCodeList : " + [String]productCodeList.Size() );
+    
+    if( this.Global_MappingAnnualBudgetData( relsize ) = 0 ) {
+      debuginfo( "create Global_MappingAnnualBudgetData test data" );
+      id := 1;
+      for( year := Date::ActualDate().Year() - 10; year <= Date::ActualDate().Year() + 5; year := year + 1 ) {
+        for( i := 1; i <= productCodeList.Size(); i := i + 1 ) {
+          productCode := productCodeList.Element( i - 1 );
+          mappingAnnualBudget := this.Global_MappingAnnualBudgetData( relnew, 
+                                                                      ID := [String]id,
+                                                                      YearNo := [String]year,
+                                                                      BusinessType := "浜嬩笟閮�" + [String](productCode.Length() mod 3),
+                                                                      ProductID := productCode);
+          id := id + 1;
+          for( month := 1; month <= 12; month := month + 1 ) {
+            field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlyModCapacity" + [String]month );
+            field.Set( mappingAnnualBudget, [String]Real::Random( 20000.0, 30000.0 ) );
+            field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySheetCapacity" + [String]month );
+            field.Set( mappingAnnualBudget, [String]Real::Random( 20000.0, 30000.0 ) );
+            field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySales" + [String]month );
+            field.Set( mappingAnnualBudget, [String]Real::Random( 20000.0, 30000.0 ) );
+          }
+        }
+      }
+      result2 := selectset( this, Global_MappingAnnualBudgetData, item, true );
+      debuginfo( "test MappingAnnualBudget size : " + [String]result2.Size() );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl b/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl
index dd75de6..2cb4752 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl
@@ -7,7 +7,7 @@
     //this.MatAttrSettingAndPlanStrategy( relflush );
     
     // yypsybs Sep-8-2023 (created)
-    info( "CapacityAndSaleBudge::InitTestData" )
+    debuginfo( "CapacityAndSaleBudge::InitTestData" )
     mat1 := MatAttrSettingAndPlanStrategy::CreateIfNotExist( this, 1, "鎵嬫満浜嬩笟閮�", "MAT_1", "MAT_1", "TYPE_1", 233.0, "閫氱敤", "闀垮懆鏈�" );
     MatAttrSettingAndPlanStrategyDetail::CreateIfNotExist( mat1, "PROD_1", 666.0, "PROD_1_DESC" );
     MatAttrSettingAndPlanStrategyDetail::CreateIfNotExist( mat1, "PROD_2", 777.0, "PROD_2_DESC" );
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_RefreshCapacityAndSaleBudgeFilter.qbl b/_Main/BL/Type_GlobalDTOTable/Method_RefreshCapacityAndSaleBudgeFilter.qbl
new file mode 100644
index 0000000..15f1b3b
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/Method_RefreshCapacityAndSaleBudgeFilter.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Method RefreshCapacityAndSaleBudgeFilter (
+  Boolean deleteBeforeCreate
+)
+{
+  TextBody:
+  [*
+    if( deleteBeforeCreate ) {
+      this.CapacityAndSaleBudgeFilterBusinessType( relflush );
+      this.CapacityAndSaleBudgeFilterPlaceOfProductionOfArray( relflush );  
+    }
+    // yypsybs Sep-21-2023 (created)
+    debuginfo( "=====RefreshCapacityAndSaleBudgeFilter====" );
+    businessTypes := selectuniquevalues( this, Global_MappingAnnualBudgetData, item, item.BusinessType() );
+    debuginfo( [String]businessTypes.Size() );
+    traverse( businessTypes, Elements, businessType ) {
+      CapacityAndSaleBudgeFilterBusinessType::CreateIfNotExist( this, businessType );
+    }
+    placeOfProductionOfArrays := selectuniquevalues( this, Global_MappingAnnualBudgetData, item, item.OrgCodeFromBom() );
+    debuginfo( [String]placeOfProductionOfArrays.Size() );
+    traverse( placeOfProductionOfArrays, Elements, placeOfProductionOfArray ) {
+      CapacityAndSaleBudgeFilterPlaceOfProductionOfArray::CreateIfNotExist( this, placeOfProductionOfArray );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl
index 31936e3..8c6686f 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl
@@ -89,31 +89,31 @@
     if ( isStockingPoint_MP ) {
       this.Global_MappingStockingPoint_MP( relflush );
       Global_BrokerExecuteLog::CreateInOperation( this, "StockingPoint_MP", executionUser );
-      this -> OnException( this -> Global_MappingStockingPoint_MP::CreateByAPI() -> Exception(), this );
+      this -> Global_MappingStockingPoint_MP::CreateByAPI() -> Exception() -> Global_MappingStockingPoint_MP::OnException( this );
     }
     
     if ( isCurrency_MP ) {
       this.Global_MappingCurrency_MP( relflush );
       Global_BrokerExecuteLog::CreateInOperation( this, "Currency_MP", executionUser );
-      this -> OnException( this -> Global_MappingCurrency_MP::CreateByAPI() -> Exception(), this );
+      this -> Global_MappingCurrency_MP::CreateByAPI() -> Exception() -> Global_MappingCurrency_MP::OnException( this );
     }
     
     if ( isCurrencyRate_MP ) {
       this.Global_MappingCurrencyRate_MP( relflush );
       Global_BrokerExecuteLog::CreateInOperation( this, "CurrencyRate_MP", executionUser );
-      this -> OnException( this -> Global_MappingCurrencyRate_MP::CreateByAPI() -> Exception(), this );
+      this -> Global_MappingCurrencyRate_MP::CreateByAPI() -> Exception() -> Global_MappingCurrencyRate_MP::OnException( this );
     }
     
     if ( isLane ) {
       this.Global_MappingLane( relflush );
       Global_BrokerExecuteLog::CreateInOperation( this, "Lane", executionUser );
-      this -> OnException( this -> Global_MappingLane::CreateByAPI() -> Exception(), this );
+      this -> Global_MappingLane::CreateByAPI() -> Exception() -> Global_MappingLane::OnException( this );
     }
     
     if ( isLaneLeg ) {
       this.Global_MappingLaneLeg( relflush );
       Global_BrokerExecuteLog::CreateInOperation( this, "LaneLeg", executionUser );
-      this -> OnException( this -> Global_MappingLaneLeg::CreateByAPI() -> Exception(), this );
+      this -> Global_MappingLaneLeg::CreateByAPI() -> Exception() -> Global_MappingLaneLeg::OnException( this );
     }
   *]
 }
diff --git "a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl" "b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
index ff774ec..6d84c07 100644
--- "a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
+++ "b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
@@ -4,11 +4,49 @@
   MacroPlan macroPlan,
   String executionUser,
   Boolean isUnitOfMeasure_MP,
-  Boolean isCustomOrder
+  Boolean isCustomOrder,
+  Boolean isForeacst,
+  Boolean isSalesSegment_MP,
+  Boolean isProduct_MP,
+  Boolean isConversionFactor,
+  Boolean isOperation,
+  Boolean isOperationBOM,
+  Boolean isProductInLane,
+  Boolean isAIPISPIP,
+  Boolean isInventorySupply,
+  Boolean isStockingPointCost,
+  Boolean isOperationCost,
+  Boolean isDOI_DSI,
+  Boolean isCustomerGrade,
+  Boolean isStockingPoint_MP,
+  Boolean isCurrency_MP,
+  Boolean isCurrencyRate_MP,
+  Boolean isLane,
+  Boolean isLaneLeg
 )
 {
   TextBody:
   [*
+    organcodelist := selectvalues( this, Global_MappingOperationBOM, bom,true, bom.OrganCode() );
+    businessTypes := macroPlan.BusinessType().Tokenize( "," );
+    if( not isnull( businessTypes ) and businessTypes.Size() > 0 ) {
+        traverse( businessTypes, Elements, item ) {
+            info( "Business type : " + item )  
+        }
+        organcodelist := selectvalues( this, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
+    }
+    else{
+      if( businessTypes.Size() = 0 ){
+        if( not isnull( selectset( this, BusinessType, b, b.BusinessTypeName() = "" ) ) ){
+          organcodelist := selectvalues( this, BusinessType.OrganCode, organ, organ.BusinessType().BusinessTypeName() = "", organ.OrganCodeName() );
+          }
+        }
+      }
+    
+    if( organcodelist.Size() = 0 ){
+      organcodelist := selectvalues( this, Global_MappingOperationBOM, bom,true, bom.OrganCode() );
+      }
+    
     if ( isUnitOfMeasure_MP ) {
       Global_MappingUnitOfMeasure_MP::SynchronizeMacroPlanData( this, macroPlan );
     }
@@ -16,5 +54,87 @@
     if ( isCustomOrder ) {
       Global_MappingCustomOrder::SynchronizeMacroPlanData( this, macroPlan, executionUser );
     }
+    
+    if ( isForeacst ) {
+      Global_MappingForecast::SynchronizeMacroPlanData( this, macroPlan, executionUser, businessTypes, organcodelist );
+    }
+    
+    if ( isSalesSegment_MP ) {
+      Global_MappingSalesSegment_MP::SynchronizeMacroPlanData( this, macroPlan, executionUser, businessTypes );
+    }
+    
+    if ( isProduct_MP ) {
+      Global_MappingProduct_MP::SynchronizeMacroPlanData( this, macroPlan, executionUser, businessTypes, macroPlan.IsKeyProduct() );
+    }
+    
+    if ( isConversionFactor ) {
+      Global_MappingConversionFactor::SynchronizeMacroPlanData( this, macroPlan, executionUser );
+    }
+    
+    if ( isOperation ) {
+      Global_MappingOperation::SynchronizeMacroPlanData( this, macroPlan, executionUser, businessTypes, organcodelist );
+    }
+    
+    if ( isOperationBOM ) {
+      Global_MappingOperationBOM::SynchronizeMacroPlanData( this, macroPlan, executionUser, businessTypes, organcodelist, macroPlan.IsKeyProduct(), macroPlan.CreatePurchaseSupplyMaterial() );
+    }
+    
+    if ( isProductInLane ) {
+      Global_MappingProductInLane::SynchronizeMacroPlanData( this, macroPlan, executionUser );
+    }
+    
+    if ( isAIPISPIP ) {
+      Global_MappingActualProductInStockingPointInPeriod::SynchronizeMacroPlanData( this, macroPlan, executionUser, businessTypes, organcodelist, macroPlan.IsKeyProduct() );
+    }
+    
+    if ( isInventorySupply ) {
+      Global_MappingInventorySupply::SynchronizeMacroPlanData( this, macroPlan, executionUser, businessTypes, organcodelist, macroPlan.IsKeyProduct() );
+    }
+    
+    if ( isStockingPointCost ) {
+      Global_MappingStockingPointCost::SynchronizeMacroPlanData( this, macroPlan, executionUser );
+    }
+    
+    if ( isOperationCost ) {
+      Global_MappingOperationCost::SynchronizeMacroPlanData( this, macroPlan, executionUser, businessTypes, organcodelist );
+    }
+    
+    //if ( isDOI_DSI ) {
+    //  Global_MappingDOI_DSI::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_DOI_DSI" );
+    //}
+    //
+    //if ( isCustomerGrade ) {
+    //  Global_MappingCustomerGrade::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_CustomerGrade" );
+    //}
+    //
+    //if ( isStockingPoint_MP ) {
+    //  this.Global_MappingStockingPoint_MP( relflush );
+    //  Global_BrokerExecuteLog::CreateInOperation( this, "StockingPoint_MP", executionUser );
+    ////  this -> Global_MappingStockingPoint_MP::CreateByAPI() -> Exception() -> Global_MappingStockingPoint_MP::OnException( this );
+    //}
+    //
+    //if ( isCurrency_MP ) {
+    //  this.Global_MappingCurrency_MP( relflush );
+    //  Global_BrokerExecuteLog::CreateInOperation( this, "Currency_MP", executionUser );
+    ////  this -> Global_MappingCurrency_MP::CreateByAPI() -> Exception() -> Global_MappingCurrency_MP::OnException( this );
+    //}
+    //
+    //if ( isCurrencyRate_MP ) {
+    //  this.Global_MappingCurrencyRate_MP( relflush );
+    //  Global_BrokerExecuteLog::CreateInOperation( this, "CurrencyRate_MP", executionUser );
+    ////  this -> Global_MappingCurrencyRate_MP::CreateByAPI() -> Exception() -> Global_MappingCurrencyRate_MP::OnException( this );
+    //}
+    //
+    //if ( isLane ) {
+    //  this.Global_MappingLane( relflush );
+    //  Global_BrokerExecuteLog::CreateInOperation( this, "Lane", executionUser );
+    ////  this -> Global_MappingLane::CreateByAPI() -> Exception() -> Global_MappingLane::OnException( this );
+    //}
+    //
+    //if ( isLaneLeg ) {
+    //  this.Global_MappingLaneLeg( relflush );
+    //  Global_BrokerExecuteLog::CreateInOperation( this, "LaneLeg", executionUser );
+    ////  this -> Global_MappingLaneLeg::CreateByAPI() -> Exception() -> Global_MappingLaneLeg::OnException( this );
+    //}
   *]
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationAllMappingBrokerAndAPI.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationAllMappingBrokerAndAPI.qbl
index 486c9a6..d2862ef 100644
--- a/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationAllMappingBrokerAndAPI.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationAllMappingBrokerAndAPI.qbl
@@ -27,7 +27,9 @@
     globalOTDTable.Global_MappingCustomOrder( relflush );
     globalOTDTable.Global_MappingDOI_DSI( relflush );
     globalOTDTable.Global_MappingCustomerGrade( relflush );
-    
+    // 骞村害浜ч攢棰勭畻涓棿琛�
+    globalOTDTable.Global_MappingAnnualBudgetData( relflush );
+
     //globalOTDTable.GlobalOTDTable_UnitOfMeasure_MP().AsyncExecute();
     //globalOTDTable.GlobalOTDTable_SalesSegment_MP().AsyncExecute();
     //globalOTDTable -> OnException( globalOTDTable -> Global_MappingStockingPoint_MP::CreateByAPI() -> Exception(), globalOTDTable );
@@ -44,9 +46,13 @@
     //globalOTDTable.GlobalOTDTable_InventorySupply().AsyncExecute();
     //globalOTDTable.GlobalOTDTable_StockingPointCost().AsyncExecute();
     //globalOTDTable.GlobalOTDTable_OperationCost().AsyncExecute();
-    //globalOTDTable.GlobalOTDTable_Forecast().AsyncExecute();      
+    //globalOTDTable.GlobalOTDTable_Forecast().AsyncExecute();
     //globalOTDTable.GlobalOTDTable_CustomOrder().AsyncExecute();
     //globalOTDTable.GlobalOTDTable_DOI_DSI().AsyncExecute();
     //globalOTDTable.GlobalOTDTable_CustomerGrade().AsyncExecute();
+    // 骞村害浜ч攢棰勭畻涓棿琛�
+    globalOTDTable.GlobalOTDTable_AnnualBudgetData().AsyncExecute();
+    // 鏍规嵁Global_MappingOperationBOM鍒稧lobalOTDTable_AnnualBudgetData鐨凮rgCodeFromBom
+    Global_MappingAnnualBudgetData::SetOrgCodeFromForecast( globalOTDTable );
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..984a0eb
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,34 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan,
+  String executionUser,
+  Strings businessTypes,
+  Strings organcodelist,
+  Boolean isKeyProduct
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name        := "鍚屾瀹為檯搴撳瓨鏁版嵁",
+                                                                       IsSuccess   := true,
+                                                                       ExecuteUser := executionUser
+                                                                      );
+                                            
+      
+    try {
+      macroPlan.MappingActualPISPIPData( businessTypes, globalOTDTable, isKeyProduct, organcodelist );
+      
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+    } onerror {
+      global_BrokerExecuteLog.IsSuccess( false );
+      global_BrokerExecuteLog.ErrorNo( e.ErrorNr() );
+      global_BrokerExecuteLog.ErrorMessage( e.GeneralInformation() );
+      global_BrokerExecuteLog.ErrorDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_BusinessSort.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_BusinessSort.qbl
new file mode 100644
index 0000000..d568f45
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_BusinessSort.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessSort
+{
+  #keys: '3[414384.0.936222715][414384.0.936222714][414384.0.936222716]'
+  Description: '涓氬姟鍒嗙被'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_BusinessType.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..2c61fcb
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_BusinessType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[414384.0.936222709][414384.0.936222708][414384.0.936222710]'
+  Description: '浜嬩笟閮�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_CapacityEquivalent.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_CapacityEquivalent.qbl
new file mode 100644
index 0000000..e2ad555
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_CapacityEquivalent.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityEquivalent
+{
+  #keys: '3[414384.0.936222742][414384.0.936222741][414384.0.936222743]'
+  Description: '浜ц兘褰撻噺'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_CutsNumber.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_CutsNumber.qbl
new file mode 100644
index 0000000..b7409e6
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_CutsNumber.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CutsNumber
+{
+  #keys: '3[414384.0.936222739][414384.0.936222738][414384.0.936222740]'
+  Description: '鍒囧壊鏁�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_DisplayTechSort.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_DisplayTechSort.qbl
new file mode 100644
index 0000000..dbe98d2
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_DisplayTechSort.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DisplayTechSort
+{
+  #keys: '3[414384.0.936222712][414384.0.936222711][414384.0.936222713]'
+  Description: '鏄剧ず鎶�鏈垎绫�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ID.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ID.qbl
new file mode 100644
index 0000000..d00da58
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ID.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[414384.0.936222703][414384.0.936222702][414384.0.936222704]'
+  Description: '搴忓彿'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MaskNumber.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MaskNumber.qbl
new file mode 100644
index 0000000..c464e55
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MaskNumber.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MaskNumber
+{
+  #keys: '3[414384.0.936222745][414384.0.936222744][414384.0.936222746]'
+  Description: 'Mask鏁�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity1.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity1.qbl
new file mode 100644
index 0000000..ef70b51
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity1.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity1
+{
+  #keys: '3[414384.0.936222748][414384.0.936222747][414384.0.936222749]'
+  Description: '鏈堝害妯$粍浜ц兘1鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity10.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity10.qbl
new file mode 100644
index 0000000..cc6d9c3
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity10.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity10
+{
+  #keys: '3[414384.0.936222775][414384.0.936222774][414384.0.936222776]'
+  Description: '鏈堝害妯$粍浜ц兘10鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity11.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity11.qbl
new file mode 100644
index 0000000..dc9c092
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity11.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity11
+{
+  #keys: '3[414384.0.936222778][414384.0.936222777][414384.0.936222779]'
+  Description: '鏈堝害妯$粍浜ц兘11鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity12.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity12.qbl
new file mode 100644
index 0000000..5dc1a9e
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity12.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity12
+{
+  #keys: '3[414384.0.936222781][414384.0.936222780][414384.0.936222782]'
+  Description: '鏈堝害妯$粍浜ц兘12鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity2.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity2.qbl
new file mode 100644
index 0000000..dd56732
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity2.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity2
+{
+  #keys: '3[414384.0.936222751][414384.0.936222750][414384.0.936222752]'
+  Description: '鏈堝害妯$粍浜ц兘2鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity3.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity3.qbl
new file mode 100644
index 0000000..719cb51
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity3.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity3
+{
+  #keys: '3[414384.0.936222754][414384.0.936222753][414384.0.936222755]'
+  Description: '鏈堝害妯$粍浜ц兘3鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity4.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity4.qbl
new file mode 100644
index 0000000..b63624d
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity4.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity4
+{
+  #keys: '3[414384.0.936222757][414384.0.936222756][414384.0.936222758]'
+  Description: '鏈堝害妯$粍浜ц兘4鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity5.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity5.qbl
new file mode 100644
index 0000000..1dc6b5d
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity5.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity5
+{
+  #keys: '3[414384.0.936222760][414384.0.936222759][414384.0.936222761]'
+  Description: '鏈堝害妯$粍浜ц兘5鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity6.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity6.qbl
new file mode 100644
index 0000000..4b0e332
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity6.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity6
+{
+  #keys: '3[414384.0.936222763][414384.0.936222762][414384.0.936222764]'
+  Description: '鏈堝害妯$粍浜ц兘6鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity7.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity7.qbl
new file mode 100644
index 0000000..d2d9550
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity7.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity7
+{
+  #keys: '3[414384.0.936222766][414384.0.936222765][414384.0.936222767]'
+  Description: '鏈堝害妯$粍浜ц兘7鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity8.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity8.qbl
new file mode 100644
index 0000000..cd87ac4
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity8.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity8
+{
+  #keys: '3[414384.0.936222769][414384.0.936222768][414384.0.936222770]'
+  Description: '鏈堝害妯$粍浜ц兘8鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity9.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity9.qbl
new file mode 100644
index 0000000..35be1fb
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity9.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity9
+{
+  #keys: '3[414384.0.936222772][414384.0.936222771][414384.0.936222773]'
+  Description: '鏈堝害妯$粍浜ц兘9鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales1.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales1.qbl
new file mode 100644
index 0000000..765b0a6
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales1.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales1
+{
+  #keys: '3[414384.0.936222820][414384.0.936222819][414384.0.936222821]'
+  Description: '鏈堝害閿�鍞1鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales10.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales10.qbl
new file mode 100644
index 0000000..3bfb594
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales10.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales10
+{
+  #keys: '3[414384.0.936222847][414384.0.936222846][414384.0.936222848]'
+  Description: '鏈堝害閿�鍞10鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales11.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales11.qbl
new file mode 100644
index 0000000..c48a262
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales11.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales11
+{
+  #keys: '3[414384.0.936222850][414384.0.936222849][414384.0.936222851]'
+  Description: '鏈堝害閿�鍞11鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales12.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales12.qbl
new file mode 100644
index 0000000..240f202
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales12.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales12
+{
+  #keys: '3[414384.0.936222853][414384.0.936222852][414384.0.936222854]'
+  Description: '鏈堝害閿�鍞12鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales2.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales2.qbl
new file mode 100644
index 0000000..ce4d3a7
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales2.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales2
+{
+  #keys: '3[414384.0.936222823][414384.0.936222822][414384.0.936222824]'
+  Description: '鏈堝害閿�鍞2鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales3.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales3.qbl
new file mode 100644
index 0000000..5699b1b
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales3.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales3
+{
+  #keys: '3[414384.0.936222826][414384.0.936222825][414384.0.936222827]'
+  Description: '鏈堝害閿�鍞3鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales4.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales4.qbl
new file mode 100644
index 0000000..9bd58b5
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales4.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales4
+{
+  #keys: '3[414384.0.936222829][414384.0.936222828][414384.0.936222830]'
+  Description: '鏈堝害閿�鍞4鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales5.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales5.qbl
new file mode 100644
index 0000000..1046bbd
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales5.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales5
+{
+  #keys: '3[414384.0.936222832][414384.0.936222831][414384.0.936222833]'
+  Description: '鏈堝害閿�鍞5鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales6.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales6.qbl
new file mode 100644
index 0000000..4dba5f3
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales6.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales6
+{
+  #keys: '3[414384.0.936222835][414384.0.936222834][414384.0.936222836]'
+  Description: '鏈堝害閿�鍞6鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales7.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales7.qbl
new file mode 100644
index 0000000..0c9b8ee
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales7.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales7
+{
+  #keys: '3[414384.0.936222838][414384.0.936222837][414384.0.936222839]'
+  Description: '鏈堝害閿�鍞7鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales8.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales8.qbl
new file mode 100644
index 0000000..57cd35c
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales8.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales8
+{
+  #keys: '3[414384.0.936222841][414384.0.936222840][414384.0.936222842]'
+  Description: '鏈堝害閿�鍞8鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales9.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales9.qbl
new file mode 100644
index 0000000..c603b35
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales9.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales9
+{
+  #keys: '3[414384.0.936222844][414384.0.936222843][414384.0.936222845]'
+  Description: '鏈堝害閿�鍞9鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity1.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity1.qbl
new file mode 100644
index 0000000..9cce22a
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity1.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity1
+{
+  #keys: '3[414384.0.936222784][414384.0.936222783][414384.0.936222785]'
+  Description: '鏈堝害瀹炴暟澶у紶浜ц兘1鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity10.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity10.qbl
new file mode 100644
index 0000000..4984458
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity10.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity10
+{
+  #keys: '3[414384.0.936222811][414384.0.936222810][414384.0.936222812]'
+  Description: '鏈堝害瀹炴暟澶у紶浜ц兘10鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity11.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity11.qbl
new file mode 100644
index 0000000..5515b7d
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity11.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity11
+{
+  #keys: '3[414384.0.936222814][414384.0.936222813][414384.0.936222815]'
+  Description: '鏈堝害瀹炴暟澶у紶浜ц兘11鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity12.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity12.qbl
new file mode 100644
index 0000000..24c6bde
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity12.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity12
+{
+  #keys: '3[414384.0.936222817][414384.0.936222816][414384.0.936222818]'
+  Description: '鏈堝害瀹炴暟澶у紶浜ц兘12鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity2.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity2.qbl
new file mode 100644
index 0000000..7b90f84
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity2.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity2
+{
+  #keys: '3[414384.0.936222787][414384.0.936222786][414384.0.936222788]'
+  Description: '鏈堝害瀹炴暟澶у紶浜ц兘2鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity3.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity3.qbl
new file mode 100644
index 0000000..e5d8b4a
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity3.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity3
+{
+  #keys: '3[414384.0.936222790][414384.0.936222789][414384.0.936222791]'
+  Description: '鏈堝害瀹炴暟澶у紶浜ц兘3鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity4.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity4.qbl
new file mode 100644
index 0000000..a4ada6b
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity4.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity4
+{
+  #keys: '3[414384.0.936222793][414384.0.936222792][414384.0.936222794]'
+  Description: '鏈堝害瀹炴暟澶у紶浜ц兘4鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity5.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity5.qbl
new file mode 100644
index 0000000..c8162a1
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity5.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity5
+{
+  #keys: '3[414384.0.936222796][414384.0.936222795][414384.0.936222797]'
+  Description: '鏈堝害瀹炴暟澶у紶浜ц兘5鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity6.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity6.qbl
new file mode 100644
index 0000000..0550ffb
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity6.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity6
+{
+  #keys: '3[414384.0.936222799][414384.0.936222798][414384.0.936222800]'
+  Description: '鏈堝害瀹炴暟澶у紶浜ц兘6鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity7.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity7.qbl
new file mode 100644
index 0000000..08305b8
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity7.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity7
+{
+  #keys: '3[414384.0.936222802][414384.0.936222801][414384.0.936222803]'
+  Description: '鏈堝害瀹炴暟澶у紶浜ц兘7鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity8.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity8.qbl
new file mode 100644
index 0000000..7291b60
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity8.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity8
+{
+  #keys: '3[414384.0.936222805][414384.0.936222804][414384.0.936222806]'
+  Description: '鏈堝害瀹炴暟澶у紶浜ц兘8鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity9.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity9.qbl
new file mode 100644
index 0000000..1a71b94
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity9.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity9
+{
+  #keys: '3[414384.0.936222808][414384.0.936222807][414384.0.936222809]'
+  Description: '鏈堝害瀹炴暟澶у紶浜ц兘9鏈�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_OrgCodeFromBom.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_OrgCodeFromBom.qbl
new file mode 100644
index 0000000..afed0fa
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_OrgCodeFromBom.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrgCodeFromBom
+{
+  #keys: '3[414384.0.936171531][414384.0.936171530][414384.0.936171532]'
+  Description: '鐢ㄦ枡鍙峰埌Global_MappingForecast鏌ョ殑orgCode'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_OrganCode.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_OrganCode.qbl
new file mode 100644
index 0000000..b2d0a21
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_OrganCode.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrganCode
+{
+  #keys: '3[414384.0.936222724][414384.0.936222723][414384.0.936222725]'
+  Description: '缁勭粐缂栫爜'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_OrganName.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_OrganName.qbl
new file mode 100644
index 0000000..f5fc270
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_OrganName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrganName
+{
+  #keys: '3[414384.0.936222727][414384.0.936222726][414384.0.936222728]'
+  Description: '缁勭粐鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_PlantName.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_PlantName.qbl
new file mode 100644
index 0000000..5ab6fa4
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_PlantName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlantName
+{
+  #keys: '3[414384.0.936222730][414384.0.936222729][414384.0.936222731]'
+  Description: '宸ュ巶鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ProductID.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ProductID.qbl
new file mode 100644
index 0000000..b0a666a
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ProductID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414384.0.936222721][414384.0.936222720][414384.0.936222722]'
+  Description: '浜у搧缂栫爜'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ProductLineAndSpecification.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ProductLineAndSpecification.qbl
new file mode 100644
index 0000000..ef693ce
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ProductLineAndSpecification.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductLineAndSpecification
+{
+  #keys: '3[414384.0.936222718][414384.0.936222717][414384.0.936222719]'
+  Description: '浜у搧绾�/浜у搧瑙勬牸'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ResolutionRatio.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ResolutionRatio.qbl
new file mode 100644
index 0000000..c1fa9ff
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ResolutionRatio.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ResolutionRatio
+{
+  #keys: '3[414384.0.936222733][414384.0.936222732][414384.0.936222734]'
+  Description: '鍒嗚鲸鐜�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ShippingForm.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ShippingForm.qbl
new file mode 100644
index 0000000..20e9000
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ShippingForm.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ShippingForm
+{
+  #keys: '3[414384.0.936222736][414384.0.936222735][414384.0.936222737]'
+  Description: '鍑鸿揣褰㈡��'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_YearNo.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_YearNo.qbl
new file mode 100644
index 0000000..34fcf11
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_YearNo.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute YearNo
+{
+  #keys: '3[414384.0.936222706][414384.0.936222705][414384.0.936222707]'
+  Description: '骞翠唤'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInPCSInYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInPCSInYear.qbl
new file mode 100644
index 0000000..947ff12
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInPCSInYear.qbl
@@ -0,0 +1,15 @@
+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( "Global_MappingAnnualBudgetData", "MonthlyModCapacity" + [String]i );
+      result := result + [Real]field.GetString( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl
new file mode 100644
index 0000000..cfe0c10
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl
@@ -0,0 +1,19 @@
+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( "Global_MappingAnnualBudgetData", "MonthlySheetCapacity" + [String]i );
+      result := result + [Real]field.GetString( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl
new file mode 100644
index 0000000..7da4592
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl
@@ -0,0 +1,19 @@
+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( "Global_MappingAnnualBudgetData", "MonthlySheetCapacity" + [String]i );
+      result := result + [Real]field.GetString( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInYear.qbl
new file mode 100644
index 0000000..d044dac
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInYear.qbl
@@ -0,0 +1,15 @@
+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( "Global_MappingAnnualBudgetData", "MonthlySheetCapacity" + [String]i );
+      result := result + [Real]field.GetString( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl
new file mode 100644
index 0000000..d882fef
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetSaleAmountInHalfYear (
+  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( "Global_MappingAnnualBudgetData", "MonthlySales" + [String]i );
+      result := result + [Real]field.GetString( this );
+    }
+    return result;
+  *]
+}
diff --git "a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason\043000.qbl" "b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason\043000.qbl"
new file mode 100644
index 0000000..c35dd6e
--- /dev/null
+++ "b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason\043000.qbl"
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetSaleAmountInSeason (
+  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( "Global_MappingAnnualBudgetData", "MonthlySales" + [String]i );
+      result := result + [Real]field.GetString( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInYear.qbl
new file mode 100644
index 0000000..0b05b26
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInYear.qbl
@@ -0,0 +1,15 @@
+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( "Global_MappingAnnualBudgetData", "MonthlySales" + [String]i );
+      result := result + [Real]field.GetString( this );
+    }
+    return result;
+  *]
+}
diff --git "a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_Export\043666.qbl" "b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_Export\043666.qbl"
new file mode 100644
index 0000000..aafe157
--- /dev/null
+++ "b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_Export\043666.qbl"
@@ -0,0 +1,507 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Export (
+  Global_MappingAnnualBudgetDatas toExportList
+) as String
+{
+  TextBody:
+  [*
+    // generate by generate_export_method.py
+    xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?>
+    <table>
+      <name>Global_MappingAnnualBudgetData</name>
+    ';
+    
+    
+    debuginfo( "export start" );
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>骞翠唤</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column YearNo" );
+      yearNo := toExportItem.YearNo();
+      cellStr := '<cell value="' + yearNo + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>浜嬩笟閮�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column BusinessType" );
+      businessType := toExportItem.BusinessType();
+      cellStr := '<cell value="' + businessType + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏄剧ず鎶�鏈垎绫�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column DisplayTechSort" );
+      displayTechSort := toExportItem.DisplayTechSort();
+      cellStr := '<cell value="' + displayTechSort + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>涓氬姟鍒嗙被</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column BusinessSort" );
+      businessSort := toExportItem.BusinessSort();
+      cellStr := '<cell value="' + businessSort + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>浜у搧绾�/浜у搧瑙勬牸</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column ProductLineAndSpecification" );
+      productLineAndSpecification := toExportItem.ProductLineAndSpecification();
+      cellStr := '<cell value="' + productLineAndSpecification + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>浜у搧缂栫爜</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column ProductID" );
+      productID := toExportItem.ProductID();
+      cellStr := '<cell value="' + productID + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>OrgCodeFromBom</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column OrgCodeFromBom" );
+      orgCodeFromBom := toExportItem.OrgCodeFromBom();
+      cellStr := '<cell value="' + orgCodeFromBom + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鍒嗚鲸鐜�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column ResolutionRatio" );
+      resolutionRatio := toExportItem.ResolutionRatio();
+      cellStr := '<cell value="' + resolutionRatio + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鍑鸿揣褰㈡��</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column ShippingForm" );
+      shippingForm := toExportItem.ShippingForm();
+      cellStr := '<cell value="' + shippingForm + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鍒囧壊鏁�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column CutsNumber" );
+      cutsNumber := toExportItem.CutsNumber();
+      cellStr := '<cell value="' + cutsNumber + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>浜ц兘褰撻噺</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column CapacityEquivalent" );
+      capacityEquivalent := toExportItem.CapacityEquivalent();
+      cellStr := '<cell value="' + capacityEquivalent + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>Mask鏁�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MaskNumber" );
+      maskNumber := toExportItem.MaskNumber();
+      cellStr := '<cell value="' + maskNumber + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害妯$粍浜ц兘1鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlyModCapacity1" );
+      monthlyModCapacity1 := toExportItem.MonthlyModCapacity1();
+      cellStr := '<cell value="' + monthlyModCapacity1 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害妯$粍浜ц兘2鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlyModCapacity2" );
+      monthlyModCapacity2 := toExportItem.MonthlyModCapacity2();
+      cellStr := '<cell value="' + monthlyModCapacity2 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害妯$粍浜ц兘3鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlyModCapacity3" );
+      monthlyModCapacity3 := toExportItem.MonthlyModCapacity3();
+      cellStr := '<cell value="' + monthlyModCapacity3 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害妯$粍浜ц兘4鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlyModCapacity4" );
+      monthlyModCapacity4 := toExportItem.MonthlyModCapacity4();
+      cellStr := '<cell value="' + monthlyModCapacity4 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害妯$粍浜ц兘5鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlyModCapacity5" );
+      monthlyModCapacity5 := toExportItem.MonthlyModCapacity5();
+      cellStr := '<cell value="' + monthlyModCapacity5 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害妯$粍浜ц兘6鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlyModCapacity6" );
+      monthlyModCapacity6 := toExportItem.MonthlyModCapacity6();
+      cellStr := '<cell value="' + monthlyModCapacity6 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害妯$粍浜ц兘7鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlyModCapacity7" );
+      monthlyModCapacity7 := toExportItem.MonthlyModCapacity7();
+      cellStr := '<cell value="' + monthlyModCapacity7 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害妯$粍浜ц兘8鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlyModCapacity8" );
+      monthlyModCapacity8 := toExportItem.MonthlyModCapacity8();
+      cellStr := '<cell value="' + monthlyModCapacity8 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害妯$粍浜ц兘9鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlyModCapacity9" );
+      monthlyModCapacity9 := toExportItem.MonthlyModCapacity9();
+      cellStr := '<cell value="' + monthlyModCapacity9 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害妯$粍浜ц兘10鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlyModCapacity10" );
+      monthlyModCapacity10 := toExportItem.MonthlyModCapacity10();
+      cellStr := '<cell value="' + monthlyModCapacity10 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害妯$粍浜ц兘11鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlyModCapacity11" );
+      monthlyModCapacity11 := toExportItem.MonthlyModCapacity11();
+      cellStr := '<cell value="' + monthlyModCapacity11 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害妯$粍浜ц兘12鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlyModCapacity12" );
+      monthlyModCapacity12 := toExportItem.MonthlyModCapacity12();
+      cellStr := '<cell value="' + monthlyModCapacity12 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害瀹炴暟澶у紶浜ц兘1鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySheetCapacity1" );
+      monthlySheetCapacity1 := toExportItem.MonthlySheetCapacity1();
+      cellStr := '<cell value="' + monthlySheetCapacity1 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害瀹炴暟澶у紶浜ц兘2鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySheetCapacity2" );
+      monthlySheetCapacity2 := toExportItem.MonthlySheetCapacity2();
+      cellStr := '<cell value="' + monthlySheetCapacity2 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害瀹炴暟澶у紶浜ц兘3鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySheetCapacity3" );
+      monthlySheetCapacity3 := toExportItem.MonthlySheetCapacity3();
+      cellStr := '<cell value="' + monthlySheetCapacity3 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害瀹炴暟澶у紶浜ц兘4鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySheetCapacity4" );
+      monthlySheetCapacity4 := toExportItem.MonthlySheetCapacity4();
+      cellStr := '<cell value="' + monthlySheetCapacity4 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害瀹炴暟澶у紶浜ц兘5鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySheetCapacity5" );
+      monthlySheetCapacity5 := toExportItem.MonthlySheetCapacity5();
+      cellStr := '<cell value="' + monthlySheetCapacity5 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害瀹炴暟澶у紶浜ц兘6鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySheetCapacity6" );
+      monthlySheetCapacity6 := toExportItem.MonthlySheetCapacity6();
+      cellStr := '<cell value="' + monthlySheetCapacity6 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害瀹炴暟澶у紶浜ц兘7鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySheetCapacity7" );
+      monthlySheetCapacity7 := toExportItem.MonthlySheetCapacity7();
+      cellStr := '<cell value="' + monthlySheetCapacity7 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害瀹炴暟澶у紶浜ц兘8鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySheetCapacity8" );
+      monthlySheetCapacity8 := toExportItem.MonthlySheetCapacity8();
+      cellStr := '<cell value="' + monthlySheetCapacity8 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害瀹炴暟澶у紶浜ц兘9鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySheetCapacity9" );
+      monthlySheetCapacity9 := toExportItem.MonthlySheetCapacity9();
+      cellStr := '<cell value="' + monthlySheetCapacity9 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害瀹炴暟澶у紶浜ц兘10鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySheetCapacity10" );
+      monthlySheetCapacity10 := toExportItem.MonthlySheetCapacity10();
+      cellStr := '<cell value="' + monthlySheetCapacity10 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害瀹炴暟澶у紶浜ц兘11鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySheetCapacity11" );
+      monthlySheetCapacity11 := toExportItem.MonthlySheetCapacity11();
+      cellStr := '<cell value="' + monthlySheetCapacity11 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害瀹炴暟澶у紶浜ц兘12鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySheetCapacity12" );
+      monthlySheetCapacity12 := toExportItem.MonthlySheetCapacity12();
+      cellStr := '<cell value="' + monthlySheetCapacity12 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害閿�鍞1鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySales1" );
+      monthlySales1 := toExportItem.MonthlySales1();
+      cellStr := '<cell value="' + monthlySales1 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害閿�鍞2鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySales2" );
+      monthlySales2 := toExportItem.MonthlySales2();
+      cellStr := '<cell value="' + monthlySales2 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害閿�鍞3鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySales3" );
+      monthlySales3 := toExportItem.MonthlySales3();
+      cellStr := '<cell value="' + monthlySales3 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害閿�鍞4鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySales4" );
+      monthlySales4 := toExportItem.MonthlySales4();
+      cellStr := '<cell value="' + monthlySales4 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害閿�鍞5鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySales5" );
+      monthlySales5 := toExportItem.MonthlySales5();
+      cellStr := '<cell value="' + monthlySales5 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害閿�鍞6鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySales6" );
+      monthlySales6 := toExportItem.MonthlySales6();
+      cellStr := '<cell value="' + monthlySales6 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害閿�鍞7鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySales7" );
+      monthlySales7 := toExportItem.MonthlySales7();
+      cellStr := '<cell value="' + monthlySales7 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害閿�鍞8鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySales8" );
+      monthlySales8 := toExportItem.MonthlySales8();
+      cellStr := '<cell value="' + monthlySales8 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害閿�鍞9鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySales9" );
+      monthlySales9 := toExportItem.MonthlySales9();
+      cellStr := '<cell value="' + monthlySales9 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害閿�鍞10鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySales10" );
+      monthlySales10 := toExportItem.MonthlySales10();
+      cellStr := '<cell value="' + monthlySales10 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害閿�鍞11鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySales11" );
+      monthlySales11 := toExportItem.MonthlySales11();
+      cellStr := '<cell value="' + monthlySales11 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    columnStr := "<column><name>鏈堝害閿�鍞12鏈�</name><type>String</type>";
+    traverse( toExportList, Elements, toExportItem ) {
+      debuginfo( "export column MonthlySales12" );
+      monthlySales12 := toExportItem.MonthlySales12();
+      cellStr := '<cell value="' + monthlySales12 + '"/>';
+      columnStr := columnStr + cellStr;
+    }
+    columnStr := columnStr + "</column>";
+    xmlTemplate := xmlTemplate + columnStr;
+    //---------------------------------------------------------------------------------------------
+    xmlTemplate := xmlTemplate + "</table>";
+    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTemplate ) );
+    XLS::SaveTable( tableHandle, OS::TempPath() + "Global_MappingAnnualBudgetData.xlsx" );
+    file := OSFile::Construct();
+    file.Open( OS::TempPath() + "Global_MappingAnnualBudgetData.xlsx", "Read", true );
+    data := file.ReadBinary()
+    debuginfo( "export end" );
+    return data.AsBase64EncodedString();
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_Export.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_Export.qbl
new file mode 100644
index 0000000..7a336c7
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_Export.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Export (
+  GlobalOTDTable parent
+) as String
+{
+  TextBody:
+  [*
+    // generate by generate_export_method.py
+    toExportList := selectset( parent, Global_MappingAnnualBudgetData, item, true );
+    return Global_MappingAnnualBudgetData::Export( toExportList );
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByHalfYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByHalfYear.qbl
new file mode 100644
index 0000000..a73decb
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByHalfYear.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSaleByHalfYear (
+  Strings productNo,
+  GlobalOTDTable parent,
+  Number yearNo,
+  Number halfNo
+) as Real
+{
+  Description: '浜ц兘 - 瀹炴暟澶у紶'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := sum( parent, 
+                   Global_MappingAnnualBudgetData, 
+                   item, 
+                   item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                   item.GetSaleAmountInHalfYear( halfNo ) );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByMonth.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByMonth.qbl
new file mode 100644
index 0000000..287c1d6
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByMonth.qbl
@@ -0,0 +1,22 @@
+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( "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 ) );
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleBySeason.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleBySeason.qbl
new file mode 100644
index 0000000..e7f39db
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleBySeason.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSaleBySeason (
+  Strings productNo,
+  GlobalOTDTable parent,
+  Number yearNo,
+  Number seasonNo
+) as Real
+{
+  Description: '浜ц兘 - 瀹炴暟澶у紶'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := sum( parent, 
+                   Global_MappingAnnualBudgetData, 
+                   item, 
+                   item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                   item.GetSaleAmountInSeason( seasonNo ) );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl
new file mode 100644
index 0000000..5377001
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl
@@ -0,0 +1,20 @@
+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, 
+                   Global_MappingAnnualBudgetData, 
+                   item, 
+                   item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                   item.GetSaleAmountInYear() );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl
new file mode 100644
index 0000000..d356e4c
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl
@@ -0,0 +1,21 @@
+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, 
+                   Global_MappingAnnualBudgetData, 
+                   item, 
+                   item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                   item.GetCapacityInSheetInHalfYear( halfNo ) );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByMonth.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByMonth.qbl
new file mode 100644
index 0000000..86986c8
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByMonth.qbl
@@ -0,0 +1,22 @@
+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( "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 ) );
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl
new file mode 100644
index 0000000..4b9775a
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl
@@ -0,0 +1,21 @@
+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, 
+                   Global_MappingAnnualBudgetData, 
+                   item, 
+                   item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                   item.GetCapacityInSheetInSeason( seasonNo ) );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl
new file mode 100644
index 0000000..a98de35
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl
@@ -0,0 +1,20 @@
+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, 
+                   Global_MappingAnnualBudgetData, 
+                   item, 
+                   item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                   item.GetCapacityInSheetInYear() );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_SetOrgCodeFromForecast.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_SetOrgCodeFromForecast.qbl
new file mode 100644
index 0000000..149ef2e
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_SetOrgCodeFromForecast.qbl
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SetOrgCodeFromForecast (
+  GlobalOTDTable parent
+)
+{
+  TextBody:
+  [*
+    // yypsybs Oct-7-2023 (created)
+    traverse( parent, Global_MappingAnnualBudgetData, item ) {
+      productCode := item.ProductID();
+      Global_MappingOperationBOM::CreateTestData( parent, "浜嬩笟閮�" + [String](productCode.Length() mod 3), "闈㈡澘鍩哄湴" + [String](productCode.Length() mod 4), productCode );
+      boms := selectset( parent, Global_MappingOperationBOM, bom, bom.ProductCode() = productCode );
+      if( boms.Size() > 0 ) {
+        bom := boms.First();
+        placeOfProductionOfArray := bom.OrganCode();
+        item.OrgCodeFromBom( placeOfProductionOfArray );
+      } else {
+        debuginfo( "no boms for product : " + productCode );
+        item.OrgCodeFromBom( item.OrganCode() );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/TypeIndex_Global_MappingAnnualBudgetDataTypeIndex.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/TypeIndex_Global_MappingAnnualBudgetDataTypeIndex.qbl
new file mode 100644
index 0000000..2e2fe80
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/TypeIndex_Global_MappingAnnualBudgetDataTypeIndex.qbl
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: #root
+TypeIndex Global_MappingAnnualBudgetDataTypeIndex
+{
+  Attributes:
+  [
+    TypeIndexAttribute
+    {
+      ModelElement: ID
+    }
+  ]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/_ROOT_Type_Global_MappingAnnualBudgetData.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/_ROOT_Type_Global_MappingAnnualBudgetData.qbl
new file mode 100644
index 0000000..615ecc0
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/_ROOT_Type_Global_MappingAnnualBudgetData.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type Global_MappingAnnualBudgetData
+{
+  #keys: '5[414384.0.933884744][414384.0.933884742][0.0.0][414384.0.933884743][414384.0.933884745]'
+  BaseType: Object
+  Description: '骞村害棰勭畻鏁版嵁'
+  StructuredName: 'Global_MappingAnnualBudgetDatas'
+}
diff --git a/_Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..9467117
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan,
+  String executionUser
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name        := "鍚屾鍗曚綅杞崲鏁版嵁",
+                                                                       IsSuccess   := true,
+                                                                       ExecuteUser := executionUser
+                                                                      );
+                                            
+      
+    try {
+      macroPlan.MappingBaseConversionFactorData(globalOTDTable);
+      
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+    } onerror {
+      global_BrokerExecuteLog.IsSuccess( false );
+      global_BrokerExecuteLog.ErrorNo( e.ErrorNr() );
+      global_BrokerExecuteLog.ErrorMessage( e.GeneralInformation() );
+      global_BrokerExecuteLog.ErrorDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_OnException.qbl b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_OnException.qbl
new file mode 100644
index 0000000..1775209
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_OnException.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnException (
+  Exception e,
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody: 'globalOTDTable.SettingFailureDetails( e.ErrorNumber(), e.Message(), "CurrencyRate_MP", "璐у竵姹囩巼鎺ュ彛鏁版嵁" );'
+}
diff --git a/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_OnException.qbl b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_OnException.qbl
new file mode 100644
index 0000000..1ee262a
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_OnException.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnException (
+  Exception e,
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody: 'globalOTDTable.SettingFailureDetails( e.ErrorNumber(), e.Message(), "Currency_MP", "璐у竵鎺ュ彛鏁版嵁" );'
+}
diff --git a/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceByHalfYear.qbl b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceByHalfYear.qbl
new file mode 100644
index 0000000..65d667b
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceByHalfYear.qbl
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetBalanceByHalfYear (
+  Strings productCodes,
+  GlobalOTDTable parent,
+  Number yearNo,
+  Number halfNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-19-2023 (created)
+    value := 0.0;
+    
+    startMonth := 1 + ( halfNo - 1 ) * 6;
+    endMonth := 6 + ( halfNo - 1 ) * 6;
+    
+    for( monthNo := startMonth; monthNo <= endMonth; monthNo := monthNo + 1 ) {
+      value := value + Global_MappingForecast::GetBalanceByMonth( productCodes, parent, yearNo, monthNo );
+    }
+    
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceByMonth.qbl b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceByMonth.qbl
new file mode 100644
index 0000000..ffe9b2a
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceByMonth.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetBalanceByMonth (
+  Strings productCodes,
+  GlobalOTDTable parent,
+  Number yearNo,
+  Number monthNo
+) as Real
+{
+  Description: ''
+  TextBody:
+  [*
+    // yypsybs Sep-19-2023 (created)
+    value := sum( parent, 
+                  Global_MappingForecast, 
+                  item,
+                  productCodes.Find( item.ProductID() ) > -1 and yearNo = item.StartDate().Year() and monthNo = item.StartDate().Month(), 
+                  item.Price() * item.Quantity() );
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceBySeason.qbl b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceBySeason.qbl
new file mode 100644
index 0000000..13afe16
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceBySeason.qbl
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetBalanceBySeason (
+  Strings productCodes,
+  GlobalOTDTable parent,
+  Number yearNo,
+  Number seasonNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-19-2023 (created)
+    value := 0.0;
+    
+    startMonth := 1 + ( seasonNo - 1 ) * 3;
+    endMonth := 3 + ( seasonNo - 1 ) * 3;
+    
+    for( monthNo := startMonth; monthNo <= endMonth; monthNo := monthNo + 1 ) {
+      value := value + Global_MappingForecast::GetBalanceByMonth( productCodes, parent, yearNo, monthNo );
+    }
+    
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceByYear.qbl b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceByYear.qbl
new file mode 100644
index 0000000..0b93061
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceByYear.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetBalanceByYear (
+  Strings productCodes,
+  GlobalOTDTable parent,
+  Number yearNo
+) as Real
+{
+  Description: ''
+  TextBody:
+  [*
+    // yypsybs Sep-19-2023 (created)
+    value := sum( parent, 
+                  Global_MappingForecast, 
+                  item,
+                  productCodes.Find( item.ProductID() ) > -1 and yearNo = item.StartDate().Year(), 
+                  item.Price() * item.Quantity() );
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByHalfYear.qbl b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByHalfYear.qbl
new file mode 100644
index 0000000..f78fa35
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByHalfYear.qbl
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetQuantityByHalfYear (
+  Strings productCodes,
+  GlobalOTDTable parent,
+  Number yearNo,
+  Number halfNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-19-2023 (created)
+    value := 0.0;
+    
+    startMonth := 1 + ( halfNo - 1 ) * 6;
+    endMonth := 6 + ( halfNo - 1 ) * 6;
+    
+    for( monthNo := startMonth; monthNo <= endMonth; monthNo := monthNo + 1 ) {
+      value := value + Global_MappingForecast::GetQuantityByMonth( productCodes, parent, yearNo, monthNo );
+    }
+    
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByMonth.qbl b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByMonth.qbl
new file mode 100644
index 0000000..8b16514
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByMonth.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetQuantityByMonth (
+  Strings productCodes,
+  GlobalOTDTable parent,
+  Number yearNo,
+  Number monthNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-19-2023 (created)
+    value := sum( parent, 
+                  Global_MappingForecast, 
+                  item,
+                  productCodes.Find( item.ProductID() ) > -1 and yearNo = item.StartDate().Year() and monthNo = item.StartDate().Month(), 
+                  item.Quantity() );
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityBySeason.qbl b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityBySeason.qbl
new file mode 100644
index 0000000..1b6f089
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityBySeason.qbl
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetQuantityBySeason (
+  Strings productCodes,
+  GlobalOTDTable parent,
+  Number yearNo,
+  Number seasonNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-19-2023 (created)
+    value := 0.0;
+    
+    startMonth := 1 + ( seasonNo - 1 ) * 3;
+    endMonth := 3 + ( seasonNo - 1 ) * 3;
+    
+    for( monthNo := startMonth; monthNo <= endMonth; monthNo := monthNo + 1 ) {
+      value := value + Global_MappingForecast::GetQuantityByMonth( productCodes, parent, yearNo, monthNo );
+    }
+    
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByYear.qbl b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByYear.qbl
new file mode 100644
index 0000000..f922dcf
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByYear.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetQuantityByYear (
+  Strings productCodes,
+  GlobalOTDTable parent,
+  Number yearNo
+) as Real
+{
+  Description: ''
+  TextBody:
+  [*
+    // yypsybs Sep-19-2023 (created)
+    value := sum( parent, 
+                  Global_MappingForecast, 
+                  item,
+                  productCodes.Find( item.ProductID() ) > -1 and yearNo = item.StartDate().Year(), 
+                  item.Quantity() );
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..ef72e85
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan,
+  String executionUser,
+  Strings businessTypes,
+  Strings organcodelist
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name        := "鍚屾棰勬祴鏁版嵁",
+                                                                       IsSuccess   := true,
+                                                                       ExecuteUser := executionUser
+                                                                      );
+                                            
+      
+    try {
+      macroPlan.MappingForecastData( businessTypes, globalOTDTable, organcodelist );
+      
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+    } onerror {
+      global_BrokerExecuteLog.IsSuccess( false );
+      global_BrokerExecuteLog.ErrorNo( e.ErrorNr() );
+      global_BrokerExecuteLog.ErrorMessage( e.GeneralInformation() );
+      global_BrokerExecuteLog.ErrorDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..06d00c5
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,34 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan,
+  String executionUser,
+  Strings businessTypes,
+  Strings organcodelist,
+  Boolean isKeyProduct
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name        := "鍚屾鍦ㄩ�斿簱瀛樻暟鎹�",
+                                                                       IsSuccess   := true,
+                                                                       ExecuteUser := executionUser
+                                                                      );
+                                            
+      
+    try {
+      macroPlan.MappingExternalSupplyData( businessTypes, isKeyProduct ,globalOTDTable, organcodelist );
+      
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+    } onerror {
+      global_BrokerExecuteLog.IsSuccess( false );
+      global_BrokerExecuteLog.ErrorNo( e.ErrorNr() );
+      global_BrokerExecuteLog.ErrorMessage( e.GeneralInformation() );
+      global_BrokerExecuteLog.ErrorDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingLane/StaticMethod_OnException.qbl b/_Main/BL/Type_Global_MappingLane/StaticMethod_OnException.qbl
new file mode 100644
index 0000000..2f719e0
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingLane/StaticMethod_OnException.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnException (
+  Exception e,
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody: 'globalOTDTable.SettingFailureDetails( e.ErrorNumber(), e.Message(), "Lane", "杞﹂亾鎺ュ彛鏁版嵁" );'
+}
diff --git a/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_OnException.qbl b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_OnException.qbl
new file mode 100644
index 0000000..25ff0bc
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_OnException.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnException (
+  Exception e,
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody: 'globalOTDTable.SettingFailureDetails( e.ErrorNumber(), e.Message(), "LaneLeg", "杞﹂亾鏀灦鎺ュ彛鏁版嵁" );'
+}
diff --git a/_Main/BL/Type_Global_MappingOperation/Attribute_DestinationOrganizationId.qbl b/_Main/BL/Type_Global_MappingOperation/Attribute_DestinationOrganizationId.qbl
new file mode 100644
index 0000000..2dcfbf8
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingOperation/Attribute_DestinationOrganizationId.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DestinationOrganizationId
+{
+  #keys: '3[414384.0.953284686][414384.0.953284685][414384.0.953284687]'
+  Description: '鐩殑鍦扮粍缁噄d'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingOperation/Attribute_OrganId.qbl b/_Main/BL/Type_Global_MappingOperation/Attribute_OrganId.qbl
new file mode 100644
index 0000000..f710d48
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingOperation/Attribute_OrganId.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrganId
+{
+  #keys: '3[414384.0.953284696][414384.0.953284695][414384.0.953284697]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingOperation/StaticMethod_GetByProductId.qbl b/_Main/BL/Type_Global_MappingOperation/StaticMethod_GetByProductId.qbl
new file mode 100644
index 0000000..314d139
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingOperation/StaticMethod_GetByProductId.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetByProductId (
+  GlobalOTDTable otdTable,
+  String productId
+) as Global_MappingOperation
+{
+  TextBody:
+  [*
+    // yypsybs Oct-9-2023 (created)
+    return select( otdTable, Global_MappingOperation, item, item.ProductID() = productId );
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..6a663dd
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan,
+  String executionUser,
+  Strings businessTypes,
+  Strings organcodelist
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name        := "鍚屾宸ヨ壓璺嚎鏁版嵁",
+                                                                       IsSuccess   := true,
+                                                                       ExecuteUser := executionUser
+                                                                      );
+                                            
+      
+    try {
+      macroPlan.MappingOperationData( businessTypes ,globalOTDTable, organcodelist );  
+      
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+    } onerror {
+      global_BrokerExecuteLog.IsSuccess( false );
+      global_BrokerExecuteLog.ErrorNo( e.ErrorNr() );
+      global_BrokerExecuteLog.ErrorMessage( e.GeneralInformation() );
+      global_BrokerExecuteLog.ErrorDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_CreateTestData.qbl b/_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_CreateTestData.qbl
new file mode 100644
index 0000000..fb4f294
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_CreateTestData.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateTestData (
+  GlobalOTDTable parent,
+  String businessType,
+  String orgCode,
+  String productCode
+) as Global_MappingOperationBOM
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    value := select( parent, Global_MappingOperationBOM, bom, bom.BusinessType() = businessType and bom.OrganCode() = orgCode and bom.ProductCode() = productCode );
+    if( isnull( value ) ) {
+      value := parent.Global_MappingOperationBOM( relnew, 
+                                                  BusinessType := businessType,
+                                                  OrganCode := orgCode,
+                                                  ProductCode := productCode, 
+                                                  ComponentType := "",
+                                                  ComponentUnit := "",
+                                                  ProcessSection := "", 
+                                                  ComponentCode := "", 
+                                                  AlternativeMaterialCode := "" );
+    }
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..3198fd5
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan,
+  String executionUser,
+  Strings businessTypes,
+  Strings organcodelist,
+  Boolean isKeyProduct,
+  Boolean createPurchaseSupplyMaterial
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name        := "鍚屾BOM鏁版嵁",
+                                                                       IsSuccess   := true,
+                                                                       ExecuteUser := executionUser
+                                                                      );
+                                            
+      
+    try {
+      macroPlan.MappingOperationBOMData( businessTypes, isKeyProduct, createPurchaseSupplyMaterial, globalOTDTable, organcodelist );
+      
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+    } onerror {
+      global_BrokerExecuteLog.IsSuccess( false );
+      global_BrokerExecuteLog.ErrorNo( e.ErrorNr() );
+      global_BrokerExecuteLog.ErrorMessage( e.GeneralInformation() );
+      global_BrokerExecuteLog.ErrorDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..9e722b5
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan,
+  String executionUser
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name        := "鍚屾杩愯緭璺嚎浜у搧鏁版嵁",
+                                                                       IsSuccess   := true,
+                                                                       ExecuteUser := executionUser
+                                                                      );
+                                            
+      
+    try {
+      macroPlan.MappingProductInLaneData(globalOTDTable);
+      
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+    } onerror {
+      global_BrokerExecuteLog.IsSuccess( false );
+      global_BrokerExecuteLog.ErrorNo( e.ErrorNr() );
+      global_BrokerExecuteLog.ErrorMessage( e.GeneralInformation() );
+      global_BrokerExecuteLog.ErrorDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_GetByProductId.qbl b/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_GetByProductId.qbl
new file mode 100644
index 0000000..ef81738
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_GetByProductId.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetByProductId (
+  GlobalOTDTable parent,
+  String productId
+) as Global_MappingProduct_MP
+{
+  Description: '鏍规嵁鏂欏彿鏌ヨ褰�'
+  TextBody:
+  [*
+    // yypsybs Sep-12-2023 (created)
+    value := select( parent, Global_MappingProduct_MP, item, item.ID() = productId );
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..8c10d2f
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan,
+  String executionUser,
+  Strings businessTypes,
+  Boolean isKeyProduct
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name        := "鍚屾浜у搧鏁版嵁",
+                                                                       IsSuccess   := true,
+                                                                       ExecuteUser := executionUser
+                                                                      );
+                                            
+      
+    try {
+      macroPlan.MappingProductData( businessTypes, globalOTDTable,isKeyProduct );
+      
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+    } onerror {
+      global_BrokerExecuteLog.IsSuccess( false );
+      global_BrokerExecuteLog.ErrorNo( e.ErrorNr() );
+      global_BrokerExecuteLog.ErrorMessage( e.GeneralInformation() );
+      global_BrokerExecuteLog.ErrorDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_ActualCapacity.qbl b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_ActualCapacity.qbl
new file mode 100644
index 0000000..2d0d27b
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_ActualCapacity.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ActualCapacity
+{
+  #keys: '3[414384.0.957354916][414384.0.957354915][414384.0.957354917]'
+  Description: '鏃ヤ氦璐ц兘鍔�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_IsPartRecognition.qbl b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_IsPartRecognition.qbl
new file mode 100644
index 0000000..db54713
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_IsPartRecognition.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsPartRecognition
+{
+  #keys: '3[414384.0.957354904][414384.0.957354903][414384.0.957354905]'
+  Description: '闆朵欢鎵胯'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_IsSecondSource.qbl b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_IsSecondSource.qbl
new file mode 100644
index 0000000..3215bb4
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_IsSecondSource.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsSecondSource
+{
+  #keys: '3[414384.0.957354907][414384.0.957354906][414384.0.957354908]'
+  Description: '鏄惁浜屼緵'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_IsSpecialDisplay.qbl b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_IsSpecialDisplay.qbl
new file mode 100644
index 0000000..38e0080
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_IsSpecialDisplay.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsSpecialDisplay
+{
+  #keys: '3[414384.0.957354901][414384.0.957354900][414384.0.957354902]'
+  Description: '鏄惁涓撴樉'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_LeadTime.qbl b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_LeadTime.qbl
new file mode 100644
index 0000000..7784107
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_LeadTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LeadTime
+{
+  #keys: '3[414384.0.957354919][414384.0.957354918][414384.0.957354920]'
+  Description: 'L/T'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_LotSize.qbl b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_LotSize.qbl
new file mode 100644
index 0000000..a007802
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_LotSize.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LotSize
+{
+  #keys: '3[414384.0.957354925][414384.0.957354924][414384.0.957354926]'
+  Description: '鏈�灏忓寘瑁呴噺'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_MinimumQuantity.qbl b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_MinimumQuantity.qbl
new file mode 100644
index 0000000..5f092a2
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_MinimumQuantity.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MinimumQuantity
+{
+  #keys: '3[414384.0.957354922][414384.0.957354921][414384.0.957354923]'
+  Description: '鏈�灏忚璐ч噺'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_ProductID.qbl b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_ProductID.qbl
new file mode 100644
index 0000000..b7f9c73
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_ProductID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414384.0.957354895][414384.0.957354894][414384.0.957354896]'
+  Description: '鐗╂枡缂栫爜'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_ProductName.qbl b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_ProductName.qbl
new file mode 100644
index 0000000..f958e30
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_ProductName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductName
+{
+  #keys: '3[414384.0.957354892][414384.0.957354891][414384.0.957354893]'
+  Description: '鐗╂枡璇存槑'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_ProviderName.qbl b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_ProviderName.qbl
new file mode 100644
index 0000000..5cc6c05
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_ProviderName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProviderName
+{
+  #keys: '3[414384.0.957354910][414384.0.957354909][414384.0.957354911]'
+  Description: '渚涘簲鍟嗗悕绉�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_Rate.qbl b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_Rate.qbl
new file mode 100644
index 0000000..43aff94
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_Rate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Rate
+{
+  #keys: '3[414384.0.957354928][414384.0.957354927][414384.0.957354929]'
+  Description: '姣斾緥'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_StockingPointID.qbl b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..660a929
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_StockingPointID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414384.0.957354913][414384.0.957354912][414384.0.957354914]'
+  Description: '搴撳瓨鐐�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..bc0760a
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProviderCapacity/Attribute_UnitOfMeasureName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasureName
+{
+  #keys: '3[414384.0.957354898][414384.0.957354897][414384.0.957354899]'
+  Description: '鍗曚綅'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingProviderCapacity/StaticMethod_GetByProductId.qbl b/_Main/BL/Type_Global_MappingProviderCapacity/StaticMethod_GetByProductId.qbl
new file mode 100644
index 0000000..9038655
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProviderCapacity/StaticMethod_GetByProductId.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetByProductId (
+  GlobalOTDTable parent,
+  String productId
+) as Global_MappingProviderCapacity
+{
+  TextBody:
+  [*
+    // yypsybs Oct-10-2023 (created)
+    return select( parent, Global_MappingProviderCapacity, item, item.ProductID() = productId );
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingProviderCapacity/_ROOT_Type_Global_MappingProviderCapacity.qbl b/_Main/BL/Type_Global_MappingProviderCapacity/_ROOT_Type_Global_MappingProviderCapacity.qbl
new file mode 100644
index 0000000..262d3df
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProviderCapacity/_ROOT_Type_Global_MappingProviderCapacity.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type Global_MappingProviderCapacity
+{
+  #keys: '5[414384.0.957354887][414384.0.957354885][0.0.0][414384.0.957354886][414384.0.957354888]'
+  BaseType: Object
+  Description: '渚涘簲鍟嗚兘鍔�'
+  StructuredName: 'Global_MappingProviderCapacitys'
+}
diff --git a/_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..fc881d2
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan,
+  String executionUser,
+  Strings businessTypes
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name        := "鍚屾閿�鍞儴闂ㄦ暟鎹�",
+                                                                       IsSuccess   := true,
+                                                                       ExecuteUser := executionUser
+                                                                      );
+                                            
+      
+    try {
+      macroPlan.MappingSalesSegmentData( businessTypes, globalOTDTable );
+      
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+    } onerror {
+      global_BrokerExecuteLog.IsSuccess( false );
+      global_BrokerExecuteLog.ErrorNo( e.ErrorNr() );
+      global_BrokerExecuteLog.ErrorMessage( e.GeneralInformation() );
+      global_BrokerExecuteLog.ErrorDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..df0cc31
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan,
+  String executionUser
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name        := "鍚屾搴撳瓨鎴愭湰鏁版嵁",
+                                                                       IsSuccess   := true,
+                                                                       ExecuteUser := executionUser
+                                                                      );
+                                            
+      
+    try {
+      macroPlan.MappingInventoryValueAndCostData(globalOTDTable);
+      
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+    } onerror {
+      global_BrokerExecuteLog.IsSuccess( false );
+      global_BrokerExecuteLog.ErrorNo( e.ErrorNr() );
+      global_BrokerExecuteLog.ErrorMessage( e.GeneralInformation() );
+      global_BrokerExecuteLog.ErrorDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_OnException.qbl b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_OnException.qbl
new file mode 100644
index 0000000..2a6d364
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_OnException.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnException (
+  Exception e,
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody: 'globalOTDTable.SettingFailureDetails( e.ErrorNumber(), e.Message(), "StockingPoint_MP", "搴撳瓨鎺ュ彛鏁版嵁" );'
+}
diff --git a/_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..8f08b84
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan,
+  String executionUser,
+  Strings businessTypes,
+  Strings organcodelist
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name        := "鍚屾鍒堕�犳垚鏈暟鎹�",
+                                                                       IsSuccess   := true,
+                                                                       ExecuteUser := executionUser
+                                                                      );
+                                            
+      
+    try {
+      macroPlan.MappingOperationCostData( globalOTDTable, businessTypes, organcodelist );
+      
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+    } onerror {
+      global_BrokerExecuteLog.IsSuccess( false );
+      global_BrokerExecuteLog.ErrorNo( e.ErrorNr() );
+      global_BrokerExecuteLog.ErrorMessage( e.GeneralInformation() );
+      global_BrokerExecuteLog.ErrorDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_ShowCell/StaticMethod_CreateShowData_Forecast.qbl b/_Main/BL/Type_Global_ShowCell/StaticMethod_CreateShowData_Forecast.qbl
new file mode 100644
index 0000000..ecbe488
--- /dev/null
+++ b/_Main/BL/Type_Global_ShowCell/StaticMethod_CreateShowData_Forecast.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateShowData_Forecast (
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    businessTypeColumn       := Global_ShowColumn::CreateColumn( globalOTDTable, 0, "浜嬩笟閮�" );
+    idColumn                 := Global_ShowColumn::CreateColumn( globalOTDTable, 0, "ID" );
+    productIDColumn          := Global_ShowColumn::CreateColumn( globalOTDTable, 0, "浜у搧缂栫爜" );
+    
+    i := 1;
+    traverse ( globalOTDTable, Global_MappingForecast, gmf ) {
+      gloabal_ShowRow := globalOTDTable.Global_ShowRow( relnew, RowNr := i );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmf.BusinessType(), businessTypeColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmf.ID(), idColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmf.ProductID(), productIDColumn, gloabal_ShowRow );
+           
+      i++;                                                             
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_ShowCell/StaticMethod_GenerateDataThroughReflection.qbl b/_Main/BL/Type_Global_ShowCell/StaticMethod_GenerateDataThroughReflection.qbl
new file mode 100644
index 0000000..7bca228
--- /dev/null
+++ b/_Main/BL/Type_Global_ShowCell/StaticMethod_GenerateDataThroughReflection.qbl
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateDataThroughReflection (
+  GlobalOTDTable globalOTDTable,
+  String className
+)
+{
+  TextBody:
+  [*
+    //columnIndex := 0;
+    //rowIndex    := 0;
+    //
+    //traverse ( globalOTDTable, Global_MappingUnitOfMeasure_MP, gmuommp ) {
+    //  gloabal_ShowRow := globalOTDTable.Global_ShowRow( relnew, RowNr := rowIndex );
+    //  traverse ( typeof( Global_MappingUnitOfMeasure_MP ), MdlAttrElements, mae ) {
+    //    targetReflectionAttribute := Reflection::FindAttribute( className, mae.Name() );
+    //    if ( not isnull( targetReflectionAttribute ) ) {
+    //      targetsGlobal_ShowColumn := select( globalOTDTable, Global_ShowColumn, tempGSC, tempGSC.ColumnName() = mae.Name() );
+    //      if ( isnull( targetsGlobal_ShowColumn ) ) {
+    //        targetsGlobal_ShowColumn := Global_ShowColumn::CreateColumn( globalOTDTable, columnIndex, mae.Name() );
+    //        columnIndex++;
+    //      }
+    //      
+    //      Global_ShowCell::SetColumnsAndRows( globalOTDTable, targetReflectionAttribute.Get( gmuommp )., targetsGlobal_ShowColumn, gloabal_ShowRow );
+    //    }
+    //  }
+    //  rowIndex++;
+    //}
+  *]
+}
diff --git a/_Main/BL/Type_Global_ShowCell/StaticMethod_ShowData.qbl b/_Main/BL/Type_Global_ShowCell/StaticMethod_ShowData.qbl
index 7eebedc..1753baf 100644
--- a/_Main/BL/Type_Global_ShowCell/StaticMethod_ShowData.qbl
+++ b/_Main/BL/Type_Global_ShowCell/StaticMethod_ShowData.qbl
@@ -10,5 +10,13 @@
     if ( global_BrokerExecuteLog.BrokerName() = "GlobalOTDTable_CustomOrder" ) {
       Global_ShowCell::CreateShowData_CustomOrder( globalOTDTable );
     }
+    
+    if ( global_BrokerExecuteLog.BrokerName() = "GlobalOTDTable_Forecast" ) {
+    //  Global_ShowCell::CreateShowData_Forecast( globalOTDTable );
+    }
+    
+    if ( global_BrokerExecuteLog.BrokerName() = "GlobalOTDTable_UnitOfMeasure_MP" ) {
+      Global_ShowCell::GenerateDataThroughReflection( globalOTDTable, "Global_MappingUnitOfMeasure_MP" );
+    }
   *]
 }
diff --git a/_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter.qbl b/_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter.qbl
deleted file mode 100644
index 496ec45..0000000
--- a/_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter.qbl
+++ /dev/null
@@ -1,22 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method RefreshCapacityAndSaleBudgeFilter (
-  GlobalOTDTable globalOtdTable
-)
-{
-  TextBody:
-  [*
-    // yypsybs Sep-21-2023 (created)
-    info( "=====RefreshCapacityAndSaleBudgeFilter====" );
-    businessTypes := selectuniquevalues( this, MappingCapacityAndSaleBudge, item, item.BusinessType() );
-    info( [String]businessTypes.Size() );
-    traverse( businessTypes, Elements, businessType ) {
-      CapacityAndSaleBudgeFilterBusinessType::CreateIfNotExist( globalOtdTable, businessType );
-    }
-    placeOfProductionOfArrays := selectuniquevalues( this, MappingCapacityAndSaleBudge, item, item.PlaceOfProductionOfArray() );
-    info( [String]placeOfProductionOfArrays.Size() );
-    traverse( placeOfProductionOfArrays, Elements, placeOfProductionOfArray ) {
-      CapacityAndSaleBudgeFilterPlaceOfProductionOfArray::CreateIfNotExist( globalOtdTable, placeOfProductionOfArray );
-    }
-  *]
-}
diff --git a/_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter0.qbl b/_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter0.qbl
deleted file mode 100644
index c8d1bbb..0000000
--- a/_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter0.qbl
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method RefreshCapacityAndSaleBudgeFilter (
-  Boolean deleteBeforeCreate,
-  GlobalOTDTable globalOtdTable
-)
-{
-  TextBody:
-  [*
-    if( deleteBeforeCreate ) {
-      globalOtdTable.CapacityAndSaleBudgeFilterBusinessType( relflush );
-      globalOtdTable.CapacityAndSaleBudgeFilterPlaceOfProductionOfArray( relflush );  
-    }
-    this.RefreshCapacityAndSaleBudgeFilter( globalOtdTable );
-  *]
-}
diff --git a/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl b/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl
index 541ab96..c720051 100644
--- a/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl
+++ b/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl
@@ -9,10 +9,10 @@
   [*
     // yypsybs Sep-20-2023 (created)
     
-    info( "MPSync::TestData" );
+    debuginfo( "MPSync::TestData" );
     
     productCodeList := selectuniquevalues( macroPlan, Product_MP, item, item.ID() );
-    info( "productCodeList : " + [String]productCodeList.Size() );
+    debuginfo( "productCodeList : " + [String]productCodeList.Size() );
     
     mpSync.MappingCapacityAndSaleBudge( relflush );
     for( year := Date::ActualDate().Year() - 10; year <= Date::ActualDate().Year() + 5; year := year + 1 ) {
@@ -38,27 +38,6 @@
       }
     }
     result1 := selectset( mpSync, MappingCapacityAndSaleBudge, item, true );
-    info( "test MappingCapacityAndSaleBudge size : " + [String]result1.Size() );
-    
-    mpSync.MappingAnnualBudget( relflush );
-    for( year := Date::ActualDate().Year() - 10; year <= Date::ActualDate().Year() + 5; year := year + 1 ) {
-      for( i := 1; i <= productCodeList.Size(); i := i + 1 ) {
-        productCode := productCodeList.Element( i - 1 );
-        mappingAnnualBudget := mpSync.MappingAnnualBudget( relnew, 
-                                                           YearNo := year,
-                                                           ProductId := productCode
-                                                            );
-        for( month := 1; month <= 12; month := month + 1 ) {
-          field := Reflection::FindAttribute( "MappingAnnualBudget", "MonthlyModCapacity" + [String]month );
-          field.Set( mappingAnnualBudget, Real::Random( 20000.0, 30000.0 ) );
-          field := Reflection::FindAttribute( "MappingAnnualBudget", "MonthlySheetCapacity" + [String]month );
-          field.Set( mappingAnnualBudget, Real::Random( 20000.0, 30000.0 ) );
-          field := Reflection::FindAttribute( "MappingAnnualBudget", "MonthlySales" + [String]month );
-          field.Set( mappingAnnualBudget, Real::Random( 20000.0, 30000.0 ) );
-        }
-      }
-    }
-    result2 := selectset( mpSync, MappingAnnualBudget, item, true );
-    info( "test MappingAnnualBudget size : " + [String]result2.Size() );
+    debuginfo( "test MappingCapacityAndSaleBudge size : " + [String]result1.Size() );
   *]
 }
diff --git a/_Main/BL/Type_MacroPlan/Attribute_BusinessType.qbl b/_Main/BL/Type_MacroPlan/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..52c8a46
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Attribute_BusinessType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[412960.0.300140034][412960.0.300140033][412960.0.300140035]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MacroPlan/Attribute_CreatePurchaseSupplyMaterial.qbl b/_Main/BL/Type_MacroPlan/Attribute_CreatePurchaseSupplyMaterial.qbl
new file mode 100644
index 0000000..0d3c691
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Attribute_CreatePurchaseSupplyMaterial.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CreatePurchaseSupplyMaterial
+{
+  #keys: '3[412960.0.300140031][412960.0.300140030][412960.0.300140032]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_MacroPlan/Attribute_IsKeyProduct.qbl b/_Main/BL/Type_MacroPlan/Attribute_IsKeyProduct.qbl
new file mode 100644
index 0000000..b31aee8
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Attribute_IsKeyProduct.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsKeyProduct
+{
+  #keys: '3[412960.0.300140028][412960.0.300140027][412960.0.300140029]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/DefaultValue_BusinessType.qbl b/_Main/BL/Type_MacroPlan/DefaultValue_BusinessType.qbl
similarity index 100%
rename from _Main/BL/Type_MappingAnnualBudget/DefaultValue_BusinessType.qbl
rename to _Main/BL/Type_MacroPlan/DefaultValue_BusinessType.qbl
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
index a6f9a24..9385366 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
@@ -3,13 +3,13 @@
 Method MappingActualPISPIPData (
   Strings businessTypes,
   GlobalOTDTable globalOTDTable,
-  Boolean nuclear
+  Boolean nuclear,
+  Strings organcodelist
 )
 {
   TextBody:
   [*
     // renhao Aug-14-2023 (created)
-    organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
     listtodeal := selectset( globalOTDTable,
                              Global_MappingActualProductInStockingPointInPeriod,
                              actual,
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl
index 9d01ece..da901cc 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl
@@ -2,7 +2,8 @@
 #parent: #root
 Method MappingCustomerOrderData (
   Strings businessTypes,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  Strings organcodelist
 )
 {
   Description: 'ETL璁㈠崟棰勬祴'
@@ -14,7 +15,6 @@
     if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
         listToDeal := selectset( globalOTDTable, Global_MappingCustomOrder, item, true );
     } else {
-        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
         listToDeal := selectset( globalOTDTable, 
                                  Global_MappingCustomOrder, 
                                  item, 
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
index 39675d3..4db0d6c 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
@@ -3,7 +3,8 @@
 Method MappingExternalSupplyData (
   Strings businessTypes,
   Boolean nuclear,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  Strings organcodelist
 )
 {
   TextBody:
@@ -11,7 +12,6 @@
     // 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() );
-    organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
     listtodeal := selectset( globalOTDTable,
                              Global_MappingInventorySupply,
                              externalSupply, 
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl
index 5fbb66c..1c79534 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl
@@ -2,7 +2,8 @@
 #parent: #root
 Method MappingForecastData (
   Strings businessTypes,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  Strings organcodelist
 )
 {
   Description: 'ETL璁㈠崟棰勬祴'
@@ -14,7 +15,6 @@
     if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
         listToDeal := selectset( globalOTDTable, Global_MappingForecast, item, item.Quantity() > 0 );
     } else {
-        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
         listToDeal := selectset( globalOTDTable, 
                                  Global_MappingForecast, 
                                  item, 
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
index 663464c..208a5e8 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
@@ -4,7 +4,8 @@
   Strings businessTypes,
   Boolean isKeyProduct,
   Boolean createPurchaseSupplyMaterial,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  Strings organcodelist
 )
 {
   TextBody:
@@ -14,7 +15,6 @@
     if( isKeyProduct ) {
         keyProductList := selectuniquevalues( globalOTDTable, Global_MappingProduct_MP, item, item.ProductMajorType()="鎴愬搧" or item.ProductMajorType()="鍗婃垚鍝�", item.ID() );
     }
-    organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
     bomList := selectsortedset(  globalOTDTable, Global_MappingOperationBOM, item,
                                  ifexpr( isnull( businessTypes ) or businessTypes.Size() = 0, 
                                          true, 
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
index e6907cc..cdcd7f1 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
@@ -2,7 +2,8 @@
 #parent: #root
 Method MappingOperationCostData (
   GlobalOTDTable globalOTDTable,
-  Strings businesstypes
+  Strings businesstypes,
+  Strings organcodelist
 )
 {
   Description: 'Get operation cost data from operation mapping'
@@ -15,7 +16,6 @@
     if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
         listtodeal := selectset( globalOTDTable, Global_MappingOperation, item, true );
     } else {
-        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businesstypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
         listtodeal := selectset( globalOTDTable, Global_MappingOperation, 
                                  item, 
                                  ( businesstypes.Find( item.BusinessType() ) <> -1 ) and 
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
index b09ed68..3ef68b5 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
@@ -2,7 +2,8 @@
 #parent: #root
 Method MappingOperationData (
   Strings businessTypes,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  Strings organcodelist
 )
 {
   TextBody:
@@ -11,7 +12,6 @@
     // 鑾峰彇鏈夊簭鐨勫緟澶勭悊璁板綍
     toDealList := construct( Global_MappingOperations ) ;
     if( not isnull( businessTypes ) and businessTypes.Size() > 0 ) {
-        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
         toDealList := selectsortedset( globalOTDTable, Global_MappingOperation, item, 
                                        ( businessTypes.Find( item.BusinessType() ) >= 0 ) and 
                                        ( organcodelist.Find( item.OrganCode() ) >= 0 ), 
@@ -74,7 +74,7 @@
         op := Operation::FindOperationTypeIndex( operationId );
         if( isnull( op)){
           op := Operation::Create( operationId, unit, operationId, routingStep, 
-                                        Duration::Hours( item.UserLeadTime() ), Duration::Zero(), item.ActualCapacity(), false, 
+                                        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 );
         }
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
index 671fe30..712b51b 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
@@ -2,7 +2,8 @@
 #parent: #root
 Method MappingUnitData (
   Strings businesstypes,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  Strings organcodelist
 )
 {
   Description: 'Get unit data from operation mapping'
@@ -15,7 +16,6 @@
     if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
         listtodeal := selectset( globalOTDTable, Global_MappingOperation, item, true );
     } else {
-        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businesstypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
         listtodeal := selectset( globalOTDTable, Global_MappingOperation, item, 
     //                             businesstypes.Difference( businesstypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0
                                  ( businesstypes.Find( item.BusinessType() ) >= 0 ) and 
diff --git a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
index 875645b..5178d37 100644
--- a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
+++ b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
@@ -15,11 +15,26 @@
     // 甯佺鍜屽竵绉嶆眹鐜�
     //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 )
     
@@ -38,7 +53,7 @@
     //info( "BaseConversionFactor Finished, Start Operation Data Broker" );
     //macroPlan.Broker_OTD_Operation().Execute();
     info( "Operation Data Broker Finished, Start Unit Mapping" );
-    macroPlan.MappingUnitData( businessTypes ,globalOTDTable);
+    macroPlan.MappingUnitData( businessTypes ,globalOTDTable, organcodelist);
     
     // 搴撳瓨鐐�-3
     info( "Sales Segment Finished, Start Get StockingPoint From Api" )
@@ -82,11 +97,11 @@
     
     // 宸ヨ壓璺嚎 + BOM-9
     info( "Unit Finished, Start Operation Mapping" );
-    macroPlan.MappingOperationData( businessTypes ,globalOTDTable);  
+    macroPlan.MappingOperationData( businessTypes ,globalOTDTable, organcodelist );  
     //info( "Operation Finished, Start BOM Data Broker" );
     //macroPlan.Broker_OTD_BOM().Execute();
     info( "BOM Data Broker Finished, Start BOM Mapping" );
-    macroPlan.MappingOperationBOMData( businessTypes, isKeyProduct, createPurchaseSupplyMaterial,globalOTDTable );
+    macroPlan.MappingOperationBOMData( businessTypes, isKeyProduct, createPurchaseSupplyMaterial,globalOTDTable, organcodelist );
     
     //杞﹂亾淇℃伅-10
     info( "BOM Finished, Start Get Lanes From Api" );
@@ -118,26 +133,26 @@
     //info( "ProductInLane Finished, Start ActualPISPIP Data Broker" );
     //macroPlan.Broker_OTD_ActualPISPIP().Execute();
     info( "ActualPISPIP Data Broker Finished, Start ActualPISPIP Mapping" );
-    macroPlan.MappingActualPISPIPData( businessTypes, globalOTDTable,isKeyProduct );
+    macroPlan.MappingActualPISPIPData( 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.MappingExternalSupplyData( businessTypes, isKeyProduct ,globalOTDTable);
+    macroPlan.MappingExternalSupplyData( businessTypes, isKeyProduct ,globalOTDTable, organcodelist );
     
     // 搴撳瓨鎴愭湰-15
     InventoryValueAndCost::DoSync( macroPlan,globalOTDTable );
     
     // todo 鍒堕�犳垚鏈�-16
     info( "InventoryCost Finished, Start OperationCost Mapping" );
-    macroPlan.MappingOperationCostData( globalOTDTable, businessTypes );
+    macroPlan.MappingOperationCostData( globalOTDTable, businessTypes, organcodelist );
     
     // 璁㈠崟棰勬祴-17
-    Forecast::DoSync( macroPlan, businessTypes ,globalOTDTable);
+    Forecast::DoSync( macroPlan, businessTypes, globalOTDTable, organcodelist );
     
     // 璁㈠崟闇�姹�-18
-    CustomerOrder::DoSync( macroPlan, businessTypes, globalOTDTable);
+    CustomerOrder::DoSync( macroPlan, businessTypes, globalOTDTable, organcodelist );
     
     //鍒犻櫎澶氫綑鎶ラ敊鏁版嵁-19
     macroPlan.DeleteSnaityCheck();
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_BusinessType.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_BusinessType.qbl
deleted file mode 100644
index a122190..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_BusinessType.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute BusinessType
-{
-  #keys: '3[414384.0.874289974][414384.0.874289973][414384.0.874289975]'
-  Description: '涓氬姟绫诲瀷'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity1.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity1.qbl
deleted file mode 100644
index a947f89..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity1.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlyModCapacity1
-{
-  #keys: '3[414384.0.874289977][414384.0.874289976][414384.0.874289978]'
-  Description: '1鏈堟ā缁勪骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity10.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity10.qbl
deleted file mode 100644
index b1f45a3..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity10.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlyModCapacity10
-{
-  #keys: '3[414384.0.874290004][414384.0.874290003][414384.0.874290005]'
-  Description: '10鏈堟ā缁勪骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity11.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity11.qbl
deleted file mode 100644
index 230ec57..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity11.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlyModCapacity11
-{
-  #keys: '3[414384.0.874290007][414384.0.874290006][414384.0.874290008]'
-  Description: '11鏈堟ā缁勪骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity12.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity12.qbl
deleted file mode 100644
index d959531..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity12.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlyModCapacity12
-{
-  #keys: '3[414384.0.874290010][414384.0.874290009][414384.0.874290011]'
-  Description: '12鏈堟ā缁勪骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity2.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity2.qbl
deleted file mode 100644
index 0cad4a5..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity2.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlyModCapacity2
-{
-  #keys: '3[414384.0.874289980][414384.0.874289979][414384.0.874289981]'
-  Description: '2鏈堟ā缁勪骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity3.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity3.qbl
deleted file mode 100644
index 83b2395..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity3.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlyModCapacity3
-{
-  #keys: '3[414384.0.874289983][414384.0.874289982][414384.0.874289984]'
-  Description: '3鏈堟ā缁勪骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity4.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity4.qbl
deleted file mode 100644
index 587cb6d..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity4.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlyModCapacity4
-{
-  #keys: '3[414384.0.874289986][414384.0.874289985][414384.0.874289987]'
-  Description: '4鏈堟ā缁勪骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity5.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity5.qbl
deleted file mode 100644
index 188baf2..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity5.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlyModCapacity5
-{
-  #keys: '3[414384.0.874289989][414384.0.874289988][414384.0.874289990]'
-  Description: '5鏈堟ā缁勪骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity6.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity6.qbl
deleted file mode 100644
index 0b85232..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity6.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlyModCapacity6
-{
-  #keys: '3[414384.0.874289992][414384.0.874289991][414384.0.874289993]'
-  Description: '6鏈堟ā缁勪骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity7.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity7.qbl
deleted file mode 100644
index 1ec701b..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity7.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlyModCapacity7
-{
-  #keys: '3[414384.0.874289995][414384.0.874289994][414384.0.874289996]'
-  Description: '7鏈堟ā缁勪骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity8.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity8.qbl
deleted file mode 100644
index 66f263c..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity8.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlyModCapacity8
-{
-  #keys: '3[414384.0.874289998][414384.0.874289997][414384.0.874289999]'
-  Description: '8鏈堟ā缁勪骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity9.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity9.qbl
deleted file mode 100644
index 3e6b697..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity9.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlyModCapacity9
-{
-  #keys: '3[414384.0.874290001][414384.0.874290000][414384.0.874290002]'
-  Description: '9鏈堟ā缁勪骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales1.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales1.qbl
deleted file mode 100644
index f8d4c4d..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales1.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySales1
-{
-  #keys: '3[414384.0.874290049][414384.0.874290048][414384.0.874290050]'
-  Description: '1鏈堥攢鍞'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales10.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales10.qbl
deleted file mode 100644
index e4969d8..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales10.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySales10
-{
-  #keys: '3[414384.0.874290076][414384.0.874290075][414384.0.874290077]'
-  Description: '10鏈堥攢鍞'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales11.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales11.qbl
deleted file mode 100644
index e91c4cd..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales11.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySales11
-{
-  #keys: '3[414384.0.874290079][414384.0.874290078][414384.0.874290080]'
-  Description: '11鏈堥攢鍞'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales12.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales12.qbl
deleted file mode 100644
index 30a1a0b..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales12.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySales12
-{
-  #keys: '3[414384.0.874290082][414384.0.874290081][414384.0.874290083]'
-  Description: '12鏈堥攢鍞'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales2.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales2.qbl
deleted file mode 100644
index 898e38f..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales2.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySales2
-{
-  #keys: '3[414384.0.874290052][414384.0.874290051][414384.0.874290053]'
-  Description: '2鏈堥攢鍞'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales3.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales3.qbl
deleted file mode 100644
index 15a94ae..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales3.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySales3
-{
-  #keys: '3[414384.0.874290055][414384.0.874290054][414384.0.874290056]'
-  Description: '3鏈堥攢鍞'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales4.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales4.qbl
deleted file mode 100644
index 43b4653..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales4.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySales4
-{
-  #keys: '3[414384.0.874290058][414384.0.874290057][414384.0.874290059]'
-  Description: '4鏈堥攢鍞'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales5.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales5.qbl
deleted file mode 100644
index 7e5dce4..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales5.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySales5
-{
-  #keys: '3[414384.0.874290061][414384.0.874290060][414384.0.874290062]'
-  Description: '5鏈堥攢鍞'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales6.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales6.qbl
deleted file mode 100644
index 541e0c5..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales6.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySales6
-{
-  #keys: '3[414384.0.874290064][414384.0.874290063][414384.0.874290065]'
-  Description: '6鏈堥攢鍞'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales7.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales7.qbl
deleted file mode 100644
index 38e195c..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales7.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySales7
-{
-  #keys: '3[414384.0.874290067][414384.0.874290066][414384.0.874290068]'
-  Description: '7鏈堥攢鍞'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales8.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales8.qbl
deleted file mode 100644
index 2ba343e..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales8.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySales8
-{
-  #keys: '3[414384.0.874290070][414384.0.874290069][414384.0.874290071]'
-  Description: '8鏈堥攢鍞'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales9.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales9.qbl
deleted file mode 100644
index dc656a9..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales9.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySales9
-{
-  #keys: '3[414384.0.874290073][414384.0.874290072][414384.0.874290074]'
-  Description: '9鏈堥攢鍞'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity1.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity1.qbl
deleted file mode 100644
index 2bddbc1..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity1.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySheetCapacity1
-{
-  #keys: '3[414384.0.874290013][414384.0.874290012][414384.0.874290014]'
-  Description: '1鏈堝疄鏁板ぇ寮犱骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity10.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity10.qbl
deleted file mode 100644
index 9526d3c..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity10.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySheetCapacity10
-{
-  #keys: '3[414384.0.874290040][414384.0.874290039][414384.0.874290041]'
-  Description: '10鏈堝疄鏁板ぇ寮犱骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity11.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity11.qbl
deleted file mode 100644
index 5a8257c..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity11.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySheetCapacity11
-{
-  #keys: '3[414384.0.874290043][414384.0.874290042][414384.0.874290044]'
-  Description: '11鏈堝疄鏁板ぇ寮犱骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity12.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity12.qbl
deleted file mode 100644
index 245bdd7..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity12.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySheetCapacity12
-{
-  #keys: '3[414384.0.874290046][414384.0.874290045][414384.0.874290047]'
-  Description: '12鏈堝疄鏁板ぇ寮犱骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity2.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity2.qbl
deleted file mode 100644
index c76ddae..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity2.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySheetCapacity2
-{
-  #keys: '3[414384.0.874290016][414384.0.874290015][414384.0.874290017]'
-  Description: '2鏈堝疄鏁板ぇ寮犱骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity3.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity3.qbl
deleted file mode 100644
index b7b9a0b..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity3.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySheetCapacity3
-{
-  #keys: '3[414384.0.874290019][414384.0.874290018][414384.0.874290020]'
-  Description: '3鏈堝疄鏁板ぇ寮犱骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity4.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity4.qbl
deleted file mode 100644
index 666fb83..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity4.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySheetCapacity4
-{
-  #keys: '3[414384.0.874290022][414384.0.874290021][414384.0.874290023]'
-  Description: '4鏈堝疄鏁板ぇ寮犱骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity5.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity5.qbl
deleted file mode 100644
index 534a9d8..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity5.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySheetCapacity5
-{
-  #keys: '3[414384.0.874290025][414384.0.874290024][414384.0.874290026]'
-  Description: '5鏈堝疄鏁板ぇ寮犱骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity6.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity6.qbl
deleted file mode 100644
index 02aca20..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity6.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySheetCapacity6
-{
-  #keys: '3[414384.0.874290028][414384.0.874290027][414384.0.874290029]'
-  Description: '6鏈堝疄鏁板ぇ寮犱骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity7.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity7.qbl
deleted file mode 100644
index 51d0978..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity7.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySheetCapacity7
-{
-  #keys: '3[414384.0.874290031][414384.0.874290030][414384.0.874290032]'
-  Description: '7鏈堝疄鏁板ぇ寮犱骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity8.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity8.qbl
deleted file mode 100644
index 9551e3c..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity8.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySheetCapacity8
-{
-  #keys: '3[414384.0.874290034][414384.0.874290033][414384.0.874290035]'
-  Description: '8鏈堝疄鏁板ぇ寮犱骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity9.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity9.qbl
deleted file mode 100644
index 206054f..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity9.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute MonthlySheetCapacity9
-{
-  #keys: '3[414384.0.874290037][414384.0.874290036][414384.0.874290038]'
-  Description: '9鏈堝疄鏁板ぇ寮犱骇鑳�'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_ProductId.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_ProductId.qbl
deleted file mode 100644
index 9f8ca6f..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_ProductId.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProductId
-{
-  #keys: '3[414384.0.874289946][414384.0.874289945][414384.0.874289947]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_yearNo.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_yearNo.qbl
deleted file mode 100644
index c970d34..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/Attribute_yearNo.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute YearNo
-{
-  #keys: '3[414384.0.874290125][414384.0.874290124][414384.0.874290126]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInPCSInYear.qbl b/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInPCSInYear.qbl
deleted file mode 100644
index 1d8303d..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/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( "MappingAnnualBudget", "MonthlyModCapacity" + [String]i );
-      result := result + field.GetReal( this );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInHalfYear.qbl b/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInHalfYear.qbl
deleted file mode 100644
index 3606369..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/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( "MappingAnnualBudget", "MonthlySheetCapacity" + [String]i );
-      result := result + field.GetReal( this );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl b/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl
deleted file mode 100644
index 9023738..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/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( "MappingAnnualBudget", "MonthlySheetCapacity" + [String]i );
-      result := result + field.GetReal( this );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInYear.qbl b/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInYear.qbl
deleted file mode 100644
index 7828eb3..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/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( "MappingAnnualBudget", "MonthlySheetCapacity" + [String]i );
-      result := result + field.GetReal( this );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Method_GetSaleAmountInYear.qbl b/_Main/BL/Type_MappingAnnualBudget/Method_GetSaleAmountInYear.qbl
deleted file mode 100644
index bbb3166..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/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( "MappingAnnualBudget", "MonthlySales" + [String]i );
-      result := result + field.GetReal( this );
-    }
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByMonth.qbl b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByMonth.qbl
deleted file mode 100644
index e85f742..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByMonth.qbl
+++ /dev/null
@@ -1,22 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSaleByMonth (
-  Strings productNo,
-  MPSync parent,
-  Number yearNo,
-  Number monthNo
-) as Real
-{
-  Description: '閿�鍞锛圵锛�'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    field := Reflection::FindAttribute( "MappingAnnualBudget", "MonthlySales" + [String]monthNo );
-    value := sum( parent, 
-                  MappingAnnualBudget, 
-                  item, 
-                  item.YearNo() = yearNo and productNo.Find( item.ProductId() ) > -1,
-                  field.GetReal( item ) );
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByYear.qbl b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByYear.qbl
deleted file mode 100644
index 679009e..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByYear.qbl
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSaleByYear (
-  Strings productNo,
-  MPSync parent,
-  Number yearNo
-) as Real
-{
-  Description: '閿�鍞锛圵锛�'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := sum( parent, 
-                   MappingAnnualBudget, 
-                   item, 
-                   item.YearNo() = yearNo and productNo.Find( item.ProductId() ) > -1,
-                   item.GetSaleAmountInYear() );
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByHalfYear.qbl b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByHalfYear.qbl
deleted file mode 100644
index 0bc221e..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByHalfYear.qbl
+++ /dev/null
@@ -1,21 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSheetByHalfYear (
-  Strings productNo,
-  MPSync parent,
-  Number yearNo,
-  Number halfNo
-) as Real
-{
-  Description: '浜ц兘 - 瀹炴暟澶у紶'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := sum( parent, 
-                   MappingAnnualBudget, 
-                   item, 
-                   item.YearNo() = yearNo and productNo.Find( item.ProductId() ) > -1,
-                   item.GetCapacityInSheetInHalfYear( halfNo ) );
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByMonth.qbl b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByMonth.qbl
deleted file mode 100644
index 18801f0..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByMonth.qbl
+++ /dev/null
@@ -1,22 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSheetByMonth (
-  Strings productNo,
-  MPSync parent,
-  Number yearNo,
-  Number monthNo
-) as Real
-{
-  Description: '浜ц兘-瀹炴暟澶у紶'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    field := Reflection::FindAttribute( "MappingAnnualBudget", "MonthlySheetCapacity" + [String]monthNo );
-    value := sum( parent, 
-                  MappingAnnualBudget, 
-                  item, 
-                  item.YearNo() = yearNo and productNo.Find( item.ProductId() ) > -1,
-                  field.GetReal( item ) );
-    return value;
-  *]
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetBySeason.qbl b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetBySeason.qbl
deleted file mode 100644
index 0d6087b..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetBySeason.qbl
+++ /dev/null
@@ -1,21 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSheetBySeason (
-  Strings productNo,
-  MPSync parent,
-  Number yearNo,
-  Number seasonNo
-) as Real
-{
-  Description: '浜ц兘 - 瀹炴暟澶у紶'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := sum( parent, 
-                   MappingAnnualBudget, 
-                   item, 
-                   item.YearNo() = yearNo and productNo.Find( item.ProductId() ) > -1,
-                   item.GetCapacityInSheetInSeason( seasonNo ) );
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByYear.qbl b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByYear.qbl
deleted file mode 100644
index e63a38a..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByYear.qbl
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetSheetByYear (
-  Strings productNo,
-  MPSync parent,
-  Number yearNo
-) as Real
-{
-  Description: '浜ц兘 - 瀹炴暟澶у紶'
-  TextBody:
-  [*
-    // yypsybs Sep-18-2023 (created)
-    result := sum( parent, 
-                   MappingAnnualBudget, 
-                   item, 
-                   item.YearNo() = yearNo and productNo.Find( item.ProductId() ) > -1,
-                   item.GetCapacityInSheetInYear() );
-    return result;
-  *]
-}
diff --git a/_Main/BL/Type_MappingAnnualBudget/_ROOT_Type_MappingAnnualBudget.qbl b/_Main/BL/Type_MappingAnnualBudget/_ROOT_Type_MappingAnnualBudget.qbl
deleted file mode 100644
index eeab2ce..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/_ROOT_Type_MappingAnnualBudget.qbl
+++ /dev/null
@@ -1,10 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type MappingAnnualBudget
-{
-  #keys: '5[414384.0.874289918][414384.0.874289916][0.0.0][414384.0.874289917][414384.0.874289919]'
-  BaseType: Object
-  Description: '骞村害棰勭畻鏁版嵁'
-  StructuredName: 'MappingAnnualBudgets'
-}
diff --git a/_Main/BL/Type_MasterPlanReleaseWorkOrder/StaticMethod_GenerateAndDistributeWorkOrders.qbl b/_Main/BL/Type_MasterPlanReleaseWorkOrder/StaticMethod_GenerateAndDistributeWorkOrders.qbl
index 3673ac7..97a091d 100644
--- a/_Main/BL/Type_MasterPlanReleaseWorkOrder/StaticMethod_GenerateAndDistributeWorkOrders.qbl
+++ b/_Main/BL/Type_MasterPlanReleaseWorkOrder/StaticMethod_GenerateAndDistributeWorkOrders.qbl
@@ -1,7 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod GenerateAndDistributeWorkOrders (
-  MacroPlan macroPlan
+  MacroPlan macroPlan,
+  GlobalOTDTable globalOTDTable
 )
 {
   TextBody:
@@ -18,17 +19,24 @@
     
     orderNumber := 1;
     
+    organCodes := selectuniquevalues( globalOTDTable, Global_MappingOperation, tempGMO, true, tempGMO.OrganCode() );
+    
     traverse ( macroPlan, Product_MP.ProductInStockingPoint_MP, pisp, pisp.IsLeaf() and not pisp.IsSystem() ) {
       traverse ( pisp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispippl ) {
-        plannedQuantity := sum( pispippl, NewSupply, ns, guard( not isnull( ns.Process_MP().astype( Operation ) ), false ), ns.Quantity() );
-        if ( plannedQuantity > 0 ) {
+        traverse ( pispippl, NewSupply, ns, ns.Quantity() > 0 ) {
+          organCode := "鏃犵粍缁囦俊鎭�";
+          unit := guard( ns.Process_MP().astype( Operation ).Unit(), null( Unit ) );
+          if ( not isnull( unit ) ){
+            MasterPlanReleaseWorkOrder::ObtainOrganizationCode( unit, organCodes, organCode );
+          }
           newMasterPlanReleaseWorkOrder.MasterPlanReleaseWorkOrderTabulation( relnew,
                                                                               ProductionWorkOrderNumber := universalPrefixForWorkOrderNumber + [String]orderNumber,
                                                                               ProductModel              := pisp.ProductID(),
                                                                               MaterialDescription       := pisp.ProductID(),
                                                                               StartDate                 := pispippl.Start().Date(),
                                                                               EndDate                   := pispippl.End().Date(),
-                                                                              PlannedQuantity           := plannedQuantity
+                                                                              PlannedQuantity           := ns.Quantity(),
+                                                                              OrganizationInfomation    := organCode
                                                                              );
           orderNumber++;
         }
diff --git a/_Main/BL/Type_MasterPlanReleaseWorkOrder/StaticMethod_GenerateAndDistributeWorkOrders1.qbl b/_Main/BL/Type_MasterPlanReleaseWorkOrder/StaticMethod_GenerateAndDistributeWorkOrders1.qbl
new file mode 100644
index 0000000..b854ffd
--- /dev/null
+++ b/_Main/BL/Type_MasterPlanReleaseWorkOrder/StaticMethod_GenerateAndDistributeWorkOrders1.qbl
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateAndDistributeWorkOrders1 (
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    macroPlan.MasterPlanReleaseWorkOrder( relflush );
+    
+    newMasterPlanReleaseWorkOrder := macroPlan.MasterPlanReleaseWorkOrder( relnew, IsGenerateAndPublishWorkOrders := true );
+    
+    universalPrefixForWorkOrderNumber := [String]Date::ActualDate().Year() + 
+                                         ifexpr( ( [String]Date::ActualDate().Month() ).Length() = 1, "0" + [String]Date::ActualDate().Month(), [String]Date::ActualDate().Month() )                         +
+                                         ifexpr( ( [String]Date::ActualDate().Day() ).Length() = 1, "0" + [String]Date::ActualDate().Day(), [String]Date::ActualDate().Day() )                               +
+                                         ifexpr( ( [String]DateTime::ActualTime().HourOfDay() ).Length() = 1, "0" + [String]DateTime::ActualTime().HourOfDay(), [String]DateTime::ActualTime().HourOfDay() ) +
+                                         ifexpr( ( [String]DateTime::ActualTime().MinuteOfHour() ).Length() = 1, "0" + [String]DateTime::ActualTime().MinuteOfHour(), [String]DateTime::ActualTime().MinuteOfHour() );
+    
+    orderNumber := 1;
+    
+    traverse ( macroPlan, Product_MP.ProductInStockingPoint_MP, pisp, pisp.IsLeaf()       and 
+                                                                      not pisp.IsSystem() ) {   
+      exists( macroPlan, Product_MP.ProductInStockingPoint_MP.ProcessInput.ProductInStockingPoint_MP, tempPISP, 
+                          tempPISP = pisp );                                                                                                                              
+      traverse ( pisp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispippl ) {
+        plannedQuantity := sum( pispippl, NewSupply, ns, guard( not isnull( ns.Process_MP().astype( Operation ) ), false ), ns.Quantity() );
+        if ( plannedQuantity > 0 ) {
+          newMasterPlanReleaseWorkOrder.MasterPlanReleaseWorkOrderTabulation( relnew,
+                                                                              ProductionWorkOrderNumber := universalPrefixForWorkOrderNumber + [String]orderNumber,
+                                                                              ProductModel              := pisp.ProductID(),
+                                                                              MaterialDescription       := pisp.ProductID(),
+                                                                              StartDate                 := pispippl.Start().Date(),
+                                                                              EndDate                   := pispippl.End().Date(),
+                                                                              PlannedQuantity           := plannedQuantity
+                                                                             );
+          orderNumber++;
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MasterPlanReleaseWorkOrder/StaticMethod_ObtainOrganizationCode.qbl b/_Main/BL/Type_MasterPlanReleaseWorkOrder/StaticMethod_ObtainOrganizationCode.qbl
new file mode 100644
index 0000000..9f14e0d
--- /dev/null
+++ b/_Main/BL/Type_MasterPlanReleaseWorkOrder/StaticMethod_ObtainOrganizationCode.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ObtainOrganizationCode (
+  Unit unit,
+  Strings organCodes,
+  output String organCode
+)
+{
+  TextBody:
+  [*
+    if ( exists( organCodes, Elements, oc, oc = unit.ID() ) ) {
+      organCode := unit.ID();
+    } else {
+      if ( not isnull( unit.Parent() ) ) {
+        MasterPlanReleaseWorkOrder::ObtainOrganizationCode( unit.Parent(), organCodes, organCode );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MasterPlanReleaseWorkOrderTabulation/Attribute_OrganizationInfomation.qbl b/_Main/BL/Type_MasterPlanReleaseWorkOrderTabulation/Attribute_OrganizationInfomation.qbl
new file mode 100644
index 0000000..f8af291
--- /dev/null
+++ b/_Main/BL/Type_MasterPlanReleaseWorkOrderTabulation/Attribute_OrganizationInfomation.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrganizationInfomation
+{
+  #keys: '3[414702.1.53467738][414702.1.53467737][414702.1.53467739]'
+  Description: '缁勭粐淇℃伅'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PRData/Attribute_CreateBy.qbl b/_Main/BL/Type_PRData/Attribute_CreateBy.qbl
new file mode 100644
index 0000000..79e0921
--- /dev/null
+++ b/_Main/BL/Type_PRData/Attribute_CreateBy.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CreateBy
+{
+  #keys: '3[414384.0.789498519][414384.0.789498518][414384.0.789498520]'
+  Description: '鍙戦�佷汉'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PRData/Attribute_CreateTime.qbl b/_Main/BL/Type_PRData/Attribute_CreateTime.qbl
new file mode 100644
index 0000000..b25c6e9
--- /dev/null
+++ b/_Main/BL/Type_PRData/Attribute_CreateTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CreateTime
+{
+  #keys: '3[414384.0.789498516][414384.0.789498515][414384.0.789498517]'
+  Description: '鍙戦�佹椂闂�'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_PRData/Attribute_CreateTimeString.qbl b/_Main/BL/Type_PRData/Attribute_CreateTimeString.qbl
new file mode 100644
index 0000000..96b5c1d
--- /dev/null
+++ b/_Main/BL/Type_PRData/Attribute_CreateTimeString.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CreateTimeString
+{
+  #keys: '3[414384.0.847354596][414384.0.847354595][414384.0.847354597]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PRData/Attribute_DeliveryDate.qbl b/_Main/BL/Type_PRData/Attribute_DeliveryDate.qbl
new file mode 100644
index 0000000..ccfb81a
--- /dev/null
+++ b/_Main/BL/Type_PRData/Attribute_DeliveryDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DeliveryDate
+{
+  #keys: '3[414384.0.957354843][414384.0.957354842][414384.0.957354844]'
+  Description: '浜よ揣鏃ユ湡'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PRData/Attribute_LineAttribute3.qbl b/_Main/BL/Type_PRData/Attribute_LineAttribute3.qbl
new file mode 100644
index 0000000..f2d524b
--- /dev/null
+++ b/_Main/BL/Type_PRData/Attribute_LineAttribute3.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LineAttribute3
+{
+  #keys: '3[414384.0.953290077][414384.0.953290076][414384.0.953290078]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PRData/Attribute_OrganName.qbl b/_Main/BL/Type_PRData/Attribute_OrganName.qbl
new file mode 100644
index 0000000..e9aa5c1
--- /dev/null
+++ b/_Main/BL/Type_PRData/Attribute_OrganName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrganName
+{
+  #keys: '3[414384.0.953290043][414384.0.953290042][414384.0.953290044]'
+  Description: '缁勭粐鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PRData/Attribute_PRReleaseStatus.qbl b/_Main/BL/Type_PRData/Attribute_PRReleaseStatus.qbl
new file mode 100644
index 0000000..3c6c4a5
--- /dev/null
+++ b/_Main/BL/Type_PRData/Attribute_PRReleaseStatus.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PRReleaseStatus
+{
+  #keys: '3[414384.0.789498513][414384.0.789498512][414384.0.789498514]'
+  Description: 'PR鏁版嵁鍙戦�佺姸鎬�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PRData/Attribute_PlannerCode.qbl b/_Main/BL/Type_PRData/Attribute_PlannerCode.qbl
deleted file mode 100644
index 44030b3..0000000
--- a/_Main/BL/Type_PRData/Attribute_PlannerCode.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute PlannerCode
-{
-  #keys: '3[414384.0.789498510][414384.0.789498509][414384.0.789498511]'
-  Description: '鐗╂枡璁″垝鍛�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_PRData/Attribute_ProduceRequiredDate.qbl b/_Main/BL/Type_PRData/Attribute_ProduceRequiredDate.qbl
deleted file mode 100644
index 20ef1b2..0000000
--- a/_Main/BL/Type_PRData/Attribute_ProduceRequiredDate.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProduceRequiredDate
-{
-  #keys: '3[414384.0.789498480][414384.0.789498479][414384.0.789498481]'
-  Description: '闇�姹傛棩鏈�'
-  ValueType: Date
-}
diff --git a/_Main/BL/Type_PRData/Attribute_SendBy.qbl b/_Main/BL/Type_PRData/Attribute_SendBy.qbl
deleted file mode 100644
index 71a556e..0000000
--- a/_Main/BL/Type_PRData/Attribute_SendBy.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SendBy
-{
-  #keys: '3[414384.0.789498519][414384.0.789498518][414384.0.789498520]'
-  Description: '鍙戦�佷汉'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_PRData/Attribute_SendStatus.qbl b/_Main/BL/Type_PRData/Attribute_SendStatus.qbl
deleted file mode 100644
index 7df5d57..0000000
--- a/_Main/BL/Type_PRData/Attribute_SendStatus.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SendStatus
-{
-  #keys: '3[414384.0.789498513][414384.0.789498512][414384.0.789498514]'
-  Description: 'PR鏁版嵁鍙戦�佺姸鎬�'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_PRData/Attribute_SendTIme.qbl b/_Main/BL/Type_PRData/Attribute_SendTIme.qbl
deleted file mode 100644
index 767d0b3..0000000
--- a/_Main/BL/Type_PRData/Attribute_SendTIme.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SendTime
-{
-  #keys: '3[414384.0.789498516][414384.0.789498515][414384.0.789498517]'
-  Description: '鍙戦�佹椂闂�'
-  ValueType: DateTime
-}
diff --git a/_Main/BL/Type_PRData/Attribute_SendTimeString.qbl b/_Main/BL/Type_PRData/Attribute_SendTimeString.qbl
deleted file mode 100644
index 248a63f..0000000
--- a/_Main/BL/Type_PRData/Attribute_SendTimeString.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SendTimeString
-{
-  #keys: '3[414384.0.847354596][414384.0.847354595][414384.0.847354597]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_PRData/Function_CalcSendTimeString.qbl b/_Main/BL/Type_PRData/Function_CalcSendTimeString.qbl
index 4705c8f..aae89da 100644
--- a/_Main/BL/Type_PRData/Function_CalcSendTimeString.qbl
+++ b/_Main/BL/Type_PRData/Function_CalcSendTimeString.qbl
@@ -6,13 +6,13 @@
   [*
     // yypsybs Sep-19-2023 (created)
     value := "";
-    if( this.SendStatus() <> "" ) {
+    if( this.PRReleaseStatus() <> "" ) {
       cnv := DateTimeToString::StandardConverter();
       cnv.SetCustomConversion();
       cnv.CustomFormatString( "yyyy/MM/dd H:mm:ss" );
       
-      value := guard( cnv.Convert( this.SendTime() ), "" );
+      value := guard( cnv.Convert( this.CreateTime() ), "" );
     }
-    this.SendTimeString( value );
+    this.CreateTimeString( value );
   *]
 }
diff --git a/_Main/BL/Type_PRData/Method_DoCall.qbl b/_Main/BL/Type_PRData/Method_DoCall.qbl
index 7a3a433..3e8d9b5 100644
--- a/_Main/BL/Type_PRData/Method_DoCall.qbl
+++ b/_Main/BL/Type_PRData/Method_DoCall.qbl
@@ -13,6 +13,7 @@
     
     // 鐓ф惉閮ㄥ垎
     result.AuthorizationStatus( this.AuthorizationStatus() );
+    
     result.BusinessType( this.BusinessType() );
     result.DataID( this.DataID() );
     result.DeliverToRequestorId( this.DeliverToRequestorId() );
@@ -26,9 +27,8 @@
     result.MRPCalverNo( this.MRPCalverNo() );
     result.OrganCode( this.OrganCode() );
     result.OrgId( this.OrgId() );
-    result.PlannerCode( this.PlannerCode() );
-    result.PreparerId( this.PreparerId() );
-    result.ProduceRequiredDate( this.ProduceRequiredDate() );
+    result.PreparerID( this.PreparerId() );
+    result.DeliveryDate( this.DeliveryDate() );
     result.ProductID( this.ProductID() );
     result.ProductName( this.ProductName() );
     result.ProviderCode( this.ProviderCode() );
@@ -52,9 +52,9 @@
     result.SendStatus( "宸插彂閫�" );
     result.ReleaseBy( callBy );
     result.SendTime( DateTime::Now() );
-    this.SendStatus( "宸插彂閫�" );
-    this.SendTime( DateTime::Now() );
-    this.SendBy( callBy );
+    this.PRReleaseStatus( "宸插彂閫�" );
+    this.CreateTime( DateTime::Now() );
+    this.CreateBy( callBy );
     
     return result;
   *]
diff --git a/_Main/BL/Type_PRData/Method_PrintCall.qbl b/_Main/BL/Type_PRData/Method_PrintCall.qbl
index f82b310..180f056 100644
--- a/_Main/BL/Type_PRData/Method_PrintCall.qbl
+++ b/_Main/BL/Type_PRData/Method_PrintCall.qbl
@@ -25,9 +25,8 @@
     result.MRPCalverNo( this.MRPCalverNo() );
     result.OrganCode( this.OrganCode() );
     result.OrgId( this.OrgId() );
-    result.PlannerCode( this.PlannerCode() );
-    result.PreparerId( this.PreparerId() );
-    result.ProduceRequiredDate( this.ProduceRequiredDate() );
+    result.PreparerID( this.PreparerId() );
+    result.DeliveryDate( this.DeliveryDate() );
     result.ProductID( this.ProductID() );
     result.ProductName( this.ProductName() );
     result.ProviderCode( this.ProviderCode() );
diff --git a/_Main/BL/Type_PRData/StaticMethod_CanCall.qbl b/_Main/BL/Type_PRData/StaticMethod_CanCall.qbl
index c2aae7d..a051fa6 100644
--- a/_Main/BL/Type_PRData/StaticMethod_CanCall.qbl
+++ b/_Main/BL/Type_PRData/StaticMethod_CanCall.qbl
@@ -13,7 +13,7 @@
     if( toCalls.Size() = 0 ) {
       feedback_o := "No checked PR";
     } else {
-      havaUnsent := exists( toCalls, Elements, toCall, toCall.SendStatus() = "" );
+      havaUnsent := exists( toCalls, Elements, toCall, toCall.PRReleaseStatus() = "" );
       if( not havaUnsent ) {
         feedback_o := "No unsent PR";
       }
diff --git a/_Main/BL/Type_PRData/StaticMethod_DoCall.qbl b/_Main/BL/Type_PRData/StaticMethod_DoCall.qbl
index 56222b2..6de8c17 100644
--- a/_Main/BL/Type_PRData/StaticMethod_DoCall.qbl
+++ b/_Main/BL/Type_PRData/StaticMethod_DoCall.qbl
@@ -11,7 +11,7 @@
     // yypsybs Sep-12-2023 (created)
     info( "DoCall " + [String]toCalls.Size() + " PRs" );
     nowNo := 1;
-    traverse( toCalls, Elements, toCall, toCall.SendStatus() = "" ) {
+    traverse( toCalls, Elements, toCall, toCall.PRReleaseStatus() = "" ) {
       info ( "DoCall " + [String]nowNo + "/" + [String]toCalls.Size() + " PR" );
       toCall.DoCall( globalData, callBy );  
       nowNo := nowNo + 1;
diff --git a/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl b/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl
index cf729ec..1b706e0 100644
--- a/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl
+++ b/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl
@@ -46,7 +46,7 @@
       PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductID(), "鐗╂枡缂栫爜" );
       PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductName(), "鐗╂枡鍚嶇О" );
       PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.IsPanelMaterial(), "闈㈡澘鐗╂枡鏍囪瘑" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, ifexpr( toExport.ProduceRequiredDate() = Date::MinDate(), "", dateToString.Convert( toExport.ProduceRequiredDate() ) ), "浜よ揣鏃ユ湡" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, ifexpr( toExport.DeliveryDate() = Date::MinDate(), "", dateToString.Convert( toExport.DeliveryDate() ) ), "浜よ揣鏃ユ湡" );
       PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, ifexpr( toExport.PRSuggestionDate() = Date::MinDate(), "", dateToString.Convert( toExport.PRSuggestionDate() ) ), "PR寤鸿鏃ユ湡" );
       PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.Quantity(), "浜よ揣鏁伴噺" );
       PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.MRPCalverNo(), "MRP璁$畻鐗堟湰鍙�" );
@@ -60,9 +60,9 @@
       PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProviderName(), "渚涘簲鍟嗗悕绉�" );
       PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.StockingPointID(), "鏀惰揣搴撳瓨鐐�" );
       PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.UnitOfMeasure(), "璁¢噺鍗曚綅" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.SendStatus(), "PR鏁版嵁鍙戦�佺姸鎬�" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.SendTimeString(), "鍙戦�佹椂闂�" );
-      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.SendBy(), "鍙戦�佷汉" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.PRReleaseStatus(), "PR鏁版嵁鍙戦�佺姸鎬�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.CreateTimeString(), "鍙戦�佹椂闂�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.CreateBy(), "鍙戦�佷汉" );
     }
     
     xmlDOMSerializer := xmlDOMImplementation.CreateSerializer();
diff --git "a/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning\043662.qbl" "b/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning\043662.qbl"
index 2b88918..1b30f35 100644
--- "a/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning\043662.qbl"
+++ "b/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning\043662.qbl"
@@ -3,25 +3,26 @@
 StaticMethod FromSupplyPlanning (
   GlobalOTDTable otdTable,
   MacroPlan macroPlan,
-  MacroPlan mappingRoot,
-  ProductInStockingPointInPeriod pispip
+  ProductInStockingPointInPeriod pispip,
+  String userId
 ) as PRData
 {
   TextBody:
   [*
     // yypsybs Sep-12-2023 (created)
     result := macroPlan.PRData( relnew );
-    result.InterfaceSourceCode( "Quintiq" );
     
     pisp := pispip.ProductInStockingPoint_MP();
     product := pisp.Product_MP();
     stockingPoint := pisp.StockingPoint_MP();
     period := pispip.Period_MP();
-    mappingProduct := MappingProduct::GetByProductId( mappingRoot, product.ID() );
+    // QID7
+    mappingProduct := Global_MappingProduct_MP::GetByProductId( otdTable, product.ID() );
+    // QID12
+    mappingOperation := Global_MappingOperation::GetByProductId( otdTable, product.ID() );
+    // QID15
+    mappingProviderCapacity := Global_MappingProviderCapacity::GetByProductId( otdTable, product.ID() );
     matAttrSetting := MatAttrSettingAndPlanStrategy::GetExistByMatCode( otdTable, product.ID() );
-    // 鎺ュ彛/涓棿琛ㄦ殏鏃�
-    mappingProviderCapacity := "鏆傛棤";
-    erpData := "鏆傛棤";
     
     // 鏍规嵁pispip
     result.MRPCalverNo( ifexpr( pispip.MRPCalverNo() = "", "鏆傛棤", pispip.MRPCalverNo() ) );
@@ -35,9 +36,9 @@
     result.StockingPointID( stockingPoint.ID() );
     
     // 鏍规嵁period
-    result.ProduceRequiredDate( period.StartDate() );
-    result.PRSuggestionDate( ifexpr( (result.ProduceRequiredDate() - Duration::Days( 7 )).Date() >= Date::Today(),
-                                     Date::Today(), (result.ProduceRequiredDate() - Duration::Days( 7 )).Date() ) );
+    result.DeliveryDate( period.StartDate() );
+    result.PRSuggestionDate( ifexpr( (result.DeliveryDate() - Duration::Days( 7 )).Date() >= Date::Today(),
+                                     Date::Today(), (result.DeliveryDate() - Duration::Days( 7 )).Date() ) );
     
     // 鏍规嵁 鐗╂枡灞炴�ф爣绛捐瀹�&鐗╂枡璁″垝绛栫暐
     result.IsPanelMaterial( "鏆傛棤" );
@@ -51,22 +52,39 @@
       result.MaterialMRPType( ifexpr( matAttrSetting.PlanningStrategyCustom() <> "", matAttrSetting.PlanningStrategyCustom(), matAttrSetting.PlanningStrategyAuto() ) );
     }
     
-    
     // 鏍规嵁product涓棿琛�
     if( isnull( mappingProduct ) ) {
-      result.BusinessType( "鏆傛棤" );
-      result.OrganCode( "鏆傛棤" );
-      result.UnitOfMeasure( "鏆傛棤" );
+      result.BusinessType( "鏆傛棤" );  
     } else {
-      result.BusinessType( mappingProduct.BusinessType() );
-      result.OrganCode( mappingProduct.OrgCode() );
-      result.UnitOfMeasure( mappingProduct.UnitOfMeasureName() );
+      result.BusinessType( mappingProduct.BusinessType() );   
+    }
+    result.InterfaceSourceCode( "Quintiq_" + result.BusinessType() );
+    
+    // 鏍规嵁operation涓棿琛�
+    if( isnull( mappingOperation ) ) {
+      result.OrgId( "鏆傛棤" );
+      result.OrganCode( "鏆傛棤" );
+      result.OrganName( "鏆傛棤" );
+      result.DestinationOrganizationID( "鏆傛棤" );
+    } else {
+      result.OrgId( mappingOperation.OrganId() );
+      result.OrganCode( mappingOperation.OrganCode() );
+      result.OrganName( mappingOperation.OrganName() );
+      result.DestinationOrganizationID( mappingOperation.DestinationOrganizationId() );
     }
     
     // 鏍规嵁渚涘簲鍟嗚兘鍔涗腑闂磋〃
-    result.ProviderCode( mappingProviderCapacity );
-    result.ProductName( mappingProviderCapacity );
-    result.LeadTime( 0.0 );
+    if( isnull( mappingProviderCapacity ) ) {
+      result.ProviderCode( "鏆傛棤" );
+      result.ProviderName( "鏆傛棤" );
+      result.LeadTime( 0.0 );
+      result.UnitOfMeasure( "鏆傛棤" );
+    } else {
+      result.ProviderCode( "鏆傛棤" );
+      result.ProviderName( mappingProviderCapacity.ProviderName() );
+      result.LeadTime( mappingProviderCapacity.LeadTime() );
+      result.UnitOfMeasure( mappingProviderCapacity.UnitOfMeasureName() );
+    }
     
     // 鏍规嵁erp鎺ュ彛 鍥哄畾鍊�
     result.RequisitionType( "PURCHASE" );
@@ -76,21 +94,25 @@
     result.LineTypeId( "1" );
     result.LineType( "璐х墿" );
     // 鏍规嵁erp鎺ュ彛 todo
-    result.PreparerId( erpData );
-    result.HeaderDescription( erpData );
-    result.DestinationOrganizationID( erpData );
-    result.DeliverToRequestorId( erpData );
-    result.LineAttribute1( erpData );
-    result.LineAttribute6( erpData );
-    result.OrgId( erpData );
+    result.LineAttribute1( "" );
+    result.LineAttribute3( "" );
+    result.LineAttribute6( "" );
     
-    // 鐢熸垚id todo
-    result.DataID( [String]Number::Random( Number::MinNumber(), Number::MaxNumber() ) );
+    // 鐢ㄦ埛id/name
+    result.PreparerId( userId );
+    result.HeaderDescription( userId );
+    result.DeliverToRequestorId( result.PreparerId() );
+    
+    // 鐢熸垚id
+    cnv := DateTimeToString::StandardConverter();
+    cnv.SetCustomConversion();
+    cnv.CustomFormatString( "yyyyMMdd_H:mm:ss" );
+    result.DataID( cnv.Convert( DateTime::ActualTime() ) + "_" + [String]Number::Random( Number::MinNumber(), Number::MaxNumber() ) );
     
     // 鍙戦�佷俊鎭�
-    result.SendStatus( "" );
-    result.SendBy( "" );
-    result.SendTime( DateTime::MinDateTime() );
+    result.PRReleaseStatus( "" );
+    result.CreateBy( "" );
+    result.CreateTime( DateTime::MinDateTime() );
     
     return result;
   *]
diff --git a/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning.qbl b/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning.qbl
index f011f1d..7c5d308 100644
--- a/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning.qbl
+++ b/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning.qbl
@@ -3,15 +3,11 @@
 StaticMethod FromSupplyPlanning (
   GlobalOTDTable otdTable,
   MacroPlan macroPlan,
-  MacroPlan mappingRoot,
-  String mrpCalverNo
+  String mrpCalverNo,
+  String userId
 )
 {
-  Description:
-  [*
-    SupplyPlanning杞琍RData
-    todo 淇敼mappingRoot涓篗PSync
-  *]
+  Description: 'SupplyPlanning杞琍RData'
   TextBody:
   [*
     // yypsybs Sep-12-2023 (created)
@@ -21,7 +17,7 @@
     if( isnull( oldRecords ) or oldRecords.Size() = 0 ) {
       pispips := ProductInStockingPointInPeriod::GetByMRPCalverNo( macroPlan, mrpCalverNo );
       traverse( pispips, Elements, item, item.NewSupplyQuantity() > 0 ) {
-        PRData::FromSupplyPlanning( otdTable, macroPlan, mappingRoot, item );
+        PRData::FromSupplyPlanning( otdTable, macroPlan, item, userId );
       }
     }
   *]
diff --git a/_Main/BL/Type_PRData/StaticMethod_ProductIdOver14Days.qbl b/_Main/BL/Type_PRData/StaticMethod_ProductIdOver14Days.qbl
index 07623b4..4480363 100644
--- a/_Main/BL/Type_PRData/StaticMethod_ProductIdOver14Days.qbl
+++ b/_Main/BL/Type_PRData/StaticMethod_ProductIdOver14Days.qbl
@@ -10,7 +10,7 @@
     result := "";
     
     productIds := selectuniquevalues( toChecks, Elements, item, 
-                                      (item.ProduceRequiredDate() - Duration::Days( 14 )).Date() > Date::Today() and item.SendStatus() = "", 
+                                      (item.DeliveryDate() - Duration::Days( 14 )).Date() > Date::Today() and item.PRReleaseStatus() = "", 
                                       item.ProductID() ); 
     productIds := selectsortedset( productIds, Elements, item, item );
     
diff --git a/_Main/BL/Type_PRData/StaticMethod_TestData.qbl b/_Main/BL/Type_PRData/StaticMethod_TestData.qbl
index 0cbffa7..9a07ba5 100644
--- a/_Main/BL/Type_PRData/StaticMethod_TestData.qbl
+++ b/_Main/BL/Type_PRData/StaticMethod_TestData.qbl
@@ -6,23 +6,23 @@
 {
   TextBody:
   [*
-    // yypsybs Sep-12-2023 (created)
-    if( selectset( macroPlan, PRData, item, true ).Size() = 0 ) {
-      info( "======== Create PR Test Data ========" );
-      for( i := 0; i < 100; i := i + 1 ) {
-        macroPlan.PRData( relnew,
-                          MRPCalverNo := [String]Number::Random( 1, Number::MaxNumber() ),
-                          BusinessType := [String]Number::Random( 1, Number::MaxNumber() ),
-                          OrganCode := [String]Number::Random( 1, Number::MaxNumber() ),
-                          ProductID := [String]Number::Random( 1, Number::MaxNumber() ),
-                          StockingPointID := [String]Number::Random( 1, Number::MaxNumber() ),
-                          Quantity := Number::Random( 1, Number::MaxNumber() ),
-                          ProduceRequiredDate := Date::Construct( 2023,
-                                                                  Number::Random( 9, 12 ),
-                                                                  Number::Random( 13, 28 ) ),
-                          DataID := [String]Number::Random( 1, Number::MaxNumber() ), 
-                          SendStatus := ifexpr( Number::Random( 1, 5 ) = 1, "宸插彂閫�", "" ) );     
-      }
-    }
+    //// yypsybs Sep-12-2023 (created)
+    //if( selectset( macroPlan, PRData, item, true ).Size() = 0 ) {
+    //  info( "======== Create PR Test Data ========" );
+    //  for( i := 0; i < 100; i := i + 1 ) {
+    //    macroPlan.PRData( relnew,
+    //                      MRPCalverNo := [String]Number::Random( 1, Number::MaxNumber() ),
+    //                      BusinessType := [String]Number::Random( 1, Number::MaxNumber() ),
+    //                      OrganCode := [String]Number::Random( 1, Number::MaxNumber() ),
+    //                      ProductID := [String]Number::Random( 1, Number::MaxNumber() ),
+    //                      StockingPointID := [String]Number::Random( 1, Number::MaxNumber() ),
+    //                      Quantity := Number::Random( 1, Number::MaxNumber() ),
+    //                      DeliveryDate := Date::Construct( 2023,
+    //                                                              Number::Random( 9, 12 ),
+    //                                                              Number::Random( 13, 28 ) ),
+    //                      DataID := [String]Number::Random( 1, Number::MaxNumber() ), 
+    //                      PRReleaseStatus := ifexpr( Number::Random( 1, 5 ) = 1, "宸插彂閫�", "" ) );     
+    //  }
+    //}
   *]
 }
diff --git "a/_Main/BL/Type_PRHistoryData/Attribute_DeliveryDate\043168.qbl" "b/_Main/BL/Type_PRHistoryData/Attribute_DeliveryDate\043168.qbl"
new file mode 100644
index 0000000..0df18fa
--- /dev/null
+++ "b/_Main/BL/Type_PRHistoryData/Attribute_DeliveryDate\043168.qbl"
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DeliveryDate
+{
+  #keys: '3[414384.0.795671764][414384.0.795671763][414384.0.795671765]'
+  Description: '闇�姹傛棩鏈�/浜よ揣鏃ユ湡'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PRHistoryData/Attribute_PreparerID.qbl b/_Main/BL/Type_PRHistoryData/Attribute_PreparerID.qbl
deleted file mode 100644
index 02d0158..0000000
--- a/_Main/BL/Type_PRHistoryData/Attribute_PreparerID.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute PreparerID
-{
-  #keys: '3[414384.0.789498615][414384.0.789498614][414384.0.789498616]'
-  ValueType: String
-}
diff --git "a/_Main/BL/Type_PRHistoryData/Attribute_PreparerId\043603.qbl" "b/_Main/BL/Type_PRHistoryData/Attribute_PreparerId\043603.qbl"
index f668e7c..b106955 100644
--- "a/_Main/BL/Type_PRHistoryData/Attribute_PreparerId\043603.qbl"
+++ "b/_Main/BL/Type_PRHistoryData/Attribute_PreparerId\043603.qbl"
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
 #parent: #root
-Attribute PreparerId
+Attribute PreparerID
 {
   #keys: '3[414384.0.795671570][414384.0.795671569][414384.0.795671571]'
   ValueType: String
diff --git "a/_Main/BL/Type_PRHistoryData/Attribute_ProduceRequiredDate\043168.qbl" "b/_Main/BL/Type_PRHistoryData/Attribute_ProduceRequiredDate\043168.qbl"
deleted file mode 100644
index 56336a7..0000000
--- "a/_Main/BL/Type_PRHistoryData/Attribute_ProduceRequiredDate\043168.qbl"
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute ProduceRequiredDate
-{
-  #keys: '3[414384.0.795671764][414384.0.795671763][414384.0.795671765]'
-  Description: '闇�姹傛棩鏈�/浜よ揣鏃ユ湡'
-  ValueType: Date
-}
diff --git a/_Main/BL/Type_PRHistoryData/StaticMethod_ExportTheFileStream.qbl b/_Main/BL/Type_PRHistoryData/StaticMethod_ExportTheFileStream.qbl
index dea5e41..edd753d 100644
--- a/_Main/BL/Type_PRHistoryData/StaticMethod_ExportTheFileStream.qbl
+++ b/_Main/BL/Type_PRHistoryData/StaticMethod_ExportTheFileStream.qbl
@@ -42,7 +42,7 @@
     traverse ( toExportList, Elements, toExport ) {
       PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductID(), "闆朵欢鍙�" );
       PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductName(), "闆朵欢鍚嶇О" );
-      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, ifexpr( toExport.ProduceRequiredDate() = Date::MinDate(), "", dateToString.Convert( toExport.ProduceRequiredDate() ) ), "浜よ揣鏃ユ湡" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, ifexpr( toExport.DeliveryDate() = Date::MinDate(), "", dateToString.Convert( toExport.DeliveryDate() ) ), "浜よ揣鏃ユ湡" );
       PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.Quantity(), "闇�姹傛暟閲�" );
       PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.MRPCalverNo(), "MRP璁$畻鐗堟湰鍙�" );
       PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.BusinessType(), "浜嬩笟閮�" );
diff --git a/_Main/BL/Type_PRHistoryData/StaticMethod_ProductIdOver14Days.qbl b/_Main/BL/Type_PRHistoryData/StaticMethod_ProductIdOver14Days.qbl
index 5733d45..c732ec7 100644
--- a/_Main/BL/Type_PRHistoryData/StaticMethod_ProductIdOver14Days.qbl
+++ b/_Main/BL/Type_PRHistoryData/StaticMethod_ProductIdOver14Days.qbl
@@ -10,7 +10,7 @@
     result := "";
     
     productIds := selectuniquevalues( toChecks, Elements, item, 
-                                      (item.ProduceRequiredDate() - Duration::Days( 14 )).Date() > Date::Today() and item.SendStatus() = "", 
+                                      (item.DeliveryDate() - Duration::Days( 14 )).Date() > Date::Today() and item.SendStatus() = "", 
                                       item.ProductID() ); 
     productIds := selectsortedset( productIds, Elements, item, item );
     
diff --git a/_Main/BL/Type_ProductInStockingPointInPeriod/StaticMethod_GetByMRPCalverNo.qbl b/_Main/BL/Type_ProductInStockingPointInPeriod/StaticMethod_GetByMRPCalverNo.qbl
index 482800c..9969b74 100644
--- a/_Main/BL/Type_ProductInStockingPointInPeriod/StaticMethod_GetByMRPCalverNo.qbl
+++ b/_Main/BL/Type_ProductInStockingPointInPeriod/StaticMethod_GetByMRPCalverNo.qbl
@@ -12,14 +12,16 @@
     result := construct( ProductInStockingPointInPeriods );
     if( mrpCalverNo <> "" ) {
       result := selectset( parent, Product_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, pispip,
-                         pispip.ProductInStockingPoint_MP().Product_MP().ID().StartsWith( "E" )
-                         and pispip.MRPCalverNo() = mrpCalverNo 
+                           pispip.ProductInStockingPoint_MP().Product_MP().ID().StartsWith( "E" )
+                           and pispip.MRPCalverNo() = mrpCalverNo 
                            );
     } else {
+      // 娴嬭瘯鐢ㄩ�昏緫锛屾甯镐笉搴旇璧�
       result := selectset( parent, Product_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, pispip,
-                         true
+                           true
                            );
     }
+    info( "GetByMRPCalverNo : " + [String]result.Size() );
     return &result;
   *]
 }
diff --git a/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Response_TIANMA_JITUAN_mbMainMenu_MenuDoSync_OnClick.def b/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Response_TIANMA_JITUAN_mbMainMenu_MenuDoSync_OnClick.def
index 6253182..5009e48 100644
--- a/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Response_TIANMA_JITUAN_mbMainMenu_MenuDoSync_OnClick.def
+++ b/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Response_TIANMA_JITUAN_mbMainMenu_MenuDoSync_OnClick.def
@@ -5,7 +5,7 @@
   #keys: '[414384.0.605664178]'
   Body:
   [*
-    MacroPlan::DoSync( MacroPlan,false,false);
+    //MacroPlan::DoSync( MacroPlan,false,false);
   *]
   DefinitionID: 'Responsedef_Menu_OnClick'
   Precondition:
diff --git a/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def b/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def
index e164af9..5d184e4 100644
--- a/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def
+++ b/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def
@@ -5,7 +5,11 @@
   #keys: '[414702.0.340554926]'
   Body:
   [*
-    CapacityAllocationResults::CreateDate( GlobalOTDTable, MacroPlan, SelectionScenario.Data() );
+    //CapacityAllocationResults::CreateDate( GlobalOTDTable, MacroPlan, SelectionScenario.Data() );
+    
+    //CapacityAllocationResultsRuleConfiguration::AutomaticallyGenerateCapacityRules( GlobalOTDTable, MacroPlan );
+    
+    CapacityAllocationResults::Test( MacroPlan );
   *]
   CanBindMultiple: false
   DefinitionID: 'Responsedef_GUIButtonBase_OnClick'
diff --git a/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button884_OnClick.def b/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button884_OnClick.def
new file mode 100644
index 0000000..c25a822
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button884_OnClick.def
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: Button884
+Response OnClick () id:Response_FormTestButtonCollection_Button884_OnClick
+{
+  #keys: '[414702.1.33954101]'
+  Body:
+  [*
+    CapacityAllocationResultsRuleConfiguration::Test( MacroPlan );
+  *]
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_GUIButtonBase_OnClick'
+}
diff --git a/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/_ROOT_Component_FormTestButtonCollection.def b/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/_ROOT_Component_FormTestButtonCollection.def
index 53a8703..e4d9281 100644
--- a/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/_ROOT_Component_FormTestButtonCollection.def
+++ b/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/_ROOT_Component_FormTestButtonCollection.def
@@ -11,6 +11,7 @@
     Columns:
     [
       GBFlow.Column { grow: 0 id: 454 parent: 0 }
+      GBFlow.Column { grow: 0 id: 968 parent: 0 }
     ]
     Elements:
     [
@@ -18,6 +19,11 @@
       {
         Component => Button398
         Position { startcolumn: 454 startrow: 649 endcolumn: 454 endrow: 649 }
+      }
+      GBElement
+      {
+        Component => Button884
+        Position { startcolumn: 968 startrow: 649 endcolumn: 968 endrow: 649 }
       }
     ]
     Gaps: [ left: 5 right: 5 top: 5 bottom: 5 inner: 5 ]
@@ -35,7 +41,19 @@
       Properties:
       [
         Image: 'HARDHAT'
+        LayoutGroup: 'Button'
         Text: '鐢熸垚浜ц兘鍒嗛厤缁撴灉鏁版嵁'
+      ]
+    }
+    Component Button884
+    {
+      #keys: '[414702.1.33954049]'
+      BaseType: 'Button'
+      Properties:
+      [
+        Image: 'CAKE_SLICE'
+        LayoutGroup: 'Button'
+        Text: '鏍规嵁鎴愬搧鐢熸垚鐗╂枡'
       ]
     }
   ]
@@ -46,5 +64,10 @@
     IncludeInView: true
     Title: '鍔熻兘娴嬭瘯鎸夐挳'
     Width: 535
+    ModeledStringList ChildOrdering
+    {
+      c: Button398
+      c: Button884
+    }
   ]
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupInventoryViews\043981.def" "b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupInventoryViews\043981.def"
new file mode 100644
index 0000000..cd385bb
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupInventoryViews\043981.def"
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+Component ActionBarGroupInventoryViews #extension
+{
+  Children:
+  [
+    Component ButtonMaterialLabelingPlanningStrategy
+    {
+      #keys: '[414702.1.16631997]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'FISH_BOWL'
+        Label: '鐗╂枡鏍囩'
+        Taborder: 4
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupPlanViews.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupPlanViews.def
new file mode 100644
index 0000000..af02447
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupPlanViews.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+Component ActionBarGroupPlanViews #extension
+{
+  Children:
+  [
+    Component ButtonOrderLockAndUnlock
+    {
+      #keys: '[414702.1.15778581]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'DOCUMENT_LOCK'
+        Label: '璁㈠崟閿佸畾&瑙i攣'
+        Taborder: 8
+      ]
+    }
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupSalesViews\043633.def" "b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupSalesViews\043633.def"
index b9da9db..71b9352 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupSalesViews\043633.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupSalesViews\043633.def"
@@ -7,10 +7,6 @@
     {
       #keys: '[414382.0.436830247]'
       BaseType: 'WebButton'
-      Children:
-      [
-        #child: ContextMenuSalesFillingCapacity
-      ]
       Properties:
       [
         Image: 'BLOT'
@@ -29,5 +25,16 @@
         Taborder: 4
       ]
     }
+    Component ButtonOffsetting
+    {
+      #keys: '[414702.1.20970764]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'PRICE_STICKER'
+        Label: '鍐插噺'
+        Taborder: 5
+      ]
+    }
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageInventory.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageInventory.def
new file mode 100644
index 0000000..f003691
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageInventory.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component ActionBarPageInventory #extension
+{
+  Children:
+  [
+    #child: ActionBarGroupInventoryViews
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPagePlan.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPagePlan.def
new file mode 100644
index 0000000..cde4c13
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPagePlan.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component ActionBarPagePlan #extension
+{
+  Children:
+  [
+    #child: ActionBarGroupPlanViews
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuSalesFillingCapacity.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuSalesFillingCapacity.def
deleted file mode 100644
index 0aae48c..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuSalesFillingCapacity.def
+++ /dev/null
@@ -1,49 +0,0 @@
-Quintiq file version 2.0
-Component ContextMenuSalesFillingCapacity
-{
-  #keys: '[414382.0.437003283]'
-  BaseType: 'WebContextMenu'
-  Children:
-  [
-    Component MenuSalesFillingCapacity
-    {
-      #keys: '[414382.0.437003284]'
-      BaseType: 'WebMenu'
-      Properties:
-      [
-        Image: 'ELEMENT_BLUE'
-        Taborder: 0
-        Title: '澶栧崠CELL'
-        Tooltip: '澶栧崠CELL'
-      ]
-    }
-    Component MenuSalesFillingSchemeDetail
-    {
-      #keys: '[414382.0.436840646]'
-      BaseType: 'WebMenu'
-      Properties:
-      [
-        Image: 'ELEMENT_ORANGE'
-        Taborder: 1
-        Title: '濉骇鏂规鍒楄〃'
-        Tooltip: '濉骇鏂规鍒楄〃'
-      ]
-    }
-    Component MenuSalesFillingSchemeHistorical
-    {
-      #keys: '[414382.0.455751651]'
-      BaseType: 'WebMenu'
-      Properties:
-      [
-        Image: 'ELEMENT_ORANGE'
-        Taborder: 2
-        Title: '濉骇鍘嗗彶璁㈠崟鍒楄〃'
-        Tooltip: '濉骇鍘嗗彶璁㈠崟鍒楄〃'
-      ]
-    }
-  ]
-  Properties:
-  [
-    Taborder: 0
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgTest.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgTest.def
index e7f2aa2..a28e4bb 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgTest.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgTest.def
@@ -5,13 +5,17 @@
   BaseType: 'WebActionBarGroup'
   Children:
   [
-    Component btnTest
+    Component btnTestAttempt
     {
-      #keys: '[414702.0.358311907]'
+      #keys: '[414502.0.409422371]'
       BaseType: 'WebButton'
+      Children:
+      [
+        #child: cmTestAttempt
+      ]
       Properties:
       [
-        Image: 'WATER_FISH'
+        Image: 'ANTENNA'
         Label: '娴嬭瘯瑙嗗浘'
         Taborder: 0
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def
new file mode 100644
index 0000000..9dd6fd4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def
@@ -0,0 +1,78 @@
+Quintiq file version 2.0
+Component cmTestAttempt
+{
+  #keys: '[414502.0.409457922]'
+  BaseType: 'WebContextMenu'
+  Children:
+  [
+    Component mnCapacityAllocationAndProductionFilling
+    {
+      #keys: '[414502.0.409457923]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'WATER_FISH'
+        Taborder: 0
+        Title: '浜ц兘鍒嗛厤'
+      ]
+    }
+    Component mnAnnualProductionAndSalesReview
+    {
+      #keys: '[414502.0.409488417]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PIG'
+        Taborder: 5
+        Title: '骞村害浜ч攢澶嶇洏'
+      ]
+    }
+    Component mnPanelPullingMaterialOperationsOfEachBusinessUnit
+    {
+      #keys: '[414702.1.5481991]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'BANANA'
+        Taborder: 1
+        Title: '闈㈡澘鎷夋枡_浜嬩笟閮ㄦ搷浣�'
+      ]
+    }
+    Component mnPanelPullingMaterialGroupOperations
+    {
+      #keys: '[414702.1.5522564]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'CLIENT_NETWORK'
+        Taborder: 2
+        Title: '闈㈡澘鎷夋枡_闆嗗洟鎿嶄綔'
+      ]
+    }
+    Component mn224
+    {
+      #keys: '[414702.1.5593849]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Separator: true
+        Taborder: 4
+      ]
+    }
+    Component mnDockingERPForPRRelease
+    {
+      #keys: '[414702.1.5920760]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'BEER_GLASS'
+        Taborder: 3
+        Title: '瀵规帴ERP杩涜PR閲婃斁'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupInventoryViews_ButtonMaterialLabelingPl.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupInventoryViews_ButtonMaterialLabelingPl.def
new file mode 100644
index 0000000..3422aba
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupInventoryViews_ButtonMaterialLabelingPl.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupInventoryViews/ButtonMaterialLabelingPlanningStrategy
+Response OnClick () id:Response_TIANMA_JITUAN_ActionBarGroupInventoryViews_ButtonMaterialLabelingPlanningStrategy_OnClick
+{
+  #keys: '[414702.1.19527712]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "鐗╂枡鏍囩_璁″垝绛栫暐", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupPlanViews_ButtonOrderLockAndUnlock_OnCl.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupPlanViews_ButtonOrderLockAndUnlock_OnCl.def
new file mode 100644
index 0000000..af7fe50
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupPlanViews_ButtonOrderLockAndUnlock_OnCl.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupPlanViews/ButtonOrderLockAndUnlock
+Response OnClick () id:Response_TIANMA_JITUAN_ActionBarGroupPlanViews_ButtonOrderLockAndUnlock_OnClick
+{
+  #keys: '[414702.1.14334079]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "璁㈠崟閿佸畾_瑙i攣", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupSalesViews_ButtonOffsetting_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupSalesViews_ButtonOffsetting_OnClick.def
new file mode 100644
index 0000000..5a7dc8d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupSalesViews_ButtonOffsetting_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupSalesViews/ButtonOffsetting
+Response OnClick () id:Response_TIANMA_JITUAN_ActionBarGroupSalesViews_ButtonOffsetting_OnClick
+{
+  #keys: '[414702.1.22310683]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "鍐插噺", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupSalesViews_ButtonSalesFillingCapacity_O.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupSalesViews_ButtonSalesFillingCapacity_O.def
new file mode 100644
index 0000000..21b1e4c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupSalesViews_ButtonSalesFillingCapacity_O.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupSalesViews/ButtonSalesFillingCapacity
+Response OnClick () id:Response_TIANMA_JITUAN_ActionBarGroupSalesViews_ButtonSalesFillingCapacity_OnClick
+{
+  #keys: '[414702.1.55424758]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "濉骇", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingCapac.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingCapac.def
deleted file mode 100644
index 73a0e05..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingCapac.def
+++ /dev/null
@@ -1,18 +0,0 @@
-Quintiq file version 2.0
-#parent: ContextMenuSalesFillingCapacity/MenuSalesFillingCapacity
-Response OnClick () id:Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingCapacity_OnClick
-{
-  #keys: '[414382.0.437390498]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebMenu_OnClick'
-  QuillAction
-  {
-    Body:
-    [*
-      // Open view
-      //ApplicationMacroPlanner.OpenView( 'FillingCapacityOrder', ButtonSalesFillingCapacity );
-      ApplicationScope.ViewManager().ResetUserViewById( "FillingCapacityOrder",true);
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingS\043360.def" "b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingS\043360.def"
deleted file mode 100644
index 067c423..0000000
--- "a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingS\043360.def"
+++ /dev/null
@@ -1,17 +0,0 @@
-Quintiq file version 2.0
-#parent: ContextMenuSalesFillingCapacity/MenuSalesFillingSchemeHistorical
-Response OnClick () id:Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingSchemeHistorical_OnClick
-{
-  #keys: '[414382.0.455751650]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebMenu_OnClick'
-  QuillAction
-  {
-    Body:
-    [*
-      // Open view
-      ApplicationScope.ViewManager().ResetUserViewById( "FillingCapacityOrderHistorical",true);
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingSchem.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingSchem.def
deleted file mode 100644
index 22b6bc7..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingSchem.def
+++ /dev/null
@@ -1,17 +0,0 @@
-Quintiq file version 2.0
-#parent: ContextMenuSalesFillingCapacity/MenuSalesFillingSchemeDetail
-Response OnClick () id:Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingSchemeDetail_OnClick
-{
-  #keys: '[414382.0.439022595]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebMenu_OnClick'
-  QuillAction
-  {
-    Body:
-    [*
-      // Open view
-      ApplicationScope.ViewManager().ResetUserViewById( "FillingCapacitySchemeList",true);
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_abgTest_btnTest_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_abgTest_btnTest_OnClick.def
deleted file mode 100644
index 8b67882..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_abgTest_btnTest_OnClick.def
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: abgTest/btnTest
-Response OnClick () id:Response_TIANMA_JITUAN_abgTest_btnTest_OnClick
-{
-  #keys: '[414702.0.358346189]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  GroupServerCalls: true
-  QuillAction
-  {
-    Body:
-    [*
-      ApplicationScope.ViewManager().ResetUserViewById( "Test", true );
-    *]
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnAnnualProductionAndSalesReview_OnClic.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnAnnualProductionAndSalesReview_OnClic.def
new file mode 100644
index 0000000..aa266a1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnAnnualProductionAndSalesReview_OnClic.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: cmTestAttempt/mnAnnualProductionAndSalesReview
+Response OnClick () id:Response_TIANMA_JITUAN_cmTestAttempt_mnAnnualProductionAndSalesReview_OnClick
+{
+  #keys: '[414502.0.409488583]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "骞村害浜ч攢澶嶇洏", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnCapacityAllocationAndProductionFillin.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnCapacityAllocationAndProductionFillin.def
new file mode 100644
index 0000000..f2aaa6f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnCapacityAllocationAndProductionFillin.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: cmTestAttempt/mnCapacityAllocationAndProductionFilling
+Response OnClick () id:Response_TIANMA_JITUAN_cmTestAttempt_mnCapacityAllocationAndProductionFilling_OnClick
+{
+  #keys: '[414502.0.409488282]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Test", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnDockingERPForPRRelease_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnDockingERPForPRRelease_OnClick.def
new file mode 100644
index 0000000..23229a5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnDockingERPForPRRelease_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: cmTestAttempt/mnDockingERPForPRRelease
+Response OnClick () id:Response_TIANMA_JITUAN_cmTestAttempt_mnDockingERPForPRRelease_OnClick
+{
+  #keys: '[414702.1.7136407]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "瀵规帴ERP杩涜PR閲婃斁", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialGroupOperations_O.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialGroupOperations_O.def
new file mode 100644
index 0000000..a665175
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialGroupOperations_O.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: cmTestAttempt/mnPanelPullingMaterialGroupOperations
+Response OnClick () id:Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialGroupOperations_OnClick
+{
+  #keys: '[414702.1.5773124]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "闈㈡澘鎷夋枡_闆嗗洟鎿嶄綔", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialOperationsOfEachB.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialOperationsOfEachB.def
new file mode 100644
index 0000000..2fb709c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialOperationsOfEachB.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: cmTestAttempt/mnPanelPullingMaterialOperationsOfEachBusinessUnit
+Response OnClick () id:Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialOperationsOfEachBusinessUnit_OnClick
+{
+  #keys: '[414702.1.4243881]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "闈㈡澘鎷夋枡_鍚勪簨涓氶儴鎿嶄綔", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
index b0bcb6e..4f48b76 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
@@ -12,6 +12,8 @@
         #child: ActionBarPageData
         #child: ActionBarPageSales
         #child: applicationDevelopmentActionBarPageDef_1
+        #child: ActionBarPagePlan
+        #child: ActionBarPageInventory
       ]
     }
     Component DataHolderCapacityAndSaleBudgeFilterItem
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
index b488de3..66ea53b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
@@ -117,6 +117,9 @@
         MacroPlan::DoSync( macroPlanNew, 
                            data.BusinessType(), data.IsKeyProduct(), data.CreatePurchaseSupplyMaterial() ,GlobalOTDTable);
     }
+    macroPlanNew.BusinessType( businesstype );
+    macroPlanNew.IsKeyProduct( data.IsKeyProduct() );
+    macroPlanNew.CreatePurchaseSupplyMaterial( data.CreatePurchaseSupplyMaterial() );
     
     this.Close();
   *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Component_pnlContent.def
index f2ee867..2d639ef 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Component_pnlContent.def
@@ -277,6 +277,7 @@
       BaseType: 'WebEditField'
       Properties:
       [
+        DataBinding: 'DataHolderFillingCapacityOrder.Data.CustomerID'
         Label: 'Customer ID'
         Taborder: 12
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
index bf61706..34b2cb2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
@@ -30,6 +30,7 @@
                                         SalesSegmentName   := guard( ddlSalesSegment.Data().Name(), "null" ),
                                         StockingPointID    := guard( ddlStockingPoint_MP.Data().ID(), "null" ),
                                         Customer           := efCustomerName.Text(),
+                                        CustomerID         := efCustomID.Text(),
                                         Quantity           := [Real]edtQuantity.Text(),
                                         UnitOfMeasureName  := ddlUnitOfMeasure_MP.Data().Name(),
                                         ForecastDemandDate := dsForecastDemandDate.Date(),
@@ -44,6 +45,7 @@
         data.SalesSegmentName( guard( ddlSalesSegment.Data().Name(), "null" ) );
         data.StockingPointID( guard( ddlStockingPoint_MP.Data().ID(), "null" ) );
         data.Customer( efCustomerName.Text() );
+        data.CustomerID( efCustomID.Text() );
         data.Quantity( [Real]edtQuantity.Text() );
         data.UnitOfMeasureName( ddlUnitOfMeasure_MP.Data().Name() );
         data.ForecastDemandDate( dsForecastDemandDate.Date() );
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_ListPRData\043844.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_ListPRData\043844.def"
index 532ab58..71d7cf7 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_ListPRData\043844.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_ListPRData\043844.def"
@@ -27,7 +27,7 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductName","title":"ProductName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsPannelMaterial","title":"IsPannelMaterial","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsPannelMaterial"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProduceRequiredDate","title":"ProduceRequiredDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProduceRequiredDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PRSuggestionDate","title":"PRSuggestionDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PRSuggestionDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MRPCalverNo","title":"MRPCalverNo","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MRPCalverNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrganCode","title":"OrganCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrganCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsLongLeadItem","title":"IsLongLeadItem","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsLongLeadItem"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsGenericMaterial","title":"IsGenericMaterial","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsGenericMaterial"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaterialMRPType","title":"MaterialMRPType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaterialMRPType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LeadTime","title":"LeadTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LeadTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProviderCode","title":"ProviderCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProviderCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProviderName","title":"ProviderName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProviderName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasure","title":"UnitOfMeasure","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasure"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SendStatus","title":"SendStatus","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SendStatus"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SendTimeString","title":"SendTimeString","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"SendTimeString"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SendBy","title":"SendBy","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SendBy"}}]'
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductName","title":"ProductName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DeliveryDate","title":"DeliveryDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DeliveryDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PRSuggestionDate","title":"PRSuggestionDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PRSuggestionDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MRPCalverNo","title":"MRPCalverNo","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MRPCalverNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrganCode","title":"OrganCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrganCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsLongLeadItem","title":"IsLongLeadItem","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsLongLeadItem"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsGenericMaterial","title":"IsGenericMaterial","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsGenericMaterial"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaterialMRPType","title":"MaterialMRPType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaterialMRPType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LeadTime","title":"LeadTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LeadTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProviderCode","title":"ProviderCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProviderCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProviderName","title":"ProviderName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProviderName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasure","title":"UnitOfMeasure","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasure"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PRReleaseStatus","title":"PRReleaseStatus","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PRReleaseStatus"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CreateTimeString","title":"CreateTimeString","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"CreateTimeString"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CreateBy","title":"CreateBy","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CreateBy"}}]'
         ContextMenu: 'listContextMenuPRData'
         SortCriteria: 'BusinessType;MRPCalverNo'
         Taborder: 1
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def
index db7b6a3..69a46cd 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def
@@ -7,7 +7,7 @@
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
   [*
-    return not isnull( GlobalOTDTable );
+    return not isnull( GlobalOTDTable ) and not isnull( MacroPlan );
   *]
   QuillAction
   {
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 0c4edde..7962175 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonLoad_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonLoad_OnClick.def
@@ -5,12 +5,16 @@
   #keys: '[414384.0.859141084]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
   QuillAction
   {
     Body:
     [*
       MacroPlan.PRData( relflush );
-      PRData::FromSupplyPlanning( GlobalOTDTable, MacroPlan, MacroPlan, "" );
+      PRData::FromSupplyPlanning( GlobalOTDTable, MacroPlan, "", ApplicationMacroPlanner.GetUserName() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_PanelImportAndExport.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_PanelImportAndExport.def
index 367ca52..654b259 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_PanelImportAndExport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_PanelImportAndExport.def
@@ -27,6 +27,18 @@
         Taborder: 1
       ]
     }
+    Component AutomaticallyGenerate
+    {
+      #keys: '[414702.1.14342122]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'CAR_CYAN'
+        Label: '鑷姩鐢熸垚瑙勫垯'
+        Taborder: 2
+        Visible: false
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_listContextMenuCapacityAllocationResultsRuleConfiguration.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_listContextMenuCapacityAllocationResultsRuleConfiguration.def
index 597ad1b..594eaef 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_listContextMenuCapacityAllocationResultsRuleConfiguration.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_listContextMenuCapacityAllocationResultsRuleConfiguration.def
@@ -51,6 +51,27 @@
         Title: '鍏ㄩ��'
       ]
     }
+    Component Menu666
+    {
+      #keys: '[414702.1.55207187]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Separator: true
+        Taborder: 7
+      ]
+    }
+    Component MenuAutoCreate
+    {
+      #keys: '[414702.1.55207442]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'COMPONENT'
+        Taborder: 8
+        Title: '鑷姩鍒涘缓瑙勫垯'
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_AutomaticallyGenerate_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_AutomaticallyGenerate_OnClick.def
new file mode 100644
index 0000000..b8a5c2e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_AutomaticallyGenerate_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelImportAndExport/AutomaticallyGenerate
+Response OnClick () id:Response_PanelImportAndExport_AutomaticallyGenerate_OnClick
+{
+  #keys: '[414702.1.14304989]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      CapacityAllocationResultsRuleConfiguration::AutomaticallyGenerateCapacityAllocationResults( GlobalOTDTable, MacroPlan );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_listContextMenuCapacityAllocationResultsRuleConfiguration_MenuAutoC.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_listContextMenuCapacityAllocationResultsRuleConfiguration_MenuAutoC.def
new file mode 100644
index 0000000..c4e09ed
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_listContextMenuCapacityAllocationResultsRuleConfiguration_MenuAutoC.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: listContextMenuCapacityAllocationResultsRuleConfiguration/MenuAutoCreate
+Response OnClick () id:Response_listContextMenuCapacityAllocationResultsRuleConfiguration_MenuAutoCreate_OnClick
+{
+  #keys: '[414702.1.55268133]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  Precondition:
+  [*
+    return not isnull( MacroPlan ) and not isnull( GlobalOTDTable );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      //CapacityAllocationResultsRuleConfiguration::AutomaticallyGenerateRule( MacroPlan, GlobalOTDTable );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
index 452f77b..4af954a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
@@ -11,11 +11,11 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'MPSync'
-        FixedFilter: 'object.YearNo() = Date::ActualDate().Year()'
-        Source: 'MPSync'
+        DataType: 'GlobalOTDTable'
+        FixedFilter: '[Number]object.YearNo() = Date::ActualDate().Year()'
+        Source: 'GlobalOTDTable'
         Taborder: 0
-        Transformation: 'MappingCapacityAndSaleBudge'
+        Transformation: 'Global_MappingAnnualBudgetData'
       ]
     }
     #child: listActionBarPageCapacityAndSaleBudge
@@ -29,9 +29,9 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Deleted","title":"Deleted","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Deleted"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"YearNo","title":"YearNo","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"YearNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrgCode","title":"OrgCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrgCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayTechnology","title":"DisplayTechnology","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DisplayTechnology"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LineAndSpecification","title":"LineAndSpecification","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LineAndSpecification"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductCode","title":"ProductCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlaceOfProductionOfArray","title":"PlaceOfProductionOfArray","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlaceOfProductionOfArray"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlaceOfProductionOfEvaporation","title":"PlaceOfProductionOfEvaporation","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlaceOfProductionOfEvaporation"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Resolution","title":"Resolution","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Resolution"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ShippingForm","title":"ShippingForm","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ShippingForm"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NumberOfCut","title":"NumberOfCut","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NumberOfCut"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityEquivalent","title":"CapacityEquivalent","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityEquivalent"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NumberOfMask","title":"NumberOfMask","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NumberOfMask"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth1","title":"CapacityInPCSInMonth1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth2","title":"CapacityInPCSInMonth2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth3","title":"CapacityInPCSInMonth3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth4","title":"CapacityInPCSInMonth4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth5","title":"CapacityInPCSInMonth5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth6","title":"CapacityInPCSInMonth6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth7","title":"CapacityInPCSInMonth7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth8","title":"CapacityInPCSInMonth8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth9","title":"CapacityInPCSInMonth9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth10","title":"CapacityInPCSInMonth10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth11","title":"CapacityInPCSInMonth11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth12","title":"CapacityInPCSInMonth12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSTotal","title":"CapacityInPCSTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSTotal"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth1","title":"CapacityInSheetInMonth1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth2","title":"CapacityInSheetInMonth2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth3","title":"CapacityInSheetInMonth3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth4","title":"CapacityInSheetInMonth4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth5","title":"CapacityInSheetInMonth5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth6","title":"CapacityInSheetInMonth6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth7","title":"CapacityInSheetInMonth7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth8","title":"CapacityInSheetInMonth8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth9","title":"CapacityInSheetInMonth9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth10","title":"CapacityInSheetInMonth10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth11","title":"CapacityInSheetInMonth11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth12","title":"CapacityInSheetInMonth12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetTotal","title":"CapacityInSheetTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetTotal"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth1","title":"SaleAmountInMonth1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth2","title":"SaleAmountInMonth2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth3","title":"SaleAmountInMonth3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth5","title":"SaleAmountInMonth5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth4","title":"SaleAmountInMonth4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth6","title":"SaleAmountInMonth6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth7","title":"SaleAmountInMonth7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth8","title":"SaleAmountInMonth8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth9","title":"SaleAmountInMonth9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth10","title":"SaleAmountInMonth10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth11","title":"SaleAmountInMonth11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth12","title":"SaleAmountInMonth12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountTotal","title":"SaleAmountTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountTotal"}}]'
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"YearNo","title":"YearNo","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"YearNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayTechSort","title":"DisplayTechSort","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DisplayTechSort"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessSort","title":"BusinessSort","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessSort"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductLineAndSpecification","title":"ProductLineAndSpecification","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductLineAndSpecification"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrgCodeFromBom","title":"OrgCodeFromBom","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrgCodeFromBom"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ResolutionRatio","title":"ResolutionRatio","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ResolutionRatio"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ShippingForm","title":"ShippingForm","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ShippingForm"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CutsNumber","title":"CutsNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CutsNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityEquivalent","title":"CapacityEquivalent","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityEquivalent"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaskNumber","title":"MaskNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaskNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity1","title":"MonthlyModCapacity1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity2","title":"MonthlyModCapacity2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity3","title":"MonthlyModCapacity3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity4","title":"MonthlyModCapacity4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity5","title":"MonthlyModCapacity5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity6","title":"MonthlyModCapacity6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity7","title":"MonthlyModCapacity7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity8","title":"MonthlyModCapacity8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity9","title":"MonthlyModCapacity9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity10","title":"MonthlyModCapacity10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity11","title":"MonthlyModCapacity11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlyModCapacity12","title":"MonthlyModCapacity12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlyModCapacity12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity1","title":"MonthlySheetCapacity1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity2","title":"MonthlySheetCapacity2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity3","title":"MonthlySheetCapacity3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity4","title":"MonthlySheetCapacity4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity5","title":"MonthlySheetCapacity5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity6","title":"MonthlySheetCapacity6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity7","title":"MonthlySheetCapacity7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity8","title":"MonthlySheetCapacity8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity9","title":"MonthlySheetCapacity9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity10","title":"MonthlySheetCapacity10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity11","title":"MonthlySheetCapacity11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySheetCapacity12","title":"MonthlySheetCapacity12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySheetCapacity12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales1","title":"MonthlySales1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales2","title":"MonthlySales2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales3","title":"MonthlySales3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales4","title":"MonthlySales4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales5","title":"MonthlySales5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales6","title":"MonthlySales6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales7","title":"MonthlySales7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales8","title":"MonthlySales8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales9","title":"MonthlySales9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales10","title":"MonthlySales10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales11","title":"MonthlySales11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MonthlySales12","title":"MonthlySales12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MonthlySales12"}}]'
         ContextMenu: 'listContextMenuCapacityAndSaleBudge'
-        SortCriteria: 'BusinessType;OrgCode;ProductCode'
+        SortCriteria: 'BusinessSort;OrganCode;ProductID'
         Taborder: 2
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def
index 4f195d5..6ff9db2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def
@@ -15,7 +15,7 @@
     [*
       //Application.Download( "骞村害浜ч攢棰勭畻璇︽儏.xlsx", MPSync.CapacityAndSaleBudgeExport().AsBinaryData() );
       
-      base64 := MappingCapacityAndSaleBudge::Export( MPSync );
+      base64 := Global_MappingAnnualBudgetData::Export( GlobalOTDTable );
       Application.Download( "骞村害浜ч攢棰勭畻璇︽儏.xlsx", base64 );
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def
index 9458d5d..e0e1268 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def
@@ -12,7 +12,9 @@
     [*
       MPSync::TestData( MPSync, MacroPlan );
       GlobalOTDTable.InitTestData();
-      MPSync.RefreshCapacityAndSaleBudgeFilter( GlobalOTDTable );
+      GlobalOTDTable.InitTestData( MacroPlan );
+      Global_MappingAnnualBudgetData::SetOrgCodeFromForecast( GlobalOTDTable );
+      GlobalOTDTable.RefreshCapacityAndSaleBudgeFilter( true );
     *]
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
index c481c62..692a6ad 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
@@ -10,7 +10,7 @@
   {
     Body:
     [*
-      CapacityAndSaleBudgeChartElement::TestData( GlobalOTDTable );
+      //CapacityAndSaleBudgeChartElement::TestData( GlobalOTDTable );
       
       GlobalOTDTable.CapacityAndSaleBudgeChart( DataHolderMacroPlansForScenarioComparison.Data(), 
                                                 DropDownSaleOrCapacity.Text(),
@@ -20,9 +20,7 @@
                                                 DataHolderCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.Data(),
                                                 DataHolderCapacityAndSaleBudgeFilterYear.Data(),
                                                 DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
-                                                MPSync, 
-                                                GlobalOTDTable, 
-                                                MacroPlan );
+                                                GlobalOTDTable );
     *]
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def
index 6d37df2..872c802 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def
@@ -18,9 +18,7 @@
                                                   DataHolderCapacityAndSaleBudgeFilterItem.Data(), 
                                                   DataHolderCapacityAndSaleBudgeFilterYear.Data(), 
                                                   DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
-                                                  MPSync, 
-                                                  GlobalOTDTable,
-                                                  MacroPlan );
+                                                  GlobalOTDTable );
     *]
   }
 }
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 0437f14..c240052 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:
     [*
-      MPSync.RefreshCapacityAndSaleBudgeFilter( GlobalOTDTable );
+      GlobalOTDTable.RefreshCapacityAndSaleBudgeFilter( true );
     *]
   }
 }
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 8b48eac..7b8154d 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:
     [*
-      MPSync.RefreshCapacityAndSaleBudgeFilter( GlobalOTDTable );
+      GlobalOTDTable.RefreshCapacityAndSaleBudgeFilter( true );
     *]
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_PanelButton_ButtonTransform_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_PanelButton_ButtonTransform_OnClick.def
index 30c3208..fd6d7b1 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_PanelButton_ButtonTransform_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_PanelButton_ButtonTransform_OnClick.def
@@ -13,7 +13,14 @@
   {
     Body:
     [*
-      CustomerAndForecastOrder::CreateData( MacroPlan );
+      CustomerAndForecastOrder::CreateData( MacroPlan, DataHolderActiveScenario.Data() );
+      
+      message := "鎬昏鍗曚釜鏁帮細"                                                               + 
+                [String]counter( MacroPlan, SalesDemand.astype( CustomerOrder ), cs, true )  + 
+                 "    鎴愬姛杞崲涓暟锛�"                                                         +
+                 [String]counter( MacroPlan, SalesDemand.astype( CustomerOrder ), cs, true )
+      
+      WebMessageBox::Success( message, true );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def
index da696e8..5cc2c95 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
 Component PanelInterfaceOption1
 {
-  #keys: '[414702.0.459752107]'
+  #keys: '[414702.1.37166701]'
   BaseType: 'WebPanel'
   Children:
   [
     Component CheckboxCustomOrder
     {
-      #keys: '[414702.0.459786494]'
+      #keys: '[414702.1.37166702]'
       BaseType: 'WebCheckbox'
       Properties:
       [
@@ -17,17 +17,17 @@
     }
     Component CheckboxForecast
     {
-      #keys: '[414702.0.459501981]'
+      #keys: '[414702.1.37166703]'
       BaseType: 'WebCheckbox'
       Properties:
       [
-        Label: 'Forecast'
+        Label: 'Forecast '
         Taborder: 1
       ]
     }
     Component CheckboxUnitOfMeasure_MP
     {
-      #keys: '[414702.0.500042972]'
+      #keys: '[414702.1.37166704]'
       BaseType: 'WebCheckbox'
       Properties:
       [
@@ -37,7 +37,7 @@
     }
     Component CheckboxSalesSegment_MP
     {
-      #keys: '[414702.0.498882706]'
+      #keys: '[414702.1.37166705]'
       BaseType: 'WebCheckbox'
       Properties:
       [
@@ -47,7 +47,7 @@
     }
     Component CheckboxProduct_MP
     {
-      #keys: '[414702.0.500281942]'
+      #keys: '[414702.1.37166706]'
       BaseType: 'WebCheckbox'
       Properties:
       [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2\043456.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2\043456.def"
deleted file mode 100644
index a089baa..0000000
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2\043456.def"
+++ /dev/null
@@ -1,65 +0,0 @@
-Quintiq file version 2.0
-Component PanelInterfaceOption2
-{
-  #keys: '[414702.0.500233382]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component CheckboxConversionFactor
-    {
-      #keys: '[414702.0.501770364]'
-      BaseType: 'WebCheckbox'
-      Properties:
-      [
-        Label: 'ConversionFactor'
-        Taborder: 0
-      ]
-    }
-    Component CheckboxOperation
-    {
-      #keys: '[414702.0.501791718]'
-      BaseType: 'WebCheckbox'
-      Properties:
-      [
-        Label: 'Operation'
-        Taborder: 1
-      ]
-    }
-    Component CheckboxOperationBOM
-    {
-      #keys: '[414702.0.501742364]'
-      BaseType: 'WebCheckbox'
-      Properties:
-      [
-        Label: 'OperationBOM'
-        Taborder: 2
-      ]
-    }
-    Component CheckboxProductInLane
-    {
-      #keys: '[414702.0.501792106]'
-      BaseType: 'WebCheckbox'
-      Properties:
-      [
-        Label: 'ProductInLane'
-        Taborder: 3
-      ]
-    }
-    Component CheckboxAIPISPIP
-    {
-      #keys: '[414702.0.503110868]'
-      BaseType: 'WebCheckbox'
-      Properties:
-      [
-        Label: 'AIPISPIP'
-        Taborder: 4
-      ]
-    }
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 1
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2.def
new file mode 100644
index 0000000..b767aa5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2.def
@@ -0,0 +1,65 @@
+Quintiq file version 2.0
+Component PanelInterfaceOption2
+{
+  #keys: '[414702.1.37166769]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component CheckboxConversionFactor
+    {
+      #keys: '[414702.1.37166770]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'ConversionFactor'
+        Taborder: 0
+      ]
+    }
+    Component CheckboxOperation
+    {
+      #keys: '[414702.1.37166771]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'Operation '
+        Taborder: 1
+      ]
+    }
+    Component CheckboxOperationBOM
+    {
+      #keys: '[414702.1.37166772]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'OperationBOM'
+        Taborder: 2
+      ]
+    }
+    Component CheckboxProductInLane
+    {
+      #keys: '[414702.1.37166773]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'ProductInLane'
+        Taborder: 3
+      ]
+    }
+    Component CheckboxAIPISPIP
+    {
+      #keys: '[414702.1.37166774]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'AIPISPIP'
+        Taborder: 4
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def
index f48dbeb..2ad0d40 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
 Component PanelInterfaceOption3
 {
-  #keys: '[414702.0.501742781]'
+  #keys: '[414702.1.37166837]'
   BaseType: 'WebPanel'
   Children:
   [
     Component CheckboxInventorySupply
     {
-      #keys: '[414702.0.503576372]'
+      #keys: '[414702.1.37166838]'
       BaseType: 'WebCheckbox'
       Properties:
       [
@@ -17,7 +17,7 @@
     }
     Component CheckboxStockingPointCost
     {
-      #keys: '[414702.0.503748797]'
+      #keys: '[414702.1.37166839]'
       BaseType: 'WebCheckbox'
       Properties:
       [
@@ -27,7 +27,7 @@
     }
     Component CheckboxOperationCost
     {
-      #keys: '[414702.0.503158219]'
+      #keys: '[414702.1.37166840]'
       BaseType: 'WebCheckbox'
       Properties:
       [
@@ -37,7 +37,7 @@
     }
     Component CheckboxDOI_DSI
     {
-      #keys: '[414702.0.503158880]'
+      #keys: '[414702.1.37166841]'
       BaseType: 'WebCheckbox'
       Properties:
       [
@@ -47,7 +47,7 @@
     }
     Component CheckboxCustomerGrade
     {
-      #keys: '[414702.0.503159013]'
+      #keys: '[414702.1.37166842]'
       BaseType: 'WebCheckbox'
       Properties:
       [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def
index f708ac7..1c15894 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
 Component PanelInterfaceOption4
 {
-  #keys: '[414702.0.504229568]'
+  #keys: '[414702.1.37166905]'
   BaseType: 'WebPanel'
   Children:
   [
     Component CheckboxStockingPoint_MP
     {
-      #keys: '[414702.0.501794917]'
+      #keys: '[414702.1.37166906]'
       BaseType: 'WebCheckbox'
       Properties:
       [
@@ -17,7 +17,7 @@
     }
     Component CheckboxCurrency_MP
     {
-      #keys: '[414702.0.504229987]'
+      #keys: '[414702.1.37166907]'
       BaseType: 'WebCheckbox'
       Properties:
       [
@@ -27,7 +27,7 @@
     }
     Component CheckboxCurrencyRate_MP
     {
-      #keys: '[414702.0.503787453]'
+      #keys: '[414702.1.37166908]'
       BaseType: 'WebCheckbox'
       Properties:
       [
@@ -37,17 +37,17 @@
     }
     Component CheckboxLane
     {
-      #keys: '[414702.0.503787560]'
+      #keys: '[414702.1.37166909]'
       BaseType: 'WebCheckbox'
       Properties:
       [
-        Label: 'Lane'
+        Label: 'Lane '
         Taborder: 3
       ]
     }
     Component CheckboxLaneLeg
     {
-      #keys: '[414702.0.503787710]'
+      #keys: '[414702.1.37166910]'
       BaseType: 'WebCheckbox'
       Properties:
       [
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 afeef73..fbb23d2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuCreateShowData_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuCreateShowData_OnClick.def
@@ -10,23 +10,23 @@
   Initiator: 'MenuCreateShowData'
   Precondition:
   [*
-    flag := selection.BrokerName() = "GlobalOTDTable_CustomOrder"
-    
-    if ( not flag ) {
-      feedback := "鏆備笉鏀寔锛侊紒锛�";
-    }
-      
-    return flag;
+    //flag := selection.BrokerName() = "GlobalOTDTable_CustomOrder"
+    //
+    //if ( not flag ) {
+    //  feedback := "鏆備笉鏀寔锛侊紒锛�";
+    //}
+    //  
+    //return flag;
   *]
   QuillAction
   {
     Body:
     [*
-      GlobalOTDTable.Global_ShowRow( relflush );
-      GlobalOTDTable.Global_ShowColumn( relflush );
-      GlobalOTDTable.Global_ShowCell( relflush );
-      
-      Global_ShowCell::ShowData( GlobalOTDTable, selection );
+      //GlobalOTDTable.Global_ShowRow( relflush );
+      //GlobalOTDTable.Global_ShowColumn( relflush );
+      //GlobalOTDTable.Global_ShowCell( relflush );
+      //
+      //Global_ShowCell::ShowData( GlobalOTDTable, selection );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def
index 6dfbdbe..94fce67 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def
@@ -7,7 +7,13 @@
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
   [*
-    return not isnull( GlobalOTDTable );
+    flag := not isnull( GlobalOTDTable );
+    
+    if ( not isnull( GlobalOTDTable ) ) {
+      
+    }
+    
+    return flag;
   *]
   QuillAction
   {
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick.def
index 4596f3c..25b7662 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick.def
@@ -16,7 +16,25 @@
       GlobalOTDTable.SynchronizeDataToMacroPlan( MacroPlan, 
                                                  ApplicationMacroPlanner.GetUserName(),
                                                  CheckboxUnitOfMeasure_MP.Checked(),
-                                                 CheckboxCustomOrder.Checked()
+                                                 CheckboxCustomOrder.Checked(), 
+                                                 CheckboxForecast.Checked(),
+                                                 CheckboxSalesSegment_MP.Checked(),
+                                                 CheckboxProduct_MP.Checked(),
+                                                 CheckboxConversionFactor.Checked(),
+                                                 CheckboxOperation.Checked(),
+                                                 CheckboxOperationBOM.Checked(),
+                                                 CheckboxProductInLane.Checked(),
+                                                 CheckboxAIPISPIP.Checked(),
+                                                 CheckboxInventorySupply.Checked(),
+                                                 CheckboxStockingPointCost.Checked(),
+                                                 CheckboxOperationCost.Checked(),
+                                                 CheckboxDOI_DSI.Checked(),
+                                                 CheckboxCustomerGrade.Checked(),
+                                                 CheckboxStockingPoint_MP.Checked(),
+                                                 CheckboxCurrency_MP.Checked(),
+                                                 CheckboxCurrencyRate_MP.Checked(),
+                                                 CheckboxLane.Checked(),
+                                                 CheckboxLaneLeg.Checked() 
                                                 );
       
       WebMessageBox::Success( "鍚屾鎴愬姛锛�", true );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
index a50ad14..91a9af4 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
@@ -7,12 +7,12 @@
   BaseType: 'WebForm'
   Children:
   [
-    #child: PanelInterfaceOption1
     #child: PanelInterfaceTest
     #child: PanelInterfaceGlobal_BrokerExecuteLog
-    #child: PanelInterfaceOption2
-    #child: PanelInterfaceOption3
     #child: PanelInterfaceOption4
+    #child: PanelInterfaceOption3
+    #child: PanelInterfaceOption2
+    #child: PanelInterfaceOption1
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/Component_ListIssueWorkOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/Component_ListIssueWorkOrder.def
index c3f47fb..76eb6e7 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/Component_ListIssueWorkOrder.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/Component_ListIssueWorkOrder.def
@@ -28,7 +28,7 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductionWorkOrderNumber","title":"ProductionWorkOrderNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductionWorkOrderNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductModel","title":"Product ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductModel"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaterialDescription","title":"MaterialDescription","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaterialDescription"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"StartDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"EndDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlannedQuantity","title":"PlannedQuantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlannedQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"WorkOrderType","title":"WorkOrderType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"WorkOrderType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"WorkOrderStatus","title":"WorkOrderStatus","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"WorkOrderStatus"}}]'
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"EndDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaterialDescription","title":"MaterialDescription","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaterialDescription"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrganizationInfomation","title":"OrganizationInfomation","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrganizationInfomation"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlannedQuantity","title":"PlannedQuantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlannedQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductionWorkOrderNumber","title":"ProductionWorkOrderNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductionWorkOrderNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductModel","title":"ProductModel","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductModel"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"StartDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"WorkOrderStatus","title":"ReleaseStatus","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"WorkOrderStatus"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"WorkOrderType","title":"WorkOrderType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"WorkOrderType"}}]'
         ContextMenu: 'MenuIssueEdit'
         Taborder: 2
       ]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/Response_PanelButton_ButtonGeneratePlannedData_OnClick\043124.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/Response_PanelButton_ButtonGeneratePlannedData_OnClick\043124.def"
index af53e7d..158adbb 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/Response_PanelButton_ButtonGeneratePlannedData_OnClick\043124.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/Response_PanelButton_ButtonGeneratePlannedData_OnClick\043124.def"
@@ -7,13 +7,13 @@
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
   [*
-    return not isnull( MacroPlan );
+    return not isnull( MacroPlan ) and not isnull( GlobalOTDTable );
   *]
   QuillAction
   {
     Body:
     [*
-      MasterPlanReleaseWorkOrder::GenerateAndDistributeWorkOrders( MacroPlan );
+      MasterPlanReleaseWorkOrder::GenerateAndDistributeWorkOrders( MacroPlan, GlobalOTDTable );
       
       WebMessageBox::Success( "鐢熸垚鎴愬姛锛�", true );
     *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/_ROOT_Component_FormIssueWorkOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/_ROOT_Component_FormIssueWorkOrder.def
index 24025d0..1d96926 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/_ROOT_Component_FormIssueWorkOrder.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/_ROOT_Component_FormIssueWorkOrder.def
@@ -22,7 +22,6 @@
   ]
   Properties:
   [
-    Description: '涓嬪彂宸ュ崟'
     Image: 'TREE'
     Title: '涓嬪彂宸ュ崟'
   ]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listContextMenuMaterial455\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listContextMenuMaterial455\0431.def"
index fe19274..b365975 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listContextMenuMaterial455\0431.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listContextMenuMaterial455\0431.def"
@@ -22,7 +22,7 @@
       Properties:
       [
         Image: 'DELETE'
-        Taborder: 3
+        Taborder: 4
         Title: '鍒犻櫎'
       ]
     }
@@ -34,10 +34,22 @@
       [
         Image: 'PIG'
         Shortcut: 'Ctrl+A'
-        Taborder: 4
+        Taborder: 5
         Title: '鍏ㄩ��'
       ]
     }
+    Component MenuEdit
+    {
+      #keys: '[414702.1.37777729]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        BindOnDoubleClick: true
+        Image: 'NOTEBOOK_EDIT'
+        Taborder: 3
+        Title: '缂栬緫'
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_MenuEdit_OnClic.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_MenuEdit_OnClic.def
new file mode 100644
index 0000000..35865ff
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_MenuEdit_OnClic.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListMaterialMaterialLabelingAndPlanningStrategy_880
+Response OnClick (
+  MatAttrSettingAndPlanStrategy selection
+) id:Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_MenuEdit_OnClick
+{
+  #keys: '[414702.1.36602461]'
+  CanBindMultiple: false
+  DefinitionID => /ListMaterialMaterialLabelingAndPlanningStrategy_880/Responsedef_ListMaterialMaterialLabelingAndPlanningStrategy_880_WebMenu_OnClick
+  Initiator: 'MenuEdit'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogCreateEditMaterialLabelingAndPlanningStrategy );
+      dlg.Edit( selection );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnDoubleClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnDoubleClick.def
deleted file mode 100644
index a91ec9c..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnDoubleClick.def
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: ListMaterialMaterialLabelingAndPlanningStrategy_880
-Response OnDoubleClick (
-  MatAttrSettingAndPlanStrategy selection
-) id:Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnDoubleClick
-{
-  #keys: '[414702.0.137732025]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebList_OnDoubleClick'
-  QuillAction
-  {
-    Body:
-    [*
-      dlg := construct( DialogCreateEditMaterialLabelingAndPlanningStrategy );
-      dlg.Edit( selection );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderFresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderFresh_OnClick.def
index 44c70d6..c4faffb 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderFresh_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderFresh_OnClick.def
@@ -13,7 +13,8 @@
       macroplan := MacroPlan;
       global := GlobalOTDTable;
       businesstypes := DataHolderOrderLockGlobal.Data().BusinessType().Tokenize( ',' );
-      CustomerOrder::DoSync( macroplan, businesstypes, global );
+      organcodelist := selectvalues( global, BusinessType.OrganCode, organ, businesstypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
+      CustomerOrder::DoSync( macroplan, businesstypes, global, organcodelist );
     *]
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderLock_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderLock_OnClick.def
index 97a5fce..57fc130 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderLock_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderLock_OnClick.def
@@ -22,7 +22,7 @@
       pispips := construct( ProductInStockingPointInPeriods );
       macroplan := MacroPlan;
       traverse( checkorders, Elements, order ){
-        pispips.Add( selectset( order, ProductInStockingPoint_MP.ProductInStockingPointInPeriod, pispip, true ) );
+        pispips := pispips.Add( selectset( order, ProductInStockingPoint_MP.ProductInStockingPointInPeriod, pispip, pispip.SupplyQuantity() > 0 ) );
         }
       
       pispipLeafs := selectset( pispips, 
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderUnlock_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderUnlock_OnClick.def
index 6283853..ecc89f9 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderUnlock_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderUnlock_OnClick.def
@@ -23,7 +23,7 @@
       pispips := construct( ProductInStockingPointInPeriods );
       macroplan := MacroPlan;
       traverse( checkorders, Elements, order ){
-        pispips.Add( selectset( order, ProductInStockingPoint_MP.ProductInStockingPointInPeriod, pispip, true ) );
+        pispips := pispips.Add( selectset( order, ProductInStockingPoint_MP.ProductInStockingPointInPeriod, pispip, pispip.SupplyQuantity() > 0 ) );
         }
       
       pispipLeafs := selectset( pispips, 
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Component_ListPRHistoryData\043844.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Component_ListPRHistoryData\043844.def"
index 3c6f90b..fe57fb1 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Component_ListPRHistoryData\043844.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Component_ListPRHistoryData\043844.def"
@@ -27,7 +27,7 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductName","title":"ProductName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProduceRequiredDate","title":"ProduceRequiredDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProduceRequiredDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MRPCalverNo","title":"MRPCalverNo","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MRPCalverNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrganCode","title":"OrganCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrganCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProviderCode","title":"ProviderCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProviderCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProviderName","title":"ProviderName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProviderName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasure","title":"UnitOfMeasure","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasure"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SendStatus","title":"SendStatus","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SendStatus"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SendTimeString","title":"SendTimeString","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SendTimeString"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReleaseBy","title":"ReleaseBy","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReleaseBy"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReceiveTimeString","title":"ReceiveTimeString","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReceiveTimeString"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReceiveStatus","title":"ReceiveStatus","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReceiveStatus"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReceiveError","title":"ReceiveError","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReceiveError"}}]'
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DataID","title":"DataID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DataID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductName","title":"ProductName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DeliveryDate","title":"DeliveryDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DeliveryDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MRPCalverNo","title":"MRPCalverNo","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MRPCalverNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrganCode","title":"OrganCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrganCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProviderCode","title":"ProviderCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProviderCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProviderName","title":"ProviderName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProviderName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasure","title":"UnitOfMeasure","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasure"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PreparerID","title":"PreparerID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PreparerID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SendStatus","title":"SendStatus","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SendStatus"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SendTimeString","title":"SendTimeString","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"SendTimeString"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReleaseBy","title":"ReleaseBy","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReleaseBy"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReceiveStatus","title":"ReceiveStatus","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReceiveStatus"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReceiveTimeString","title":"ReceiveTimeString","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ReceiveTimeString"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReceiveError","title":"ReceiveError","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReceiveError"}}]'
         ContextMenu: 'listContextMenuPRHistoryData'
         SortCriteria: 'BusinessType;MRPCalverNo'
         Taborder: 1
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/_ROOT_Component_FormPanelMaterialSpecializedDisplay.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/_ROOT_Component_FormPanelMaterialSpecializedDisplay.def
index 74e4ff6..70bf43d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/_ROOT_Component_FormPanelMaterialSpecializedDisplay.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialSpecializedDisplay/_ROOT_Component_FormPanelMaterialSpecializedDisplay.def
@@ -32,7 +32,6 @@
   ]
   Properties:
   [
-    Description: '涓撴樉'
     Image: 'LAPTOP2'
     Title: '涓撴樉'
   ]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_ListProduct\043844.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_ListProduct\043844.def"
new file mode 100644
index 0000000..92f21a9
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_ListProduct\043844.def"
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component ListProduct id:ListProduct_844 #extension
+{
+  Children:
+  [
+    Component DataSetLevelRootProduct #extension
+    {
+      Children:
+      [
+        #child: listContextMenuProduct_1
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_PanelList.def b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_PanelList.def
new file mode 100644
index 0000000..907c5e6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_PanelList.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component PanelList #extension
+{
+  Children:
+  [
+    #child: ListProduct_844
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_listContextMenuProduct\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_listContextMenuProduct\0431.def"
new file mode 100644
index 0000000..7a70a33
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_listContextMenuProduct\0431.def"
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+Component listContextMenuProduct id:listContextMenuProduct_1 #extension
+{
+  Children:
+  [
+    Component MenuMarkingPanelMaterial
+    {
+      #keys: '[414502.0.406261865]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'EARTH2'
+        Taborder: 11
+        Title: '鏍囪闈㈡澘鐗╂枡'
+      ]
+    }
+    Component Menu860
+    {
+      #keys: '[414502.0.406252405]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Separator: true
+        Taborder: 10
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Response_TIANMA_JITUAN_ListProduct_844_MenuMarkingPanelMaterial_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Response_TIANMA_JITUAN_ListProduct_844_MenuMarkingPanelMaterial_OnClick.def
new file mode 100644
index 0000000..33228b3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Response_TIANMA_JITUAN_ListProduct_844_MenuMarkingPanelMaterial_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListProduct_844
+Response OnClick (
+  Product_MP selection
+) id:Response_ListProduct_844_MenuMarkingPanelMaterial_OnClick
+{
+  #keys: '[414502.0.406201138]'
+  CanBindMultiple: false
+  DefinitionID => /ListProduct_844/Responsedef_ListProduct_844_WebMenu_OnClick
+  Initiator: 'MenuMarkingPanelMaterial'
+  QuillAction
+  {
+    Body:
+    [*
+      selection.IsPanelMaterial( not selection.IsPanelMaterial() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProducts/_ROOT_Component_FormProducts.def b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/_ROOT_Component_FormProducts.def
new file mode 100644
index 0000000..c44a756
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/_ROOT_Component_FormProducts.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: LibMacroPlannerWebUI
+OrphanComponent FormProducts #extension
+{
+  Children:
+  [
+    #child: PanelList
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListConversionFactor.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListConversionFactor.def
new file mode 100644
index 0000000..6a4f8cf
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListConversionFactor.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListConversionFactor
+{
+  #keys: '[414702.1.37735952]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorConversionFactor
+    {
+      #keys: '[414702.1.37735953]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'Global_MappingConversionFactor'
+      ]
+    }
+    #child: listActionBarPageConversionFactor
+    Component DataSetLevelConversionFactor
+    {
+      #keys: '[414702.1.37735958]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuConversionFactor
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Factor","title":"Factor","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Factor"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsEnabled","title":"IsEnabled","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"IsEnabled"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SourceUnitOfMeasureName","title":"SourceUnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"SourceUnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"TargetUnitOfMeasureName","title":"TargetUnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"TargetUnitOfMeasureName"}}]'
+        ContextMenu: 'listContextMenuConversionFactor'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListCustomOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListCustomOrder.def
new file mode 100644
index 0000000..1930918
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListCustomOrder.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListCustomOrder
+{
+  #keys: '[414502.0.410384594]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorCustomOrder
+    {
+      #keys: '[414502.0.410384595]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'Global_MappingCustomOrder'
+      ]
+    }
+    #child: listActionBarPageCustomOrder
+    Component DataSetLevelCustomOrder
+    {
+      #keys: '[414502.0.410384600]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuCustomOrder
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CurrencyID","title":"CurrencyID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CurrencyID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Customer","title":"Customer","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Customer"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerID","title":"CustomerID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ID","title":"ID","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsAvailable","title":"IsAvailable","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsAvailable"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderDate","title":"OrderDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderID","title":"OrderID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderLineID","title":"OrderLineID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderLineID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderTime","title":"OrderTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderType","title":"OrderType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityName","title":"PriorityName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductGrade","title":"ProductGrade","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductGrade"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"SalesSegmentName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SegmentPriority","title":"SegmentPriority","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SegmentPriority"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SheetProfitability","title":"SheetProfitability","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SheetProfitability"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}}]'
+        ContextMenu: 'listContextMenuCustomOrder'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListForecast.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListForecast.def
new file mode 100644
index 0000000..5e70a0c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListForecast.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListForecast
+{
+  #keys: '[414502.0.410501478]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorForecast
+    {
+      #keys: '[414502.0.410501479]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'Global_MappingForecast'
+      ]
+    }
+    #child: listActionBarPageForecast
+    Component DataSetLevelForecast
+    {
+      #keys: '[414502.0.410501484]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuForecast
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CurrencyID","title":"CurrencyID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CurrencyID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"EndDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ID","title":"ID","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityName","title":"PriorityName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"SalesSegmentName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"StartDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}}]'
+        ContextMenu: 'listContextMenuForecast'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListInterfaceDataDisplayContent.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListInterfaceDataDisplayContent.def
new file mode 100644
index 0000000..3a540ce
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListInterfaceDataDisplayContent.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListInterfaceDataDisplayContent
+{
+  #keys: '[414702.1.37424868]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorInterfaceDataDisplayContent
+    {
+      #keys: '[414702.1.37424869]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'Global_MappingSalesSegment_MP'
+      ]
+    }
+    #child: listActionBarPageInterfaceDataDisplayContent
+    Component DataSetLevelInterfaceDataDisplayContent
+    {
+      #keys: '[414702.1.37424874]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuInterfaceDataDisplayContent
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayIndex","title":"DisplayIndex","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DisplayIndex"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ParentName","title":"ParentName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ParentName"}}]'
+        ContextMenu: 'listContextMenuInterfaceDataDisplayContent'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListOperation.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListOperation.def
new file mode 100644
index 0000000..923cead
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListOperation.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListOperation
+{
+  #keys: '[414702.1.37777280]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorOperation
+    {
+      #keys: '[414702.1.37777281]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'Global_MappingOperation'
+      ]
+    }
+    #child: listActionBarPageOperation
+    Component DataSetLevelOperation
+    {
+      #keys: '[414702.1.37777286]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuOperation
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ActualCapacity","title":"ActualCapacity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ActualCapacity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DestinationOrganizationId","title":"DestinationOrganizationId","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DestinationOrganizationId"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsLinkedWithFinishedGood","title":"IsLinkedWithFinishedGood","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsLinkedWithFinishedGood"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Line","title":"Line","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Line"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaximumQuantity","title":"MaximumQuantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaximumQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MinimumQuantity","title":"MinimumQuantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MinimumQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrganCode","title":"OrganCode","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"OrganCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrganId","title":"OrganId","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrganId"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrganName","title":"OrganName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrganName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlantName","title":"PlantName","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"PlantName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProcessSection","title":"ProcessSection","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ProcessSection"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SequenceNumber","title":"SequenceNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"SequenceNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UserLeadTime","title":"UserLeadTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UserLeadTime"}}]'
+        ContextMenu: 'listContextMenuOperation'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListOperationBOM.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListOperationBOM.def
new file mode 100644
index 0000000..60f0c04
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListOperationBOM.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListOperationBOM
+{
+  #keys: '[414702.1.37625082]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorOperationBOM
+    {
+      #keys: '[414702.1.37625083]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'Global_MappingOperationBOM'
+      ]
+    }
+    #child: listActionBarPageOperationBOM
+    Component DataSetLevelOperationBOM
+    {
+      #keys: '[414702.1.37625088]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuOperationBOM
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AlternativeMaterialCode","title":"AlternativeMaterialCode","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"AlternativeMaterialCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AlternativeMaterialType","title":"AlternativeMaterialType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"AlternativeMaterialType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AlternativeMaterialUnit","title":"AlternativeMaterialUnit","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"AlternativeMaterialUnit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AlternativeRate","title":"AlternativeRate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"AlternativeRate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ComponentCode","title":"ComponentCode","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ComponentCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ComponentDescription","title":"ComponentDescription","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ComponentDescription"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ComponentOutputRate","title":"ComponentOutputRate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ComponentOutputRate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ComponentType","title":"ComponentType","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ComponentType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ComponentUnit","title":"ComponentUnit","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ComponentUnit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ComponentUnitDescription","title":"ComponentUnitDescription","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ComponentUnitDescription"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DescriptionOfAlternativeMaterial","title":"DescriptionOfAlternativeMaterial","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DescriptionOfAlternativeMaterial"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DescriptionOfAlternativeMaterialUnits","title":"DescriptionOfAlternativeMaterialUnits","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DescriptionOfAlternativeMaterialUnits"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsLinkedWithFinishedGood","title":"IsLinkedWithFinishedGood","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsLinkedWithFinishedGood"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaterialSystem","title":"MaterialSystem","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaterialSystem"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrganCode","title":"OrganCode","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"OrganCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProcessSection","title":"ProcessSection","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ProcessSection"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductCode","title":"ProductCode","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ProductCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductDescribe","title":"ProductDescribe","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductDescribe"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductType","title":"ProductType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductUnitDescription","title":"ProductUnitDescription","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductUnitDescription"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SubstitutionRelationship","title":"SubstitutionRelationship","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SubstitutionRelationship"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitUsageOfComponents","title":"UnitUsageOfComponents","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitUsageOfComponents"}}]'
+        ContextMenu: 'listContextMenuOperationBOM'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListProduct_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListProduct_MP.def
new file mode 100644
index 0000000..c69d8f7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListProduct_MP.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListProduct_MP
+{
+  #keys: '[414702.1.36601467]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorProduct_MP
+    {
+      #keys: '[414702.1.36601468]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'Global_MappingProduct_MP'
+      ]
+    }
+    #child: listActionBarPageProduct_MP
+    Component DataSetLevelProduct_MP
+    {
+      #keys: '[414702.1.36601473]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuProduct_MP
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BOMCount","title":"BOMCount","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BOMCount"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CommonBusiness","title":"CommonBusiness","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CommonBusiness"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"EndDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ID","title":"ID","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsCommon","title":"IsCommon","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsCommon"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsLinkedWithFinishedGood","title":"IsLinkedWithFinishedGood","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsLinkedWithFinishedGood"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"KeyProduct","title":"KeyProduct","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"KeyProduct"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Notes","title":"Notes","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Notes"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductMajorType","title":"ProductMajorType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductMajorType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductSubclassType","title":"ProductSubclassType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductSubclassType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ShelfLife","title":"ShelfLife","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ShelfLife"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}}]'
+        ContextMenu: 'listContextMenuProduct_MP'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListUnitOfMeasure_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListUnitOfMeasure_MP.def
new file mode 100644
index 0000000..f59a8c1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListUnitOfMeasure_MP.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListUnitOfMeasure_MP
+{
+  #keys: '[414502.0.410391545]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorUnitOfMeasure_MP
+    {
+      #keys: '[414502.0.410391546]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'Global_MappingUnitOfMeasure_MP'
+      ]
+    }
+    #child: listActionBarPageUnitOfMeasure_MP
+    Component DataSetLevelUnitOfMeasure_MP
+    {
+      #keys: '[414502.0.410391551]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuUnitOfMeasure_MP
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsDefault","title":"IsDefault","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsDefault"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Name"}}]'
+        ContextMenu: 'listContextMenuUnitOfMeasure_MP'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_MatrixEditorShowInterfaceData.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_MatrixEditorShowInterfaceData.def
index f73b35a..66bfefb 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_MatrixEditorShowInterfaceData.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_MatrixEditorShowInterfaceData.def
@@ -93,5 +93,6 @@
     ContextMenu: 'matrixeditorContextMenuShowInterfaceData'
     Rows: 'MatrixEditorRowsShowInterfaceData'
     Taborder: 0
+    Visible: false
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelConversionFactor.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelConversionFactor.def
new file mode 100644
index 0000000..0dbd43c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelConversionFactor.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelConversionFactor
+{
+  #keys: '[414702.1.37735912]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListConversionFactor
+  ]
+  Properties:
+  [
+    Taborder: 5
+    Title: 'ConversionFactor'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelCustomOrder\043682.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelCustomOrder\043682.def"
new file mode 100644
index 0000000..310184f
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelCustomOrder\043682.def"
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelCustomOrder
+{
+  #keys: '[414502.0.409352936]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListCustomOrder
+  ]
+  Properties:
+  [
+    Taborder: 0
+    Title: 'CustomOrder'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelForecast.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelForecast.def
new file mode 100644
index 0000000..b0f4ecd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelForecast.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelForecast
+{
+  #keys: '[414502.0.409524617]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListForecast
+  ]
+  Properties:
+  [
+    Taborder: 1
+    Title: 'Forecast '
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelInterfaceDataDisplayContent.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelInterfaceDataDisplayContent.def
new file mode 100644
index 0000000..6547519
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelInterfaceDataDisplayContent.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+Component PanelInterfaceDataDisplayContent
+{
+  #keys: '[414502.0.409352883]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelCustomOrder
+    #child: PanelForecast
+    #child: PanelUnitOfMeasure_MP
+    #child: PanelSalesSegment_MP
+    #child: PanelProduct_MP
+    #child: PanelConversionFactor
+    #child: PanelOperation
+    #child: PanelOperationBOM
+  ]
+  Properties:
+  [
+    Orientation: 'accordeon'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelOperation.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelOperation.def
new file mode 100644
index 0000000..2c300bc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelOperation.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelOperation
+{
+  #keys: '[414702.1.37777246]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListOperation
+  ]
+  Properties:
+  [
+    Taborder: 6
+    Title: 'Operation'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelOperationBOM.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelOperationBOM.def
new file mode 100644
index 0000000..0753a9e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelOperationBOM.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelOperationBOM
+{
+  #keys: '[414702.1.37625047]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListOperationBOM
+  ]
+  Properties:
+  [
+    Taborder: 7
+    Title: 'OperationBOM'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelProduct_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelProduct_MP.def
new file mode 100644
index 0000000..b2e8ce7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelProduct_MP.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelProduct_MP
+{
+  #keys: '[414702.1.37314548]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListProduct_MP
+  ]
+  Properties:
+  [
+    Taborder: 4
+    Title: 'Product_MP'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelSalesSegment_MP\043154.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelSalesSegment_MP\043154.def"
new file mode 100644
index 0000000..428a969
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelSalesSegment_MP\043154.def"
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelSalesSegment_MP
+{
+  #keys: '[414702.1.37488443]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListInterfaceDataDisplayContent
+  ]
+  Properties:
+  [
+    Taborder: 3
+    Title: 'SalesSegment_MP'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelUnitOfMeasure_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelUnitOfMeasure_MP.def
new file mode 100644
index 0000000..9820357
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelUnitOfMeasure_MP.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelUnitOfMeasure_MP
+{
+  #keys: '[414502.0.410390401]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListUnitOfMeasure_MP
+  ]
+  Properties:
+  [
+    Taborder: 2
+    Title: 'UnitOfMeasure_MP'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageConversionFactor.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageConversionFactor.def
new file mode 100644
index 0000000..ec235e4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageConversionFactor.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageConversionFactor
+{
+  #keys: '[414702.1.37735955]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageCustomOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageCustomOrder.def
new file mode 100644
index 0000000..12f4eef
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageCustomOrder.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageCustomOrder
+{
+  #keys: '[414502.0.410384597]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageForecast.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageForecast.def
new file mode 100644
index 0000000..8370bfe
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageForecast.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageForecast
+{
+  #keys: '[414502.0.410501481]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageInterfaceDataDisplayContent.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageInterfaceDataDisplayContent.def
new file mode 100644
index 0000000..6898521
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageInterfaceDataDisplayContent.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageInterfaceDataDisplayContent
+{
+  #keys: '[414702.1.37424871]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageOperation.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageOperation.def
new file mode 100644
index 0000000..4b89c7b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageOperation.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageOperation
+{
+  #keys: '[414702.1.37777283]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageOperationBOM.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageOperationBOM.def
new file mode 100644
index 0000000..bd7e74c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageOperationBOM.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageOperationBOM
+{
+  #keys: '[414702.1.37625085]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageProduct_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageProduct_MP.def
new file mode 100644
index 0000000..fed3da8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageProduct_MP.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageProduct_MP
+{
+  #keys: '[414702.1.36601470]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageUnitOfMeasure_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageUnitOfMeasure_MP.def
new file mode 100644
index 0000000..b8c0188
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageUnitOfMeasure_MP.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageUnitOfMeasure_MP
+{
+  #keys: '[414502.0.410391548]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuConversionFactor.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuConversionFactor.def
new file mode 100644
index 0000000..9ba4218
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuConversionFactor.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuConversionFactor
+{
+  #keys: '[414702.1.37735960]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuCustomOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuCustomOrder.def
new file mode 100644
index 0000000..6418719
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuCustomOrder.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuCustomOrder
+{
+  #keys: '[414502.0.410384602]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuForecast.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuForecast.def
new file mode 100644
index 0000000..bf6bb96
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuForecast.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuForecast
+{
+  #keys: '[414502.0.410501486]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuInterfaceDataDisplayContent.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuInterfaceDataDisplayContent.def
new file mode 100644
index 0000000..eccd717
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuInterfaceDataDisplayContent.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuInterfaceDataDisplayContent
+{
+  #keys: '[414702.1.37424876]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuOperation.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuOperation.def
new file mode 100644
index 0000000..5734507
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuOperation.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuOperation
+{
+  #keys: '[414702.1.37777288]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuOperationBOM.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuOperationBOM.def
new file mode 100644
index 0000000..9e4d0d6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuOperationBOM.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuOperationBOM
+{
+  #keys: '[414702.1.37625090]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuProduct_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuProduct_MP.def
new file mode 100644
index 0000000..0153ccb
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuProduct_MP.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuProduct_MP
+{
+  #keys: '[414702.1.36601475]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuUnitOfMeasure_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuUnitOfMeasure_MP.def
new file mode 100644
index 0000000..7864ecf
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuUnitOfMeasure_MP.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuUnitOfMeasure_MP
+{
+  #keys: '[414502.0.410391553]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/_ROOT_Component_FormShowInterfaceData.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/_ROOT_Component_FormShowInterfaceData.def
index 82115f2..ee9220c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/_ROOT_Component_FormShowInterfaceData.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/_ROOT_Component_FormShowInterfaceData.def
@@ -8,10 +8,11 @@
   Children:
   [
     #child: MatrixEditorShowInterfaceData
+    #child: PanelInterfaceDataDisplayContent
   ]
   Properties:
   [
-    Image: 'PROJECTOR'
+    Image: 'VIEW'
     Title: '鎺ュ彛鏁版嵁鏄剧ず'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Capacity___sale_budge.vw b/_Main/UI/MacroPlannerWebApp/Views/Capacity___sale_budge.vw
new file mode 100644
index 0000000..901e27f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Capacity___sale_budge.vw
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    image: 'CHART_HI_LO'
+    page: 'ActionBarPageScenarioComparison'
+    group: ''
+    index: 0
+    description: ''
+  }
+  formatversion: 2
+  id: 'Capacity___sale_budge'
+  name: 'Capacity & sale budge'
+  isglobal: false
+  isroot: true
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Test.vw b/_Main/UI/MacroPlannerWebApp/Views/Test.vw
index 1a6fe97..f59a1db 100644
--- a/_Main/UI/MacroPlannerWebApp/Views/Test.vw
+++ b/_Main/UI/MacroPlannerWebApp/Views/Test.vw
@@ -159,287 +159,6 @@
           }
         }
       }
-      form_FormCustomerAndForecastOrder
-      {
-        title: 'QTIANMA_JITUAN::FormCustomerAndForecastOrder'
-        shown: true
-        componentID: 'QTIANMA_JITUAN::FormCustomerAndForecastOrder'
-        layout
-        {
-          mode: 'open'
-          rowPosition: 16
-          rowSpan: 16
-          columnPosition: 1
-          columnSpan: 4
-        }
-        components
-        {
-          FormCustomerAndForecastOrder_PanelButton
-          {
-            sizeRatio: 1
-          }
-          FormCustomerAndForecastOrder_ListCustomerAndFillingCapacityOrder
-          {
-          }
-          FormCustomerAndForecastOrder_DataSetLevelCustomerAndFillingCapacityOrder
-          {
-            groupDepth: -1
-            column_VerNo
-            {
-              columnId: 'VerNo'
-              dataPath: 'VerNo'
-              dataType: 'string'
-              index: 0
-              subtotals: ''
-              width: 150
-            }
-            column_OrderID
-            {
-              columnId: 'OrderID'
-              dataPath: 'OrderID'
-              dataType: 'string'
-              index: 1
-              subtotals: ''
-              width: 150
-            }
-            column_ProductID
-            {
-              columnId: 'ProductID'
-              dataPath: 'ProductID'
-              dataType: 'string'
-              index: 2
-              subtotals: ''
-              width: 150
-            }
-            column_BusinessType
-            {
-              columnId: 'BusinessType'
-              dataPath: 'BusinessType'
-              dataType: 'string'
-              index: 3
-              subtotals: ''
-              width: 150
-            }
-            column_Customer
-            {
-              columnId: 'Customer'
-              dataPath: 'Customer'
-              dataType: 'string'
-              index: 4
-              subtotals: ''
-              width: 150
-            }
-            column_ServiceType
-            {
-              columnId: 'ServiceType'
-              dataPath: 'ServiceType'
-              dataType: 'string'
-              index: 5
-              subtotals: ''
-              width: 150
-            }
-            column_Quantity
-            {
-              columnId: 'Quantity'
-              dataPath: 'Quantity'
-              dataType: 'real'
-              index: 6
-              subtotals: ''
-              width: 150
-            }
-            column_UnitOfMeasureName
-            {
-              columnId: 'UnitOfMeasureName'
-              dataPath: 'UnitOfMeasureName'
-              dataType: 'string'
-              index: 7
-              subtotals: ''
-              width: 150
-            }
-            column_PanelBigSheetQuantity
-            {
-              columnId: 'PanelBigSheetQuantity'
-              dataPath: 'PanelBigSheetQuantity'
-              dataType: 'real'
-              index: 8
-              subtotals: ''
-              width: 150
-            }
-            column_SalesAmount
-            {
-              columnId: 'SalesAmount'
-              dataPath: 'SalesAmount'
-              dataType: 'number'
-              index: 9
-              subtotals: ''
-              width: 150
-            }
-            column_ForecastDemandDate
-            {
-              columnId: 'ForecastDemandDate'
-              dataPath: 'ForecastDemandDate'
-              dataType: 'date'
-              index: 10
-              subtotals: ''
-              width: 150
-            }
-            column_DemandDate
-            {
-              columnId: 'DemandDate'
-              dataPath: 'DemandDate'
-              dataType: 'date'
-              index: 11
-              subtotals: ''
-              width: 150
-            }
-          }
-        }
-      }
-      form_FormFillingCapacityOrder
-      {
-        title: 'QTIANMA_JITUAN::FormFillingCapacityOrder'
-        shown: true
-        componentID: 'QTIANMA_JITUAN::FormFillingCapacityOrder'
-        layout
-        {
-          mode: 'open'
-          rowPosition: 16
-          rowSpan: 16
-          columnPosition: 5
-          columnSpan: 8
-        }
-        components
-        {
-          FormFillingCapacityOrder_PanelFillingCapacityOrder
-          {
-            sizeRatio: 1
-          }
-          FormFillingCapacityOrder_ListFillingCapacityOrder
-          {
-          }
-          FormFillingCapacityOrder_DataSetLevelFillingCapacityOrder
-          {
-            groupDepth: -1
-            column_VerNo
-            {
-              columnId: 'VerNo'
-              dataPath: 'VerNo'
-              dataType: 'string'
-              index: 0
-              subtotals: ''
-              width: 150
-            }
-            column_ProductID
-            {
-              columnId: 'ProductID'
-              dataPath: 'ProductID'
-              dataType: 'string'
-              index: 1
-              subtotals: ''
-              width: 150
-            }
-            column_BusinessType
-            {
-              columnId: 'BusinessType'
-              dataPath: 'BusinessType'
-              dataType: 'string'
-              index: 2
-              subtotals: ''
-              width: 150
-            }
-            column_SalesSegmentName
-            {
-              columnId: 'SalesSegmentName'
-              dataPath: 'SalesSegmentName'
-              dataType: 'string'
-              index: 3
-              subtotals: ''
-              width: 150
-            }
-            column_StockingPointID
-            {
-              columnId: 'StockingPointID'
-              dataPath: 'StockingPointID'
-              dataType: 'string'
-              index: 4
-              subtotals: ''
-              width: 150
-            }
-            column_Customer
-            {
-              columnId: 'Customer'
-              dataPath: 'Customer'
-              dataType: 'string'
-              index: 5
-              subtotals: ''
-              width: 150
-            }
-            column_Quantity
-            {
-              columnId: 'Quantity'
-              dataPath: 'Quantity'
-              dataType: 'real'
-              index: 6
-              subtotals: ''
-              width: 150
-            }
-            column_UnitOfMeasureName
-            {
-              columnId: 'UnitOfMeasureName'
-              dataPath: 'UnitOfMeasureName'
-              dataType: 'string'
-              index: 7
-              subtotals: ''
-              width: 150
-            }
-            column_PanelBigSheetQuantity
-            {
-              columnId: 'PanelBigSheetQuantity'
-              dataPath: 'PanelBigSheetQuantity'
-              dataType: 'real'
-              index: 8
-              subtotals: ''
-              width: 150
-            }
-            column_SalesAmount
-            {
-              columnId: 'SalesAmount'
-              dataPath: 'SalesAmount'
-              dataType: 'number'
-              index: 9
-              subtotals: ''
-              width: 150
-            }
-            column_ForecastDemandDate
-            {
-              columnId: 'ForecastDemandDate'
-              dataPath: 'ForecastDemandDate'
-              dataType: 'date'
-              index: 10
-              subtotals: ''
-              width: 150
-            }
-            column_DemandDate
-            {
-              columnId: 'DemandDate'
-              dataPath: 'DemandDate'
-              dataType: 'date'
-              index: 11
-              subtotals: ''
-              width: 150
-            }
-            column_OrderType
-            {
-              columnId: 'OrderType'
-              dataPath: 'OrderType'
-              dataType: 'string'
-              index: 12
-              subtotals: ''
-              width: 150
-            }
-          }
-        }
-      }
     }
     userconfigurableinformation
     {
@@ -452,7 +171,7 @@
   }
   formatversion: 2
   id: 'Test'
-  name: 'Test'
+  name: '浜ц兘鍒嗛厤'
   isglobal: false
   isroot: true
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\345\206\262\345\207\217.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\345\206\262\345\207\217.vw"
new file mode 100644
index 0000000..f10513d
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\345\206\262\345\207\217.vw"
@@ -0,0 +1,900 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FrmOrderForecast
+      {
+        title: 'QTIANMA_JITUAN::FrmOrderForecast'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FrmOrderForecast'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FrmOrderForecast_Panel961
+          {
+            sizeRatio: 1
+          }
+          FrmOrderForecast_Panel351
+          {
+            sizeRatio: 1
+          }
+          FrmOrderForecast_liH_Forecast
+          {
+          }
+          FrmOrderForecast_DataSetLevel204
+          {
+            groupDepth: -1
+            column_Month
+            {
+              columnId: 'Month'
+              dataPath: 'Month'
+              dataType: 'date'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_CustomName
+            {
+              columnId: 'CustomName'
+              dataPath: 'CustomName'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_SKU
+            {
+              columnId: 'SKU'
+              dataPath: 'SKU'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ForecatsRealQty
+            {
+              columnId: 'ForecatsRealQty'
+              dataPath: 'ForecatsRealQty'
+              dataType: 'number'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_Unit
+            {
+              columnId: 'Unit'
+              dataPath: 'Unit'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_Department
+            {
+              columnId: 'Department'
+              dataPath: 'Department'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FrmOrderResult
+      {
+        title: 'QTIANMA_JITUAN::FrmOrderResult'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FrmOrderResult'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 6
+          columnSpan: 7
+        }
+        components
+        {
+          FrmOrderResult_Panel576
+          {
+            sizeRatio: 1
+          }
+          FrmOrderResult_Panel445
+          {
+            sizeRatio: 1
+          }
+          FrmOrderResult_List782
+          {
+          }
+          FrmOrderResult_DataSetLevel473
+          {
+            groupDepth: -1
+            column_OrderCode
+            {
+              columnId: 'OrderCode'
+              dataPath: 'OrderCode'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_SKU
+            {
+              columnId: 'SKU'
+              dataPath: 'SKU'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_OrderQty
+            {
+              columnId: 'OrderQty'
+              dataPath: 'OrderQty'
+              dataType: 'number'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ReverseQty
+            {
+              columnId: 'ReverseQty'
+              dataPath: 'ReverseQty'
+              dataType: 'number'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_AuthorizeQty
+            {
+              columnId: 'AuthorizeQty'
+              dataPath: 'AuthorizeQty'
+              dataType: 'number'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_ForecastQty
+            {
+              columnId: 'ForecastQty'
+              dataPath: 'ForecastQty'
+              dataType: 'number'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_ForecastHitQty
+            {
+              columnId: 'ForecastHitQty'
+              dataPath: 'ForecastHitQty'
+              dataType: 'number'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_ForecastNoHitQty
+            {
+              columnId: 'ForecastNoHitQty'
+              dataPath: 'ForecastNoHitQty'
+              dataType: 'number'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerName
+            {
+              columnId: 'CustomerName'
+              dataPath: 'CustomerName'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FrmOrderResultEx
+      {
+        title: 'QTIANMA_JITUAN::FrmOrderResultEx'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FrmOrderResultEx'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 16
+          rowSpan: 16
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FrmOrderResultEx_Panel650
+          {
+            sizeRatio: 1
+          }
+          FrmOrderResultEx_Panel570
+          {
+            sizeRatio: 1
+          }
+          FrmOrderResultEx_List174
+          {
+          }
+          FrmOrderResultEx_DataSetLevel386
+          {
+            groupDepth: -1
+            column_OrderCode
+            {
+              columnId: 'OrderCode'
+              dataPath: 'OrderCode'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_SKU
+            {
+              columnId: 'SKU'
+              dataPath: 'SKU'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_OrderQty
+            {
+              columnId: 'OrderQty'
+              dataPath: 'OrderQty'
+              dataType: 'number'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDateTime
+            {
+              columnId: 'OrderDateTime'
+              dataPath: 'OrderDateTime'
+              dataType: 'date'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_ForecastHitQty
+            {
+              columnId: 'ForecastHitQty'
+              dataPath: 'ForecastHitQty'
+              dataType: 'number'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_ForecastNoHitQty
+            {
+              columnId: 'ForecastNoHitQty'
+              dataPath: 'ForecastNoHitQty'
+              dataType: 'number'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_Unit
+            {
+              columnId: 'Unit'
+              dataPath: 'Unit'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerName
+            {
+              columnId: 'CustomerName'
+              dataPath: 'CustomerName'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormHedgingOfLog
+      {
+        title: 'QTIANMA_JITUAN::FormHedgingOfLog'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormHedgingOfLog'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 16
+          rowSpan: 8
+          columnPosition: 6
+          columnSpan: 7
+        }
+        components
+        {
+          FormHedgingOfLog_PanelHedgingOfLog221
+          {
+            sizeRatio: 1
+          }
+          FormHedgingOfLog_PanelHedgingOfLog593
+          {
+            sizeRatio: 1
+          }
+          FormHedgingOfLog_PanelHedgingOfLog
+          {
+            sizeRatio: 1
+          }
+          FormHedgingOfLog_ListHedgingOfLog
+          {
+          }
+          FormHedgingOfLog_DataSetLevelHedgingOfLog
+          {
+            groupDepth: -1
+            column_Serial
+            {
+              columnId: 'Serial'
+              dataPath: 'Serial'
+              dataType: 'number'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_SKU
+            {
+              columnId: 'SKU'
+              dataPath: 'SKU'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_ForecastQty
+            {
+              columnId: 'ForecastQty'
+              dataPath: 'ForecastQty'
+              dataType: 'number'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ReverseQty
+            {
+              columnId: 'ReverseQty'
+              dataPath: 'ReverseQty'
+              dataType: 'number'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_AuthorizeQty
+            {
+              columnId: 'AuthorizeQty'
+              dataPath: 'AuthorizeQty'
+              dataType: 'number'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_OperateQty
+            {
+              columnId: 'OperateQty'
+              dataPath: 'OperateQty'
+              dataType: 'number'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_OperateType
+            {
+              columnId: 'OperateType'
+              dataPath: 'OperateType'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_Operator
+            {
+              columnId: 'Operator'
+              dataPath: 'Operator'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OperateTime
+            {
+              columnId: 'OperateTime'
+              dataPath: 'OperateTime'
+              dataType: 'datetime'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FrmRAShow
+      {
+        title: 'QTIANMA_JITUAN::FrmRAShow'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FrmRAShow'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 24
+          rowSpan: 8
+          columnPosition: 6
+          columnSpan: 7
+        }
+        components
+        {
+          FrmRAShow_Panel950
+          {
+            sizeRatio: 1
+          }
+          FrmRAShow_Panel224
+          {
+            sizeRatio: 1
+          }
+          FrmRAShow_List696
+          {
+          }
+          FrmRAShow_DataSetLevel187
+          {
+            groupDepth: -1
+            column_SKU
+            {
+              columnId: 'SKU'
+              dataPath: 'SKU'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_MType
+            {
+              columnId: 'MType'
+              dataPath: 'MType'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_ReverseQty
+            {
+              columnId: 'ReverseQty'
+              dataPath: 'ReverseQty'
+              dataType: 'number'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_AuthorizeQty
+            {
+              columnId: 'AuthorizeQty'
+              dataPath: 'AuthorizeQty'
+              dataType: 'number'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_Unit
+            {
+              columnId: 'Unit'
+              dataPath: 'Unit'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerName
+            {
+              columnId: 'CustomerName'
+              dataPath: 'CustomerName'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormReleaseRecord
+      {
+        title: 'QTIANMA_JITUAN::FormReleaseRecord'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormReleaseRecord'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 32
+          rowSpan: 9
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormReleaseRecord_PanelReleaseRecord423
+          {
+            sizeRatio: 1
+          }
+          FormReleaseRecord_PanelReleaseRecord
+          {
+            sizeRatio: 1
+          }
+          FormReleaseRecord_PanelReleaseRecord108
+          {
+            sizeRatio: 1
+          }
+          FormReleaseRecord_ListReleaseRecord
+          {
+          }
+          FormReleaseRecord_DataSetLevelReleaseRecord
+          {
+            groupDepth: -1
+            column_Serial
+            {
+              columnId: 'Serial'
+              dataPath: 'Serial'
+              dataType: 'number'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_IssuingDate
+            {
+              columnId: 'IssuingDate'
+              dataPath: 'IssuingDate'
+              dataType: 'datetime'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_FinishDate
+            {
+              columnId: 'FinishDate'
+              dataPath: 'FinishDate'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_Issuer
+            {
+              columnId: 'Issuer'
+              dataPath: 'Issuer'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_Status
+            {
+              columnId: 'Status'
+              dataPath: 'Status'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+          }
+          FormReleaseRecord_PanelReleaseRecord527
+          {
+            sizeRatio: 1
+          }
+          FormReleaseRecord_ListReleaseRecord243
+          {
+          }
+          FormReleaseRecord_DataSetLevelReleaseRecord707
+          {
+            groupDepth: -1
+            column_SKU
+            {
+              columnId: 'SKU'
+              dataPath: 'SKU'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_ProductSubclassType
+            {
+              columnId: 'ProductSubclassType'
+              dataPath: 'ProductSubclassType'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_Qty
+            {
+              columnId: 'Qty'
+              dataPath: 'Qty'
+              dataType: 'number'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_Unit
+            {
+              columnId: 'Unit'
+              dataPath: 'Unit'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_OrgCode
+            {
+              columnId: 'OrgCode'
+              dataPath: 'OrgCode'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_WarehouseCode
+            {
+              columnId: 'WarehouseCode'
+              dataPath: 'WarehouseCode'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_DemandTime
+            {
+              columnId: 'DemandTime'
+              dataPath: 'DemandTime'
+              dataType: 'datetime'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_IssuingDate
+            {
+              columnId: 'IssuingDate'
+              dataPath: 'IssuingDate'
+              dataType: 'datetime'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormMaterialPurchase
+      {
+        title: 'QTIANMA_JITUAN::FormMaterialPurchase'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormMaterialPurchase'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 41
+          rowSpan: 9
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormMaterialPurchase_PanelMaterialPurchase354
+          {
+            sizeRatio: 1
+          }
+          FormMaterialPurchase_PanelMaterialPurchase
+          {
+            sizeRatio: 1
+          }
+          FormMaterialPurchase_PanelMaterialPurchase613
+          {
+            sizeRatio: 1
+          }
+          FormMaterialPurchase_ListMaterialPurchase
+          {
+          }
+          FormMaterialPurchase_DataSetLevelMaterialPurchase
+          {
+            groupDepth: -1
+            column_SKU
+            {
+              columnId: 'SKU'
+              dataPath: 'SKU'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_ProductSubclassType
+            {
+              columnId: 'ProductSubclassType'
+              dataPath: 'ProductSubclassType'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_Qty
+            {
+              columnId: 'Qty'
+              dataPath: 'Qty'
+              dataType: 'number'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_Unit
+            {
+              columnId: 'Unit'
+              dataPath: 'Unit'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_OrgCode
+            {
+              columnId: 'OrgCode'
+              dataPath: 'OrgCode'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_WarehouseCode
+            {
+              columnId: 'WarehouseCode'
+              dataPath: 'WarehouseCode'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_DemandTime
+            {
+              columnId: 'DemandTime'
+              dataPath: 'DemandTime'
+              dataType: 'datetime'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI
+      {
+        title: 'KPI Dashboard'
+        shown: true
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 1
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 0
+    image: 'CHART_DONUT'
+    description: ''
+  }
+  formatversion: 2
+  id: '鍐插噺'
+  name: '鍐插噺'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\345\241\253\344\272\247.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\345\241\253\344\272\247.vw"
new file mode 100644
index 0000000..12b8317
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\345\241\253\344\272\247.vw"
@@ -0,0 +1,607 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormCustomerAndForecastOrder
+      {
+        title: 'QTIANMA_JITUAN::FormCustomerAndForecastOrder'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormCustomerAndForecastOrder'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 1
+          columnSpan: 4
+        }
+        components
+        {
+          FormCustomerAndForecastOrder_PanelButton
+          {
+            sizeRatio: 1
+          }
+          FormCustomerAndForecastOrder_ListCustomerAndFillingCapacityOrder
+          {
+          }
+          FormCustomerAndForecastOrder_DataSetLevelCustomerAndFillingCapacityOrder
+          {
+            groupDepth: -1
+            column_VerNo
+            {
+              columnId: 'VerNo'
+              dataPath: 'VerNo'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_BusinessType
+            {
+              columnId: 'BusinessType'
+              dataPath: 'BusinessType'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_ServiceType
+            {
+              columnId: 'ServiceType'
+              dataPath: 'ServiceType'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'real'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_PanelBigSheetQuantity
+            {
+              columnId: 'PanelBigSheetQuantity'
+              dataPath: 'PanelBigSheetQuantity'
+              dataType: 'real'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_SalesAmount
+            {
+              columnId: 'SalesAmount'
+              dataPath: 'SalesAmount'
+              dataType: 'number'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_ForecastDemandDate
+            {
+              columnId: 'ForecastDemandDate'
+              dataPath: 'ForecastDemandDate'
+              dataType: 'date'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_DemandDate
+            {
+              columnId: 'DemandDate'
+              dataPath: 'DemandDate'
+              dataType: 'date'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormFillingCapacityOrder
+      {
+        title: 'QTIANMA_JITUAN::FormFillingCapacityOrder'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormFillingCapacityOrder'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 5
+          columnSpan: 8
+        }
+        components
+        {
+          FormFillingCapacityOrder_PanelFillingCapacityOrder
+          {
+            sizeRatio: 1
+          }
+          FormFillingCapacityOrder_ListFillingCapacityOrder
+          {
+          }
+          FormFillingCapacityOrder_DataSetLevelFillingCapacityOrder
+          {
+            groupDepth: -1
+            column_VerNo
+            {
+              columnId: 'VerNo'
+              dataPath: 'VerNo'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_BusinessType
+            {
+              columnId: 'BusinessType'
+              dataPath: 'BusinessType'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'real'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_PanelBigSheetQuantity
+            {
+              columnId: 'PanelBigSheetQuantity'
+              dataPath: 'PanelBigSheetQuantity'
+              dataType: 'real'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_SalesAmount
+            {
+              columnId: 'SalesAmount'
+              dataPath: 'SalesAmount'
+              dataType: 'number'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_ForecastDemandDate
+            {
+              columnId: 'ForecastDemandDate'
+              dataPath: 'ForecastDemandDate'
+              dataType: 'date'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_DemandDate
+            {
+              columnId: 'DemandDate'
+              dataPath: 'DemandDate'
+              dataType: 'date'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_OrderType
+            {
+              columnId: 'OrderType'
+              dataPath: 'OrderType'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormCustomerOrders
+      {
+        title: 'QLibMacroPlannerWebUI::FormCustomerOrders'
+        shown: true
+        componentID: 'QLibMacroPlannerWebUI::FormCustomerOrders'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 17
+          rowSpan: 17
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormCustomerOrders_PanelSalesDemands
+          {
+            sizeRatio: 1
+          }
+          FormCustomerOrders_PanelAllSalesDemands
+          {
+            sizeRatio: 2
+          }
+          FormCustomerOrders_ListSalesDemands
+          {
+          }
+          FormCustomerOrders_DataSetLevelSalesDemands
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_StockingPoint_MP_ID
+            {
+              columnId: 'StockingPoint_MP.ID'
+              dataPath: 'StockingPoint_MP.ID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegment_MP_Name
+            {
+              columnId: 'SalesSegment_MP.Name'
+              dataPath: 'SalesSegment_MP.Name'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerName
+            {
+              columnId: 'CustomerName'
+              dataPath: 'CustomerName'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_StartDate
+            {
+              columnId: 'StartDate'
+              dataPath: 'StartDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_Product_MP_ID
+            {
+              columnId: 'Product_MP.ID'
+              dataPath: 'Product_MP.ID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasure_MP_Name
+            {
+              columnId: 'UnitOfMeasure_MP.Name'
+              dataPath: 'UnitOfMeasure_MP.Name'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_FulfilledQuantity
+            {
+              columnId: 'FulfilledQuantity'
+              dataPath: 'FulfilledQuantity'
+              dataType: 'real'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_Fulfillment
+            {
+              columnId: 'Fulfillment'
+              dataPath: 'Fulfillment'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_IsFirmed
+            {
+              columnId: 'IsFirmed'
+              dataPath: 'IsFirmed'
+              dataType: 'boolean'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_IsEligibleForNetting
+            {
+              columnId: 'IsEligibleForNetting'
+              dataPath: 'IsEligibleForNetting'
+              dataType: 'boolean'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_PriceUoM
+            {
+              columnId: 'PriceUoM'
+              dataPath: 'PriceUoM'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+            column_OrderTag
+            {
+              columnId: 'OrderTag'
+              dataPath: 'OrderTag'
+              dataType: 'string'
+              index: 17
+              subtotals: ''
+              width: 150
+            }
+          }
+          FormCustomerOrders_PanelSDIP
+          {
+            sizeRatio: 1
+          }
+          FormCustomerOrders_ListSDIP
+          {
+          }
+          FormCustomerOrders_DataSetLevelSDIP
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_ImgIsRestricted
+            {
+              columnId: 'ImgIsRestricted'
+              dataPath: 'ImgIsRestricted'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_StartDate
+            {
+              columnId: 'StartDate'
+              dataPath: 'StartDate'
+              dataType: 'date'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_EndDate
+            {
+              columnId: 'EndDate'
+              dataPath: 'EndDate'
+              dataType: 'date'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_MasterSalesDemand_UnitOfMeasureName
+            {
+              columnId: 'MasterSalesDemand.UnitOfMeasureName'
+              dataPath: 'MasterSalesDemand.UnitOfMeasureName'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_QuantityInSalesDemandUOM
+            {
+              columnId: 'QuantityInSalesDemandUOM'
+              dataPath: 'QuantityInSalesDemandUOM'
+              dataType: 'real'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_FulfilledQuantityInSalesDemandUOM
+            {
+              columnId: 'FulfilledQuantityInSalesDemandUOM'
+              dataPath: 'FulfilledQuantityInSalesDemandUOM'
+              dataType: 'real'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Fulfillment
+            {
+              columnId: 'Fulfillment'
+              dataPath: 'Fulfillment'
+              dataType: 'string'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    image: 'BOOK_BLUE_VIEW'
+    page: ''
+    group: ''
+    index: 0
+    description: ''
+  }
+  formatversion: 2
+  id: '濉骇'
+  name: '濉骇'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\345\257\271\346\216\245ERP\350\277\233\350\241\214PR\351\207\212\346\224\276.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\345\257\271\346\216\245ERP\350\277\233\350\241\214PR\351\207\212\346\224\276.vw"
new file mode 100644
index 0000000..bc4d12c
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\345\257\271\346\216\245ERP\350\277\233\350\241\214PR\351\207\212\346\224\276.vw"
@@ -0,0 +1,177 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormWorkOrderType
+      {
+        title: 'QTIANMA_JITUAN::FormWorkOrderType'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormWorkOrderType'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 1
+          columnSpan: 3
+        }
+        components
+        {
+          FormWorkOrderType_ListWorkOrderType
+          {
+          }
+          FormWorkOrderType_DataSetLevelWorkOrderType
+          {
+            groupDepth: -1
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_TypeName
+            {
+              columnId: 'TypeName'
+              dataPath: 'TypeName'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormIssueWorkOrder
+      {
+        title: 'QTIANMA_JITUAN::FormIssueWorkOrder'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormIssueWorkOrder'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 4
+          columnSpan: 9
+        }
+        components
+        {
+          FormIssueWorkOrder_PanelButton
+          {
+            sizeRatio: 1
+          }
+          FormIssueWorkOrder_PanelIssueWorkOrder
+          {
+            sizeRatio: 1
+          }
+          FormIssueWorkOrder_ListIssueWorkOrder
+          {
+          }
+          FormIssueWorkOrder_DataSetLevelIssueWorkOrder
+          {
+            groupDepth: -1
+            column_EndDate
+            {
+              columnId: 'EndDate'
+              dataPath: 'EndDate'
+              dataType: 'date'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_MaterialDescription
+            {
+              columnId: 'MaterialDescription'
+              dataPath: 'MaterialDescription'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_OrganizationInfomation
+            {
+              columnId: 'OrganizationInfomation'
+              dataPath: 'OrganizationInfomation'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_PlannedQuantity
+            {
+              columnId: 'PlannedQuantity'
+              dataPath: 'PlannedQuantity'
+              dataType: 'real'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_ProductionWorkOrderNumber
+            {
+              columnId: 'ProductionWorkOrderNumber'
+              dataPath: 'ProductionWorkOrderNumber'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_ProductModel
+            {
+              columnId: 'ProductModel'
+              dataPath: 'ProductModel'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_StartDate
+            {
+              columnId: 'StartDate'
+              dataPath: 'StartDate'
+              dataType: 'date'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_WorkOrderStatus
+            {
+              columnId: 'WorkOrderStatus'
+              dataPath: 'WorkOrderStatus'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_WorkOrderType
+            {
+              columnId: 'WorkOrderType'
+              dataPath: 'WorkOrderType'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 0
+    image: 'INDUSTRIAL_ROBOT'
+    description: ''
+  }
+  formatversion: 2
+  id: '瀵规帴ERP杩涜PR閲婃斁'
+  name: '瀵规帴ERP杩涜PR閲婃斁'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\345\271\264\345\272\246\344\272\247\351\224\200\345\244\215\347\233\230.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\345\271\264\345\272\246\344\272\247\351\224\200\345\244\215\347\233\230.vw"
new file mode 100644
index 0000000..64db9ed
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\345\271\264\345\272\246\344\272\247\351\224\200\345\244\215\347\233\230.vw"
@@ -0,0 +1,777 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormCapacityAndSaleBudge
+      {
+        title: 'QTIANMA_JITUAN::FormCapacityAndSaleBudge'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormCapacityAndSaleBudge'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 4
+          columnPosition: 1
+          columnSpan: 2
+        }
+        components
+        {
+          FormCapacityAndSaleBudge_ListCapacityAndSaleBudge
+          {
+          }
+          FormCapacityAndSaleBudge_DataSetLevelCapacityAndSaleBudge
+          {
+            groupDepth: -1
+            column_Deleted
+            {
+              columnId: 'Deleted'
+              dataPath: 'Deleted'
+              dataType: 'boolean'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_YearNo
+            {
+              columnId: 'YearNo'
+              dataPath: 'YearNo'
+              dataType: 'number'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_OrgCode
+            {
+              columnId: 'OrgCode'
+              dataPath: 'OrgCode'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_DisplayTechnology
+            {
+              columnId: 'DisplayTechnology'
+              dataPath: 'DisplayTechnology'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_BusinessType
+            {
+              columnId: 'BusinessType'
+              dataPath: 'BusinessType'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_LineAndSpecification
+            {
+              columnId: 'LineAndSpecification'
+              dataPath: 'LineAndSpecification'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_ProductCode
+            {
+              columnId: 'ProductCode'
+              dataPath: 'ProductCode'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_PlaceOfProductionOfArray
+            {
+              columnId: 'PlaceOfProductionOfArray'
+              dataPath: 'PlaceOfProductionOfArray'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_PlaceOfProductionOfEvaporation
+            {
+              columnId: 'PlaceOfProductionOfEvaporation'
+              dataPath: 'PlaceOfProductionOfEvaporation'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_Resolution
+            {
+              columnId: 'Resolution'
+              dataPath: 'Resolution'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_ShippingForm
+            {
+              columnId: 'ShippingForm'
+              dataPath: 'ShippingForm'
+              dataType: 'string'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_NumberOfCut
+            {
+              columnId: 'NumberOfCut'
+              dataPath: 'NumberOfCut'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityEquivalent
+            {
+              columnId: 'CapacityEquivalent'
+              dataPath: 'CapacityEquivalent'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_NumberOfMask
+            {
+              columnId: 'NumberOfMask'
+              dataPath: 'NumberOfMask'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth1
+            {
+              columnId: 'CapacityInPCSInMonth1'
+              dataPath: 'CapacityInPCSInMonth1'
+              dataType: 'real'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth2
+            {
+              columnId: 'CapacityInPCSInMonth2'
+              dataPath: 'CapacityInPCSInMonth2'
+              dataType: 'real'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth3
+            {
+              columnId: 'CapacityInPCSInMonth3'
+              dataPath: 'CapacityInPCSInMonth3'
+              dataType: 'real'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth4
+            {
+              columnId: 'CapacityInPCSInMonth4'
+              dataPath: 'CapacityInPCSInMonth4'
+              dataType: 'real'
+              index: 17
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth5
+            {
+              columnId: 'CapacityInPCSInMonth5'
+              dataPath: 'CapacityInPCSInMonth5'
+              dataType: 'real'
+              index: 18
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth6
+            {
+              columnId: 'CapacityInPCSInMonth6'
+              dataPath: 'CapacityInPCSInMonth6'
+              dataType: 'real'
+              index: 19
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth7
+            {
+              columnId: 'CapacityInPCSInMonth7'
+              dataPath: 'CapacityInPCSInMonth7'
+              dataType: 'real'
+              index: 20
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth8
+            {
+              columnId: 'CapacityInPCSInMonth8'
+              dataPath: 'CapacityInPCSInMonth8'
+              dataType: 'real'
+              index: 21
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth9
+            {
+              columnId: 'CapacityInPCSInMonth9'
+              dataPath: 'CapacityInPCSInMonth9'
+              dataType: 'real'
+              index: 22
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth10
+            {
+              columnId: 'CapacityInPCSInMonth10'
+              dataPath: 'CapacityInPCSInMonth10'
+              dataType: 'real'
+              index: 23
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth11
+            {
+              columnId: 'CapacityInPCSInMonth11'
+              dataPath: 'CapacityInPCSInMonth11'
+              dataType: 'real'
+              index: 24
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth12
+            {
+              columnId: 'CapacityInPCSInMonth12'
+              dataPath: 'CapacityInPCSInMonth12'
+              dataType: 'real'
+              index: 25
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSTotal
+            {
+              columnId: 'CapacityInPCSTotal'
+              dataPath: 'CapacityInPCSTotal'
+              dataType: 'real'
+              index: 26
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth1
+            {
+              columnId: 'CapacityInSheetInMonth1'
+              dataPath: 'CapacityInSheetInMonth1'
+              dataType: 'real'
+              index: 27
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth2
+            {
+              columnId: 'CapacityInSheetInMonth2'
+              dataPath: 'CapacityInSheetInMonth2'
+              dataType: 'real'
+              index: 28
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth3
+            {
+              columnId: 'CapacityInSheetInMonth3'
+              dataPath: 'CapacityInSheetInMonth3'
+              dataType: 'real'
+              index: 29
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth4
+            {
+              columnId: 'CapacityInSheetInMonth4'
+              dataPath: 'CapacityInSheetInMonth4'
+              dataType: 'real'
+              index: 30
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth5
+            {
+              columnId: 'CapacityInSheetInMonth5'
+              dataPath: 'CapacityInSheetInMonth5'
+              dataType: 'real'
+              index: 31
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth6
+            {
+              columnId: 'CapacityInSheetInMonth6'
+              dataPath: 'CapacityInSheetInMonth6'
+              dataType: 'real'
+              index: 32
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth7
+            {
+              columnId: 'CapacityInSheetInMonth7'
+              dataPath: 'CapacityInSheetInMonth7'
+              dataType: 'real'
+              index: 33
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth8
+            {
+              columnId: 'CapacityInSheetInMonth8'
+              dataPath: 'CapacityInSheetInMonth8'
+              dataType: 'real'
+              index: 34
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth9
+            {
+              columnId: 'CapacityInSheetInMonth9'
+              dataPath: 'CapacityInSheetInMonth9'
+              dataType: 'real'
+              index: 35
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth10
+            {
+              columnId: 'CapacityInSheetInMonth10'
+              dataPath: 'CapacityInSheetInMonth10'
+              dataType: 'real'
+              index: 36
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth11
+            {
+              columnId: 'CapacityInSheetInMonth11'
+              dataPath: 'CapacityInSheetInMonth11'
+              dataType: 'real'
+              index: 37
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth12
+            {
+              columnId: 'CapacityInSheetInMonth12'
+              dataPath: 'CapacityInSheetInMonth12'
+              dataType: 'real'
+              index: 38
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetTotal
+            {
+              columnId: 'CapacityInSheetTotal'
+              dataPath: 'CapacityInSheetTotal'
+              dataType: 'real'
+              index: 39
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth1
+            {
+              columnId: 'SaleAmountInMonth1'
+              dataPath: 'SaleAmountInMonth1'
+              dataType: 'real'
+              index: 40
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth2
+            {
+              columnId: 'SaleAmountInMonth2'
+              dataPath: 'SaleAmountInMonth2'
+              dataType: 'real'
+              index: 41
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth3
+            {
+              columnId: 'SaleAmountInMonth3'
+              dataPath: 'SaleAmountInMonth3'
+              dataType: 'real'
+              index: 42
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth5
+            {
+              columnId: 'SaleAmountInMonth5'
+              dataPath: 'SaleAmountInMonth5'
+              dataType: 'real'
+              index: 43
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth4
+            {
+              columnId: 'SaleAmountInMonth4'
+              dataPath: 'SaleAmountInMonth4'
+              dataType: 'real'
+              index: 44
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth6
+            {
+              columnId: 'SaleAmountInMonth6'
+              dataPath: 'SaleAmountInMonth6'
+              dataType: 'real'
+              index: 45
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth7
+            {
+              columnId: 'SaleAmountInMonth7'
+              dataPath: 'SaleAmountInMonth7'
+              dataType: 'real'
+              index: 46
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth8
+            {
+              columnId: 'SaleAmountInMonth8'
+              dataPath: 'SaleAmountInMonth8'
+              dataType: 'real'
+              index: 47
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth9
+            {
+              columnId: 'SaleAmountInMonth9'
+              dataPath: 'SaleAmountInMonth9'
+              dataType: 'real'
+              index: 48
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth10
+            {
+              columnId: 'SaleAmountInMonth10'
+              dataPath: 'SaleAmountInMonth10'
+              dataType: 'real'
+              index: 49
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth11
+            {
+              columnId: 'SaleAmountInMonth11'
+              dataPath: 'SaleAmountInMonth11'
+              dataType: 'real'
+              index: 50
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth12
+            {
+              columnId: 'SaleAmountInMonth12'
+              dataPath: 'SaleAmountInMonth12'
+              dataType: 'real'
+              index: 51
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountTotal
+            {
+              columnId: 'SaleAmountTotal'
+              dataPath: 'SaleAmountTotal'
+              dataType: 'real'
+              index: 52
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormCapacityAndSaleBudgeCompare
+      {
+        title: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeCompare'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeCompare'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 5
+          rowSpan: 10
+          columnPosition: 5
+          columnSpan: 8
+        }
+        components
+        {
+          FormCapacityAndSaleBudgeCompare_MatrixEditorCapacityAndSaleBudgeCompare
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeCompare.MatrixEditorCapacityAndSaleBudgeCompare'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_CellContent
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CellContent'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'ColumnNo'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'RowNo'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormCapacityAndSaleBudgeFilterItem
+      {
+        title: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterItem'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterItem'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 4
+          columnPosition: 3
+          columnSpan: 2
+        }
+        components
+        {
+          FormCapacityAndSaleBudgeFilterItem_ListCapacityAndSaleBudgeFilterItem
+          {
+          }
+          FormCapacityAndSaleBudgeFilterItem_DataSetLevelCapacityAndSaleBudgeFilterItem
+          {
+            groupDepth: -1
+            column_ItemName
+            {
+              columnId: 'ItemName'
+              dataPath: 'ItemName'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormCapacityAndSaleBudgeChart
+      {
+        title: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeChart'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeChart'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 5
+          rowSpan: 11
+          columnPosition: 1
+          columnSpan: 4
+        }
+        components
+        {
+          FormCapacityAndSaleBudgeChart_ChartCapacityAndSaleBudgeChart
+          {
+            SynchronizationGroup: ''
+          }
+          FormCapacityAndSaleBudgeChart_ChartCapacityAndSaleBudgeChart_legend
+          {
+            LegendItems:
+            [
+            ]
+          }
+        }
+      }
+      form_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+      {
+        title: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 4
+          columnPosition: 5
+          columnSpan: 2
+        }
+        components
+        {
+          FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+          {
+          }
+          FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_DataSetLevelCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+          {
+            groupDepth: -1
+            column_PlaceOfProductionOfArray
+            {
+              columnId: 'PlaceOfProductionOfArray'
+              dataPath: 'PlaceOfProductionOfArray'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormCapacityAndSaleBudgeFilterYear
+      {
+        title: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterYear'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterYear'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 4
+          columnPosition: 7
+          columnSpan: 2
+        }
+        components
+        {
+          FormCapacityAndSaleBudgeFilterYear_ListCapacityAndSaleBudgeFilterYear
+          {
+          }
+          FormCapacityAndSaleBudgeFilterYear_DataSetLevelCapacityAndSaleBudgeFilterYear
+          {
+            groupDepth: -1
+            column_YearNo
+            {
+              columnId: 'YearNo'
+              dataPath: 'YearNo'
+              dataType: 'number'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormCapacityAndSaleBudgeFilterBusinessType
+      {
+        title: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterBusinessType'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterBusinessType'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 4
+          columnPosition: 11
+          columnSpan: 2
+        }
+        components
+        {
+          FormCapacityAndSaleBudgeFilterBusinessType_ListCapacityAndSaleBudgeFilterBusinessType
+          {
+          }
+          FormCapacityAndSaleBudgeFilterBusinessType_DataSetLevelCapacityAndSaleBudgeFilterBusinessType
+          {
+            groupDepth: -1
+            column_BusinessType
+            {
+              columnId: 'BusinessType'
+              dataPath: 'BusinessType'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormCapacityAndSaleBudgeFilterMonth
+      {
+        title: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterMonth'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterMonth'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 4
+          columnPosition: 9
+          columnSpan: 2
+        }
+        components
+        {
+          FormCapacityAndSaleBudgeFilterMonth_ListCapacityAndSaleBudgeFilterMonth
+          {
+          }
+          FormCapacityAndSaleBudgeFilterMonth_DataSetLevelCapacityAndSaleBudgeFilterMonth
+          {
+            groupDepth: -1
+            column_MonthNo
+            {
+              columnId: 'MonthNo'
+              dataPath: 'MonthNo'
+              dataType: 'number'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    image: 'PIG'
+    page: ''
+    group: ''
+    index: 0
+    description: ''
+  }
+  formatversion: 2
+  id: '骞村害浜ч攢澶嶇洏'
+  name: '骞村害浜ч攢澶嶇洏'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\346\216\245\345\217\243\346\265\213\350\257\225.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\346\216\245\345\217\243\346\265\213\350\257\225.vw"
index d4e8c6a..31929b6 100644
--- "a/_Main/UI/MacroPlannerWebApp/Views/\346\216\245\345\217\243\346\265\213\350\257\225.vw"
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\346\216\245\345\217\243\346\265\213\350\257\225.vw"
@@ -152,7 +152,7 @@
         {
           mode: 'open'
           rowPosition: 1
-          rowSpan: 16
+          rowSpan: 23
           columnPosition: 7
           columnSpan: 6
         }
@@ -203,16 +203,991 @@
               }
             }
           }
+          FormShowInterfaceData_PanelInterfaceDataDisplayContent
+          {
+            sizeRatio: 1
+            activeChild: 'PanelCustomOrder'
+          }
+          FormShowInterfaceData_PanelCustomOrder
+          {
+            sizeRatio: 1
+          }
+          FormShowInterfaceData_ListCustomOrder
+          {
+          }
+          FormShowInterfaceData_DataSetLevelCustomOrder
+          {
+            groupDepth: -1
+            column_BusinessType
+            {
+              columnId: 'BusinessType'
+              dataPath: 'BusinessType'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsAvailable
+            {
+              columnId: 'IsAvailable'
+              dataPath: 'IsAvailable'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDate
+            {
+              columnId: 'OrderDate'
+              dataPath: 'OrderDate'
+              dataType: 'date'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrderTime
+            {
+              columnId: 'OrderTime'
+              dataPath: 'OrderTime'
+              dataType: 'date'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_OrderType
+            {
+              columnId: 'OrderType'
+              dataPath: 'OrderType'
+              dataType: 'string'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_ProductGrade
+            {
+              columnId: 'ProductGrade'
+              dataPath: 'ProductGrade'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'real'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+            column_SegmentPriority
+            {
+              columnId: 'SegmentPriority'
+              dataPath: 'SegmentPriority'
+              dataType: 'string'
+              index: 17
+              subtotals: ''
+              width: 150
+            }
+            column_SheetProfitability
+            {
+              columnId: 'SheetProfitability'
+              dataPath: 'SheetProfitability'
+              dataType: 'string'
+              index: 18
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 19
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 20
+              subtotals: ''
+              width: 150
+            }
+          }
+          FormShowInterfaceData_PanelForecast
+          {
+            sizeRatio: 1
+          }
+          FormShowInterfaceData_ListForecast
+          {
+          }
+          FormShowInterfaceData_DataSetLevelForecast
+          {
+            groupDepth: -1
+            column_BusinessType
+            {
+              columnId: 'BusinessType'
+              dataPath: 'BusinessType'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_EndDate
+            {
+              columnId: 'EndDate'
+              dataPath: 'EndDate'
+              dataType: 'date'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'real'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_StartDate
+            {
+              columnId: 'StartDate'
+              dataPath: 'StartDate'
+              dataType: 'date'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+          }
+          FormShowInterfaceData_PanelUnitOfMeasure_MP
+          {
+            sizeRatio: 1
+          }
+          FormShowInterfaceData_ListUnitOfMeasure_MP
+          {
+          }
+          FormShowInterfaceData_DataSetLevelUnitOfMeasure_MP
+          {
+            groupDepth: -1
+            column_IsDefault
+            {
+              columnId: 'IsDefault'
+              dataPath: 'IsDefault'
+              dataType: 'boolean'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+          }
+          FormShowInterfaceData_PanelSalesSegment_MP
+          {
+            sizeRatio: 1
+          }
+          FormShowInterfaceData_ListInterfaceDataDisplayContent
+          {
+          }
+          FormShowInterfaceData_DataSetLevelInterfaceDataDisplayContent
+          {
+            groupDepth: -1
+            column_BusinessType
+            {
+              columnId: 'BusinessType'
+              dataPath: 'BusinessType'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_DisplayIndex
+            {
+              columnId: 'DisplayIndex'
+              dataPath: 'DisplayIndex'
+              dataType: 'number'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ParentName
+            {
+              columnId: 'ParentName'
+              dataPath: 'ParentName'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+          }
+          FormShowInterfaceData_PanelProduct_MP
+          {
+            sizeRatio: 1
+          }
+          FormShowInterfaceData_ListProduct_MP
+          {
+          }
+          FormShowInterfaceData_DataSetLevelProduct_MP
+          {
+            groupDepth: -1
+            column_BOMCount
+            {
+              columnId: 'BOMCount'
+              dataPath: 'BOMCount'
+              dataType: 'number'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_BusinessType
+            {
+              columnId: 'BusinessType'
+              dataPath: 'BusinessType'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CommonBusiness
+            {
+              columnId: 'CommonBusiness'
+              dataPath: 'CommonBusiness'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_EndDate
+            {
+              columnId: 'EndDate'
+              dataPath: 'EndDate'
+              dataType: 'date'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsCommon
+            {
+              columnId: 'IsCommon'
+              dataPath: 'IsCommon'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_IsLinkedWithFinishedGood
+            {
+              columnId: 'IsLinkedWithFinishedGood'
+              dataPath: 'IsLinkedWithFinishedGood'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_KeyProduct
+            {
+              columnId: 'KeyProduct'
+              dataPath: 'KeyProduct'
+              dataType: 'boolean'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_Notes
+            {
+              columnId: 'Notes'
+              dataPath: 'Notes'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_ProductMajorType
+            {
+              columnId: 'ProductMajorType'
+              dataPath: 'ProductMajorType'
+              dataType: 'string'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_ProductSubclassType
+            {
+              columnId: 'ProductSubclassType'
+              dataPath: 'ProductSubclassType'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ShelfLife
+            {
+              columnId: 'ShelfLife'
+              dataPath: 'ShelfLife'
+              dataType: 'real'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+          }
+          FormShowInterfaceData_PanelConversionFactor
+          {
+            sizeRatio: 1
+          }
+          FormShowInterfaceData_ListConversionFactor
+          {
+          }
+          FormShowInterfaceData_DataSetLevelConversionFactor
+          {
+            groupDepth: -1
+            column_Factor
+            {
+              columnId: 'Factor'
+              dataPath: 'Factor'
+              dataType: 'real'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_IsEnabled
+            {
+              columnId: 'IsEnabled'
+              dataPath: 'IsEnabled'
+              dataType: 'boolean'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_SourceUnitOfMeasureName
+            {
+              columnId: 'SourceUnitOfMeasureName'
+              dataPath: 'SourceUnitOfMeasureName'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_TargetUnitOfMeasureName
+            {
+              columnId: 'TargetUnitOfMeasureName'
+              dataPath: 'TargetUnitOfMeasureName'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+          }
+          FormShowInterfaceData_PanelOperation
+          {
+            sizeRatio: 1
+          }
+          FormShowInterfaceData_ListOperation
+          {
+          }
+          FormShowInterfaceData_DataSetLevelOperation
+          {
+            groupDepth: -1
+            column_ActualCapacity
+            {
+              columnId: 'ActualCapacity'
+              dataPath: 'ActualCapacity'
+              dataType: 'real'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_BusinessType
+            {
+              columnId: 'BusinessType'
+              dataPath: 'BusinessType'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_DestinationOrganizationId
+            {
+              columnId: 'DestinationOrganizationId'
+              dataPath: 'DestinationOrganizationId'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_IsLinkedWithFinishedGood
+            {
+              columnId: 'IsLinkedWithFinishedGood'
+              dataPath: 'IsLinkedWithFinishedGood'
+              dataType: 'boolean'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_Line
+            {
+              columnId: 'Line'
+              dataPath: 'Line'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_MaximumQuantity
+            {
+              columnId: 'MaximumQuantity'
+              dataPath: 'MaximumQuantity'
+              dataType: 'number'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_MinimumQuantity
+            {
+              columnId: 'MinimumQuantity'
+              dataPath: 'MinimumQuantity'
+              dataType: 'number'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrganCode
+            {
+              columnId: 'OrganCode'
+              dataPath: 'OrganCode'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrganId
+            {
+              columnId: 'OrganId'
+              dataPath: 'OrganId'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrganName
+            {
+              columnId: 'OrganName'
+              dataPath: 'OrganName'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_PlantName
+            {
+              columnId: 'PlantName'
+              dataPath: 'PlantName'
+              dataType: 'string'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_ProcessSection
+            {
+              columnId: 'ProcessSection'
+              dataPath: 'ProcessSection'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_SequenceNumber
+            {
+              columnId: 'SequenceNumber'
+              dataPath: 'SequenceNumber'
+              dataType: 'number'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_UserLeadTime
+            {
+              columnId: 'UserLeadTime'
+              dataPath: 'UserLeadTime'
+              dataType: 'real'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+          }
+          FormShowInterfaceData_PanelOperationBOM
+          {
+            sizeRatio: 1
+          }
+          FormShowInterfaceData_ListOperationBOM
+          {
+          }
+          FormShowInterfaceData_DataSetLevelOperationBOM
+          {
+            groupDepth: -1
+            column_AlternativeMaterialCode
+            {
+              columnId: 'AlternativeMaterialCode'
+              dataPath: 'AlternativeMaterialCode'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_AlternativeMaterialType
+            {
+              columnId: 'AlternativeMaterialType'
+              dataPath: 'AlternativeMaterialType'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_AlternativeMaterialUnit
+            {
+              columnId: 'AlternativeMaterialUnit'
+              dataPath: 'AlternativeMaterialUnit'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_AlternativeRate
+            {
+              columnId: 'AlternativeRate'
+              dataPath: 'AlternativeRate'
+              dataType: 'real'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_BusinessType
+            {
+              columnId: 'BusinessType'
+              dataPath: 'BusinessType'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_ComponentCode
+            {
+              columnId: 'ComponentCode'
+              dataPath: 'ComponentCode'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_ComponentDescription
+            {
+              columnId: 'ComponentDescription'
+              dataPath: 'ComponentDescription'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_ComponentOutputRate
+            {
+              columnId: 'ComponentOutputRate'
+              dataPath: 'ComponentOutputRate'
+              dataType: 'real'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_ComponentType
+            {
+              columnId: 'ComponentType'
+              dataPath: 'ComponentType'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_ComponentUnit
+            {
+              columnId: 'ComponentUnit'
+              dataPath: 'ComponentUnit'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_ComponentUnitDescription
+            {
+              columnId: 'ComponentUnitDescription'
+              dataPath: 'ComponentUnitDescription'
+              dataType: 'string'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_DescriptionOfAlternativeMaterial
+            {
+              columnId: 'DescriptionOfAlternativeMaterial'
+              dataPath: 'DescriptionOfAlternativeMaterial'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_DescriptionOfAlternativeMaterialUnits
+            {
+              columnId: 'DescriptionOfAlternativeMaterialUnits'
+              dataPath: 'DescriptionOfAlternativeMaterialUnits'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_IsLinkedWithFinishedGood
+            {
+              columnId: 'IsLinkedWithFinishedGood'
+              dataPath: 'IsLinkedWithFinishedGood'
+              dataType: 'boolean'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_MaterialSystem
+            {
+              columnId: 'MaterialSystem'
+              dataPath: 'MaterialSystem'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_OrganCode
+            {
+              columnId: 'OrganCode'
+              dataPath: 'OrganCode'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_ProcessSection
+            {
+              columnId: 'ProcessSection'
+              dataPath: 'ProcessSection'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+            column_ProductCode
+            {
+              columnId: 'ProductCode'
+              dataPath: 'ProductCode'
+              dataType: 'string'
+              index: 17
+              subtotals: ''
+              width: 150
+            }
+            column_ProductDescribe
+            {
+              columnId: 'ProductDescribe'
+              dataPath: 'ProductDescribe'
+              dataType: 'string'
+              index: 18
+              subtotals: ''
+              width: 150
+            }
+            column_ProductType
+            {
+              columnId: 'ProductType'
+              dataPath: 'ProductType'
+              dataType: 'string'
+              index: 19
+              subtotals: ''
+              width: 150
+            }
+            column_ProductUnitDescription
+            {
+              columnId: 'ProductUnitDescription'
+              dataPath: 'ProductUnitDescription'
+              dataType: 'string'
+              index: 20
+              subtotals: ''
+              width: 150
+            }
+            column_SubstitutionRelationship
+            {
+              columnId: 'SubstitutionRelationship'
+              dataPath: 'SubstitutionRelationship'
+              dataType: 'string'
+              index: 21
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 22
+              subtotals: ''
+              width: 150
+            }
+            column_UnitUsageOfComponents
+            {
+              columnId: 'UnitUsageOfComponents'
+              dataPath: 'UnitUsageOfComponents'
+              dataType: 'real'
+              index: 23
+              subtotals: ''
+              width: 150
+            }
+          }
         }
       }
     }
     userconfigurableinformation
     {
     }
-    image: 'SKIN_TIGER'
     page: ''
     group: ''
     index: 0
+    image: 'SKIN_TIGER'
     description: ''
   }
   formatversion: 2
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\347\211\251\346\226\231\346\240\207\347\255\276_\350\256\241\345\210\222\347\255\226\347\225\245.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\347\211\251\346\226\231\346\240\207\347\255\276_\350\256\241\345\210\222\347\255\226\347\225\245.vw"
new file mode 100644
index 0000000..4a663f4
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\347\211\251\346\226\231\346\240\207\347\255\276_\350\256\241\345\210\222\347\255\226\347\225\245.vw"
@@ -0,0 +1,262 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormMaterialLabelingAndPlanningStrategy
+      {
+        title: 'QTIANMA_JITUAN::FormMaterialLabelingAndPlanningStrategy'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormMaterialLabelingAndPlanningStrategy'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormMaterialLabelingAndPlanningStrategy_PanelMaterialLabelingAndPlanningStrategy
+          {
+            sizeRatio: 1
+          }
+          FormMaterialLabelingAndPlanningStrategy_PanelMaterial
+          {
+            sizeRatio: 1
+          }
+          FormMaterialLabelingAndPlanningStrategy_PanelMaterialOperationButton
+          {
+            sizeRatio: 1
+          }
+          FormMaterialLabelingAndPlanningStrategy_PanelMaterialExportAndImport
+          {
+            sizeRatio: 1
+          }
+          FormMaterialLabelingAndPlanningStrategy_ListMaterialMaterialLabelingAndPlanningStrategy
+          {
+          }
+          FormMaterialLabelingAndPlanningStrategy_DataSetLevelMaterial679
+          {
+            groupDepth: -1
+            column_SerialNumber
+            {
+              columnId: 'SerialNumber'
+              dataPath: 'SerialNumber'
+              dataType: 'number'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_BusinessType
+            {
+              columnId: 'BusinessType'
+              dataPath: 'BusinessType'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_MatCode
+            {
+              columnId: 'MatCode'
+              dataPath: 'MatCode'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_MatName
+            {
+              columnId: 'MatName'
+              dataPath: 'MatName'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_MatType
+            {
+              columnId: 'MatType'
+              dataPath: 'MatType'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_MatArrivalLT
+            {
+              columnId: 'MatArrivalLT'
+              dataPath: 'MatArrivalLT'
+              dataType: 'real'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_ProductCount
+            {
+              columnId: 'ProductCount'
+              dataPath: 'ProductCount'
+              dataType: 'number'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_MinProdDeliverLT
+            {
+              columnId: 'MinProdDeliverLT'
+              dataPath: 'MinProdDeliverLT'
+              dataType: 'real'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_FlagLongTerm
+            {
+              columnId: 'FlagLongTerm'
+              dataPath: 'FlagLongTerm'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_FlagGeneric
+            {
+              columnId: 'FlagGeneric'
+              dataPath: 'FlagGeneric'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_PlanningStrategyAuto
+            {
+              columnId: 'PlanningStrategyAuto'
+              dataPath: 'PlanningStrategyAuto'
+              dataType: 'string'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_PlanningStrategyCustom
+            {
+              columnId: 'PlanningStrategyCustom'
+              dataPath: 'PlanningStrategyCustom'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_UpdateBy
+            {
+              columnId: 'UpdateBy'
+              dataPath: 'UpdateBy'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_UpdateTime
+            {
+              columnId: 'UpdateTime'
+              dataPath: 'UpdateTime'
+              dataType: 'datetime'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_MinimumNumberOfDaysInStock
+            {
+              columnId: 'MinimumNumberOfDaysInStock'
+              dataPath: 'MinimumNumberOfDaysInStock'
+              dataType: 'number'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_MaximumNumberOfDaysInInventory
+            {
+              columnId: 'MaximumNumberOfDaysInInventory'
+              dataPath: 'MaximumNumberOfDaysInInventory'
+              dataType: 'number'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+          }
+          FormMaterialLabelingAndPlanningStrategy_PanelChildMaterial
+          {
+            sizeRatio: 1
+          }
+          FormMaterialLabelingAndPlanningStrategy_ListChildMaterial
+          {
+          }
+          FormMaterialLabelingAndPlanningStrategy_DataSetLevelChildMaterial
+          {
+            groupDepth: -1
+            column_MatCode
+            {
+              columnId: 'MatCode'
+              dataPath: 'MatCode'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_ProductCode
+            {
+              columnId: 'ProductCode'
+              dataPath: 'ProductCode'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_StandardLT
+            {
+              columnId: 'StandardLT'
+              dataPath: 'StandardLT'
+              dataType: 'real'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ProductDesc
+            {
+              columnId: 'ProductDesc'
+              dataPath: 'ProductDesc'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_Comment
+            {
+              columnId: 'Comment'
+              dataPath: 'Comment'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    image: 'GOLDFISH'
+    page: ''
+    group: ''
+    index: 0
+    description: ''
+  }
+  formatversion: 2
+  id: '鐗╂枡鏍囩_璁″垝绛栫暐'
+  name: '鐗╂枡鏍囩&璁″垝绛栫暐'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\350\256\242\345\215\225\351\224\201\345\256\232_\350\247\243\351\224\201.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\350\256\242\345\215\225\351\224\201\345\256\232_\350\247\243\351\224\201.vw"
new file mode 100644
index 0000000..86a57f0
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\350\256\242\345\215\225\351\224\201\345\256\232_\350\247\243\351\224\201.vw"
@@ -0,0 +1,414 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormOrderLock
+      {
+        title: 'QTIANMA_JITUAN::FormOrderLock'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormOrderLock'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormOrderLock_PanelOrderLock
+          {
+            sizeRatio: 1
+          }
+          FormOrderLock_PanelOrderLockHeader
+          {
+            sizeRatio: 1
+          }
+          FormOrderLock_PanelOrderLockOrder
+          {
+            sizeRatio: 1
+          }
+          FormOrderLock_ListOrderLock
+          {
+          }
+          FormOrderLock_DataSetLevelOrderLock
+          {
+            groupDepth: -1
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerName
+            {
+              columnId: 'CustomerName'
+              dataPath: 'CustomerName'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'real'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_StartDate
+            {
+              columnId: 'StartDate'
+              dataPath: 'StartDate'
+              dataType: 'date'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_IsLocked
+            {
+              columnId: 'IsLocked'
+              dataPath: 'IsLocked'
+              dataType: 'boolean'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_First_AsPlanningBaseSalesDemandInPeriod_End
+            {
+              columnId: 'First.AsPlanningBaseSalesDemandInPeriod.End'
+              dataPath: 'First.AsPlanningBaseSalesDemandInPeriod.End'
+              dataType: 'datetime'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_LastModify
+            {
+              columnId: 'LastModify'
+              dataPath: 'LastModify'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_LastModifyTime
+            {
+              columnId: 'LastModifyTime'
+              dataPath: 'LastModifyTime'
+              dataType: 'datetime'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+          }
+          FormOrderLock_PanelOrderLockPlanning
+          {
+            sizeRatio: 1
+          }
+          FormOrderLock_PanelMatrix
+          {
+            sizeRatio: 1
+          }
+          FormOrderLock_MatrixEditorProductPlanning
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QTIANMA_JITUAN::FormOrderLock.MatrixEditorProductPlanning'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_DisplaySupplyQuantity
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DisplaySupplyQuantity'
+                    }
+                    attribute_DependentDemandAndSalesDemandQuantity
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 1
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DependentDemandAndSalesDemandQuantity'
+                    }
+                    attribute_TargetInventoryLevel
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 2
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'TargetInventoryLevel'
+                    }
+                    attribute_InventoryLevelEnd
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 3
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'InventoryLevelEnd'
+                    }
+                    attribute_StockLevelInDays
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 4
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'StockLevelInDays'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Start'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Product_MP.DisplayIndex';datamember:'Name'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormOrderLockLog
+      {
+        title: 'QTIANMA_JITUAN::FormOrderLockLog'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormOrderLockLog'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 9
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormOrderLockLog_PanelOrderLockLog
+          {
+            sizeRatio: 1
+          }
+          FormOrderLockLog_ListOrderLockLog
+          {
+          }
+          FormOrderLockLog_DataSetLevelOrderLockLog
+          {
+            groupDepth: -1
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerName
+            {
+              columnId: 'CustomerName'
+              dataPath: 'CustomerName'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'real'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_EndDate
+            {
+              columnId: 'EndDate'
+              dataPath: 'EndDate'
+              dataType: 'date'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_IsLocked
+            {
+              columnId: 'IsLocked'
+              dataPath: 'IsLocked'
+              dataType: 'boolean'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_End
+            {
+              columnId: 'End'
+              dataPath: 'End'
+              dataType: 'date'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_LastModify
+            {
+              columnId: 'LastModify'
+              dataPath: 'LastModify'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_LastModifyTime
+            {
+              columnId: 'LastModifyTime'
+              dataPath: 'LastModifyTime'
+              dataType: 'datetime'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Notes
+            {
+              columnId: 'Notes'
+              dataPath: 'Notes'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 0
+    image: 'TEXT_LOCK'
+    description: ''
+  }
+  formatversion: 2
+  id: '璁㈠崟閿佸畾_瑙i攣'
+  name: '璁㈠崟閿佸畾&瑙i攣'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\351\235\242\346\235\277\346\213\211\346\226\231_\345\220\204\344\272\213\344\270\232\351\203\250\346\223\215\344\275\234.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\351\235\242\346\235\277\346\213\211\346\226\231_\345\220\204\344\272\213\344\270\232\351\203\250\346\223\215\344\275\234.vw"
new file mode 100644
index 0000000..ae0a867
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\351\235\242\346\235\277\346\213\211\346\226\231_\345\220\204\344\272\213\344\270\232\351\203\250\346\223\215\344\275\234.vw"
@@ -0,0 +1,94 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormPanelPullPlanReport
+      {
+        title: 'QTIANMA_JITUAN::FormPanelPullPlanReport'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelPullPlanReport'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormPanelPullPlanReport_PanelPanelPullPlanReport
+          {
+            sizeRatio: 1
+          }
+          FormPanelPullPlanReport_PanelFunctionButtons
+          {
+            sizeRatio: 1
+          }
+          FormPanelPullPlanReport_PanelData
+          {
+            sizeRatio: 1
+          }
+          FormPanelPullPlanReport_ListData
+          {
+          }
+          FormPanelPullPlanReport_DataSetLevelData
+          {
+            groupDepth: -1
+            column_PanelModel
+            {
+              columnId: 'PanelModel'
+              dataPath: 'PanelModel'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_MaterialDescription
+            {
+              columnId: 'MaterialDescription'
+              dataPath: 'MaterialDescription'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_StartDate
+            {
+              columnId: 'StartDate'
+              dataPath: 'StartDate'
+              dataType: 'date'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_DemandQuantity
+            {
+              columnId: 'DemandQuantity'
+              dataPath: 'DemandQuantity'
+              dataType: 'real'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    image: 'BARREL'
+    page: ''
+    group: ''
+    index: 0
+    description: ''
+  }
+  formatversion: 2
+  id: '闈㈡澘鎷夋枡_鍚勪簨涓氶儴鎿嶄綔'
+  name: '闈㈡澘鎷夋枡_鍚勪簨涓氶儴鎿嶄綔'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\351\235\242\346\235\277\346\213\211\346\226\231_\351\233\206\345\233\242\346\223\215\344\275\234.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\351\235\242\346\235\277\346\213\211\346\226\231_\351\233\206\345\233\242\346\223\215\344\275\234.vw"
new file mode 100644
index 0000000..d5d1c39
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\351\235\242\346\235\277\346\213\211\346\226\231_\351\233\206\345\233\242\346\223\215\344\275\234.vw"
@@ -0,0 +1,1471 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormPanelMaterialSpecializedDisplay
+      {
+        title: 'QTIANMA_JITUAN::FormPanelMaterialSpecializedDisplay'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelMaterialSpecializedDisplay'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 6
+          columnPosition: 1
+          columnSpan: 4
+        }
+        components
+        {
+          FormPanelMaterialSpecializedDisplay_ListPanelMaterialSpecializedDisplay
+          {
+          }
+          FormPanelMaterialSpecializedDisplay_DataSetLevelPanelMaterialSpecializedDisplay
+          {
+            groupDepth: -1
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_IsEligibleForNetting
+            {
+              columnId: 'IsEligibleForNetting'
+              dataPath: 'IsEligibleForNetting'
+              dataType: 'boolean'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsExcludedFromFulfillmentKPIUser
+            {
+              columnId: 'IsExcludedFromFulfillmentKPIUser'
+              dataPath: 'IsExcludedFromFulfillmentKPIUser'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_IsFirmed
+            {
+              columnId: 'IsFirmed'
+              dataPath: 'IsFirmed'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDate
+            {
+              columnId: 'OrderDate'
+              dataPath: 'OrderDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPanelMaterialSportsHealth
+      {
+        title: 'QTIANMA_JITUAN::FormPanelMaterialSportsHealth'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelMaterialSportsHealth'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 6
+          columnPosition: 5
+          columnSpan: 4
+        }
+        components
+        {
+          FormPanelMaterialSportsHealth_ListPanelMaterialSportsHealth
+          {
+          }
+          FormPanelMaterialSportsHealth_DataSetLevelPanelMaterialSportsHealth
+          {
+            groupDepth: -1
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_IsEligibleForNetting
+            {
+              columnId: 'IsEligibleForNetting'
+              dataPath: 'IsEligibleForNetting'
+              dataType: 'boolean'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsExcludedFromFulfillmentKPIUser
+            {
+              columnId: 'IsExcludedFromFulfillmentKPIUser'
+              dataPath: 'IsExcludedFromFulfillmentKPIUser'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_IsFirmed
+            {
+              columnId: 'IsFirmed'
+              dataPath: 'IsFirmed'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDate
+            {
+              columnId: 'OrderDate'
+              dataPath: 'OrderDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPanelMaterialTM17
+      {
+        title: 'QTIANMA_JITUAN::FormPanelMaterialTM17'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelMaterialTM17'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 6
+          columnPosition: 9
+          columnSpan: 4
+        }
+        components
+        {
+          FormPanelMaterialTM17_ListPanelMaterialTM
+          {
+          }
+          FormPanelMaterialTM17_DataSetLevelPanelMaterialTM
+          {
+            groupDepth: -1
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_IsEligibleForNetting
+            {
+              columnId: 'IsEligibleForNetting'
+              dataPath: 'IsEligibleForNetting'
+              dataType: 'boolean'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsExcludedFromFulfillmentKPIUser
+            {
+              columnId: 'IsExcludedFromFulfillmentKPIUser'
+              dataPath: 'IsExcludedFromFulfillmentKPIUser'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_IsFirmed
+            {
+              columnId: 'IsFirmed'
+              dataPath: 'IsFirmed'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDate
+            {
+              columnId: 'OrderDate'
+              dataPath: 'OrderDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPanelMaterialTM18
+      {
+        title: 'QTIANMA_JITUAN::FormPanelMaterialTM18'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelMaterialTM18'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 7
+          rowSpan: 6
+          columnPosition: 1
+          columnSpan: 4
+        }
+        components
+        {
+          FormPanelMaterialTM18_ListPanelMaterialTM
+          {
+          }
+          FormPanelMaterialTM18_DataSetLevelPanelMaterialTM
+          {
+            groupDepth: -1
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_IsEligibleForNetting
+            {
+              columnId: 'IsEligibleForNetting'
+              dataPath: 'IsEligibleForNetting'
+              dataType: 'boolean'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsExcludedFromFulfillmentKPIUser
+            {
+              columnId: 'IsExcludedFromFulfillmentKPIUser'
+              dataPath: 'IsExcludedFromFulfillmentKPIUser'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_IsFirmed
+            {
+              columnId: 'IsFirmed'
+              dataPath: 'IsFirmed'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDate
+            {
+              columnId: 'OrderDate'
+              dataPath: 'OrderDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPanelMaterialIT
+      {
+        title: 'QTIANMA_JITUAN::FormPanelMaterialIT'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelMaterialIT'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 7
+          rowSpan: 6
+          columnPosition: 5
+          columnSpan: 4
+        }
+        components
+        {
+          FormPanelMaterialIT_ListPanelMaterialIT
+          {
+          }
+          FormPanelMaterialIT_DataSetLevelPanelMaterialIT
+          {
+            groupDepth: -1
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_IsEligibleForNetting
+            {
+              columnId: 'IsEligibleForNetting'
+              dataPath: 'IsEligibleForNetting'
+              dataType: 'boolean'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsExcludedFromFulfillmentKPIUser
+            {
+              columnId: 'IsExcludedFromFulfillmentKPIUser'
+              dataPath: 'IsExcludedFromFulfillmentKPIUser'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_IsFirmed
+            {
+              columnId: 'IsFirmed'
+              dataPath: 'IsFirmed'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDate
+            {
+              columnId: 'OrderDate'
+              dataPath: 'OrderDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPanelMaterialTianHua
+      {
+        title: 'QTIANMA_JITUAN::FormPanelMaterialTianHua'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelMaterialTianHua'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 7
+          rowSpan: 6
+          columnPosition: 9
+          columnSpan: 4
+        }
+        components
+        {
+          FormPanelMaterialTianHua_ListPanelMaterialTianHua
+          {
+          }
+          FormPanelMaterialTianHua_DataSetLevelPanelMaterialTianHua
+          {
+            groupDepth: -1
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_IsEligibleForNetting
+            {
+              columnId: 'IsEligibleForNetting'
+              dataPath: 'IsEligibleForNetting'
+              dataType: 'boolean'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsExcludedFromFulfillmentKPIUser
+            {
+              columnId: 'IsExcludedFromFulfillmentKPIUser'
+              dataPath: 'IsExcludedFromFulfillmentKPIUser'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_IsFirmed
+            {
+              columnId: 'IsFirmed'
+              dataPath: 'IsFirmed'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDate
+            {
+              columnId: 'OrderDate'
+              dataPath: 'OrderDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPanelMaterialAutomotiveElectronics
+      {
+        title: 'QTIANMA_JITUAN::FormPanelMaterialAutomotiveElectronics'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelMaterialAutomotiveElectronics'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 13
+          rowSpan: 6
+          columnPosition: 1
+          columnSpan: 4
+        }
+        components
+        {
+          FormPanelMaterialAutomotiveElectronics_ListPanelMaterialAutomotiveElectronics
+          {
+          }
+          FormPanelMaterialAutomotiveElectronics_DataSetLevelPanelMaterialAutomotiveElectronics
+          {
+            groupDepth: -1
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_IsEligibleForNetting
+            {
+              columnId: 'IsEligibleForNetting'
+              dataPath: 'IsEligibleForNetting'
+              dataType: 'boolean'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsExcludedFromFulfillmentKPIUser
+            {
+              columnId: 'IsExcludedFromFulfillmentKPIUser'
+              dataPath: 'IsExcludedFromFulfillmentKPIUser'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_IsFirmed
+            {
+              columnId: 'IsFirmed'
+              dataPath: 'IsFirmed'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDate
+            {
+              columnId: 'OrderDate'
+              dataPath: 'OrderDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPanelMaterialVehicle
+      {
+        title: 'QTIANMA_JITUAN::FormPanelMaterialVehicle'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelMaterialVehicle'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 13
+          rowSpan: 6
+          columnPosition: 5
+          columnSpan: 4
+        }
+        components
+        {
+          FormPanelMaterialVehicle_ListPanelMaterialVehicle
+          {
+          }
+          FormPanelMaterialVehicle_DataSetLevelPanelMaterialVehicle
+          {
+            groupDepth: -1
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_IsEligibleForNetting
+            {
+              columnId: 'IsEligibleForNetting'
+              dataPath: 'IsEligibleForNetting'
+              dataType: 'boolean'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsExcludedFromFulfillmentKPIUser
+            {
+              columnId: 'IsExcludedFromFulfillmentKPIUser'
+              dataPath: 'IsExcludedFromFulfillmentKPIUser'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_IsFirmed
+            {
+              columnId: 'IsFirmed'
+              dataPath: 'IsFirmed'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDate
+            {
+              columnId: 'OrderDate'
+              dataPath: 'OrderDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_DialogFusionData
+      {
+        title: 'QTIANMA_JITUAN::DialogFusionData'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::DialogFusionData'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 13
+          rowSpan: 6
+          columnPosition: 9
+          columnSpan: 4
+        }
+        components
+        {
+          DialogFusionData_pnlContent
+          {
+            sizeRatio: 1
+          }
+          DialogFusionData_pnlReceiveDatas
+          {
+            sizeRatio: 1
+          }
+          DialogFusionData_pnlSelectVersion
+          {
+            sizeRatio: 1
+          }
+          DialogFusionData_pnlActions
+          {
+            sizeRatio: 1
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    image: 'WATER_FISH'
+    page: ''
+    group: ''
+    index: 0
+    description: ''
+  }
+  formatversion: 2
+  id: '闈㈡澘鎷夋枡_闆嗗洟鎿嶄綔'
+  name: '闈㈡澘鎷夋枡_闆嗗洟鎿嶄綔'
+  isglobal: false
+  isroot: true
+}
diff --git a/_var/_Main/ModelSettings/Common/Dev-21/_ROOT_Role_Dev-21.properties b/_var/_Main/ModelSettings/Common/Dev-21/_ROOT_Role_Dev-21.properties
index 89de4e7..bb46e43 100644
--- a/_var/_Main/ModelSettings/Common/Dev-21/_ROOT_Role_Dev-21.properties
+++ b/_var/_Main/ModelSettings/Common/Dev-21/_ROOT_Role_Dev-21.properties
@@ -501,7 +501,7 @@
 domainmodel.mdsstoragedefinitionmanager=template:domainmodel.mdsstoragedefinitionmanager
 domainmodel.mdsstoragedefinitionmanager.audittrailenabled=false
 domainmodel.mdsstoragedefinitionmanager.audittraillocation=
-domainmodel.mdsstoragedefinitionmanager.databaseenabled=false
+domainmodel.mdsstoragedefinitionmanager.databaseenabled=true
 domainmodel.mdsstoragedefinitionmanager.datasetstoredatasource=MacroPlanner
 domainmodel.mdsstoragedefinitionmanager.datasetstoreenabled=false
 domainmodel.mdsstoragedefinitionmanager.datasetstoreislocal=false
diff --git "a/_var/_Main/ProjSettings/MacroPlanner/Views/X_\345\210\206\346\236\220\350\247\206\345\233\276_\133414702.1.50321581\135.vw" "b/_var/_Main/ProjSettings/MacroPlanner/Views/X_\345\210\206\346\236\220\350\247\206\345\233\276_\133414702.1.50321581\135.vw"
new file mode 100644
index 0000000..3693bd3
--- /dev/null
+++ "b/_var/_Main/ProjSettings/MacroPlanner/Views/X_\345\210\206\346\236\220\350\247\206\345\233\276_\133414702.1.50321581\135.vw"
@@ -0,0 +1,2370 @@
+锘�# Quintiq GUI View File
+# Version 3.0
+
+PROPERTIES
+{
+  KEY := [414702.1.50321581]
+  NAME := '9.鍒嗘瀽瑙嗗浘'
+  HELPPAGE := ''
+  PARENTKEY := [119650.0.1615272249]
+  FOCUSED := [514.0.2180]
+  MUSTREADMDSSETTINGS := false
+  ISPERSONAL false
+  OWNERNAME 'quintiq/hongjli'
+  ICONIMAGE 'WINDOWS'
+  CREATIONDATETIME '2023-10-12T10:00:44'
+  CREATIONUSER 'quintiq/hongjli'
+  UPDATEDATETIME '2023-10-12T10:18:13'
+  UPDATEUSER 'quintiq/hongjli'
+  LASTACCESSDATE '2023-10-12'
+  VIEWSCOPE 0
+}
+AUTHORIZATIONS
+{
+  OPEN
+  {
+    AUTHORIZATIONS
+    {
+    }
+  }
+  EDIT
+  {
+    AUTHORIZATIONS
+    {
+    }
+  }
+}
+MDSINFO
+{
+  LOCAL ''
+  GLOBAL ''
+}
+INFOOBJECT
+{
+  KEY [626.0.4514905]
+  OBJECTTYPE Application // ApplicationLibMacroPlanner
+  BASEINFOOBJECTS
+  {
+   BASEINFOOBJECT
+   {
+    KEY [626.0.4514905]
+    OBJECTTYPE GUIComponent // ApplicationLibMacroPlanner
+    CONTENTS
+    {
+     SETTINGS_MDS_WITH_FOLDER
+     {
+       [414702.1.52504981]:LibInt_IntegratorProxy:/root:LibInt_IntegratorProxy
+       [414702.1.52533373]:SWF_CommunicationDataset:/root:SWF_CommunicationDataset
+       [414702.1.52528776]:SWF_WorkflowDataset:/root:SWF_WorkflowDataset
+       [414702.1.52500409]:LibDEF_DataBroker:/root:LibDEF_DataBroker
+       [414702.1.50285849]:LibDEF_DataRepository:/root:LibDEF_DataRepository
+       [414702.1.50276708]:DMF_ConvertorDataset:/root:DMF_ConvertorDataset
+       [414702.1.52542521]:LibMon_Monitor:/root:LibMon_Monitor
+       [414702.1.52537950]:LibUTF:/root:UTF
+       [414702.1.52550001]:Lib3DS_RootDataset:/root:Lib3DS_RootDataset
+       [414702.1.52580001]:KpiTracker:/root:KpiTracker
+       [414702.1.50281280]:MPDomainHandler:/root:MPDomainHandler
+       [414702.1.52560001]:MPSync:/root:MPSync
+       [414702.1.52509550]:ScenarioManager:/root:ScenarioManager
+       [414702.1.52570001]:LibSCIIntegrationInterface:/root:LibSCIIntegrationInterface
+       [414702.1.52519619]:GlobalOTDTable:/root:GlobalOTDTable
+       [414702.1.52585361]:MacroPlan:/root:MacroPlan
+     }
+    }
+   }
+  }
+  INFOOBJECTS
+  {
+   INFOOBJECT
+   {
+    KEY [514.0.2180]
+    OBJECTTYPE Frame // Frame
+    CONTENTS
+    {
+     State := maximized
+     (200,0,1536,809)
+     WorkspaceLocation := 
+    }
+    INFOOBJECTS
+    {
+     INFOOBJECT
+     {
+      KEY [113694.2.1024236755]
+      OBJECTTYPE ValueHolder // ValueHolderViewLayout
+      CONTENTS
+      {
+       Value ''
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [127710.1.721401771]
+      OBJECTTYPE ValueHolder // ValueHolderActiveMacroPlan
+      CONTENTS
+      {
+       Value '[414702.1.52620491]'
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [132448.0.224582518]
+      OBJECTTYPE ValueHolder // ValueHolderSetMPDefaultViewForFirstLogin
+      CONTENTS
+      {
+       Value 'false'
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [146450.2.1404665746]
+      OBJECTTYPE ValueHolder // vhConfiguration
+      CONTENTS
+      {
+       Value 'false'
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [146874.1.233869144]
+      OBJECTTYPE ValueHolder // vhConfigurationMatrix
+      CONTENTS
+      {
+       Value 'false'
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [132894.0.1007052496]
+      OBJECTTYPE ValueHolder // ValueHolderSetDataHolderSelectedPISPIPExtractor
+      CONTENTS
+      {
+       Value 'false'
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [108684.0.1782661552]
+      OBJECTTYPE ValueHolder // ValueHolderLastSelected3DDriveDirectory
+      CONTENTS
+      {
+       Value ''
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [107654.0.557163713]
+      OBJECTTYPE ValueHolder // ValueHolderUserGroup
+      CONTENTS
+      {
+       Value ';Administrator;Developer;AggregatedPlanning;Blending;CampaignPlanning;CapacitySmoothing;DatabaseIntegration;Development;Feedback;Groups;InventoryMixBalancing;InventorySpecifications;InventorySupplies;LotSizes;OptimizerBenchmarking;Pegging;ProductPlanningGanttChart;SafetyStockCalculation;SalesDemandPostponement;ShelfLife;SupplyChainMap;SupplySpecifications;TransportationPlanning;Workflow;Functionalities;Software;SOP;Cloud;OnPremise;SupplyChainDirector;SupplyPlanner;DemandPlanner;CollaborativeForecasting;SOAPServerUserGroup;Web_SupplyPlanning;Web_SupplyChainData;Web_CampaignPlanning;Web_Sales;Web_Development;Web;Web_ScenariosAndSettings;Web_Blending;Web_DemandPostponement;Web_Allocation;Web_Financials;Web_Feedbacks;Web_InventoryMixBalancing;Web_SafetyStockCalculation;Web_WorkFlowConfiguration;Web_MyActivities;Web_Integration;Web_OptimizerBenchmarking;Web_SupplyDashboard;Web_Optimizer;Web_LotSizes;Web_ShelfLife;Web_CapacitySmoothing;Web_Inventory;Web_SafetyStock;KpiTrackerAdmin;Web_ProductionPlan;Web_PurchasingPlan;Web_TripPlan;Web_Plan;Web_BlendingPlan;BusinessUnitOM;ProductionPlan;MRPPlanning;AppConfigurators;Implementors'
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [113694.1.227882923]
+      OBJECTTYPE ValueHolder // ValueHolderShowSanityCheck
+      CONTENTS
+      {
+       Value ''
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [126224.0.581715]
+      OBJECTTYPE ValueHolder // ValueHolder
+      CONTENTS
+      {
+       Value 'Feasible'
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [132894.0.388222255]
+      OBJECTTYPE ValueHolder // ValueHolderImportProfileMessage
+      CONTENTS
+      {
+       Value ''
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [127238.1.80067038]
+      OBJECTTYPE ValueHolder // ValueHolderSizing
+      CONTENTS
+      {
+       Value 'true'
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [122192.0.103731718]
+      OBJECTTYPE ValueHolder // ValueHolderSanityCheckHighestSeverityMsgCount
+      CONTENTS
+      {
+       Value '39'
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [113694.2.1085093394]
+      OBJECTTYPE ValueHolder // ValueHolderIsImportSucceed
+      CONTENTS
+      {
+       Value 'true'
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [132448.0.331221783]
+      OBJECTTYPE ValueHolder // ValueHolderScenarioMPSize
+      CONTENTS
+      {
+       Value '1'
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [127238.1.502176570]
+      OBJECTTYPE ValueHolder // ValueHolderPeriodRollStatus
+      CONTENTS
+      {
+       Value 'false'
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [112884.1.706803944]
+      OBJECTTYPE ValueHolder // ValueHolderSanityCheckHighestSeverity
+      CONTENTS
+      {
+       Value '2'
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [132448.0.662420775]
+      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel
+      CONTENTS
+      {
+       Columns
+       {
+         Definition := [11122.0.37341573]
+         {
+           [132448.0.662420039]
+         }
+         SubTotals := true
+         Visible
+         {
+           Column internal[DataSetDataColumn] [132448.0.662420039]
+           {
+             Header := 'Name'
+             Width := 100
+             Subtotals := false
+             Specific
+             {
+               DataPath := 'DisplayNameForSelection [132448.0.661217036]'
+             }
+           }
+           Column internal[DataSetImageColumn] [110880.7.47894550]
+           {
+             Header := 'Optimizer status'
+             Width := 100
+             Subtotals := false
+             Specific
+             {
+               DataPath := 'ImgOptimizerStatus [137862.0.1442841447]'
+             }
+           }
+         }
+       }
+       DataMemberSort 'Name [11660.0.899152500]' true true
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [136682.0.314428046]
+      OBJECTTYPE GUIComponent // PTFPanelTestController
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [105690.0.246954464]
+        OBJECTTYPE ValueHolder // vhLogging
+        CONTENTS
+        {
+         Value ''
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [104342.0.773994982]
+        OBJECTTYPE ValueHolder // vhDoActionInfoReturn
+        CONTENTS
+        {
+         Value ''
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [104342.0.867521338]
+        OBJECTTYPE ValueHolder // vhPendingActions
+        CONTENTS
+        {
+         Value ''
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [104342.0.867524820]
+        OBJECTTYPE ValueHolder // vhSharedRepository
+        CONTENTS
+        {
+         Value '\\\\CNLEN1845000693\\PTF_Repository\\'
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [105690.0.892938783]
+        OBJECTTYPE ValueHolder // vhAsyncActionStatus
+        CONTENTS
+        {
+         Value ''
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [105690.0.247211998]
+        OBJECTTYPE ValueHolder // vhResultLogPath
+        CONTENTS
+        {
+         Value ''
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [105690.0.892939622]
+        OBJECTTYPE ValueHolder // vhPTFExecutionStatus
+        CONTENTS
+        {
+         Value 'Inactive'
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [103546.0.81355542]
+        OBJECTTYPE ValueHolder // vhAutoClose
+        CONTENTS
+        {
+         Value ''
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [103546.0.54652306]
+        OBJECTTYPE ValueHolder // vhLogStart
+        CONTENTS
+        {
+         Value ''
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [113694.2.1146370710]
+      OBJECTTYPE Toolbar // ToolbarWorkflow
+      CONTENTS
+      {
+       'vertical' '50' '0'
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [113694.2.1146375645]
+        OBJECTTYPE CustomDrawComponent // SWF_MP_CustomDrawComponentProcessDashboard
+        BASEINFOOBJECTS
+        {
+        }
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [132478.0.288924864]
+          OBJECTTYPE ValueHolder // ValueHolderLastSyncDateTime
+          CONTENTS
+          {
+           Value '12-10-2023, 10:01:17'
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [11660.0.360702312]
+      OBJECTTYPE Toolbar // ToolbarSupplyChainPanel
+      CONTENTS
+      {
+       'horizontal' '50' '336'
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [113694.2.1070869880]
+        OBJECTTYPE ValueHolder // ValueHolderNavigationPanelState
+        CONTENTS
+        {
+         Value 'true'
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [113694.2.1070870209]
+        OBJECTTYPE ValueHolder // ValueHolderNavigationPanelSize
+        CONTENTS
+        {
+         Value '336'
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [113694.2.1033284312]
+        OBJECTTYPE SplitterWnd // SplitterWnd
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [113694.2.1033284313]
+          OBJECTTYPE SplitterPane // SplitterPane
+          CONTENTS
+          {
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [127238.0.1883499282]
+            OBJECTTYPE TabComponent // TabComponent
+            CONTENTS
+            {
+             ActivePageIndex 0
+            }
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [132448.0.71838188]
+              OBJECTTYPE List // ListNavigationPanelSelection
+              CONTENTS
+              {
+               Quantorrow := false
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [127238.0.1883514459]
+                OBJECTTYPE ValueHolder // ValueHolderListSelections
+                CONTENTS
+                {
+                 Value 'Stocking points and units'
+                }
+               }
+               INFOOBJECT
+               {
+                KEY [127238.0.1883514458]
+                OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel288
+                CONTENTS
+                {
+                 Columns
+                 {
+                   Definition := [113694.2.1025339746]
+                   {
+                     [113694.2.1025342095]
+                   }
+                   SubTotals := true
+                   Visible
+                   {
+                     Column internal[DataSetDataColumn] [113694.2.1025342095]
+                     {
+                       Width := 100
+                       Subtotals := false
+                       Specific
+                       {
+                         DataPath := 'Name [113694.2.1025096770]'
+                       }
+                     }
+                   }
+                 }
+                 DataMemberSort 'SequenceNr [113694.2.1025096776]' true true
+                }
+               }
+              }
+             }
+             INFOOBJECT
+             {
+              KEY [127238.0.1883516525]
+              OBJECTTYPE SplitterWnd // SplitterWnd516
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [127238.0.1883516526]
+                OBJECTTYPE SplitterPane // SplitterPaneEntities
+                CONTENTS
+                {
+                 Size 100
+                 VISIBLE true
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [127238.0.1883516528]
+                  OBJECTTYPE List // ListEntityTreeInPanel
+                  CONTENTS
+                  {
+                   Quantorrow := false
+                  }
+                  BASEINFOOBJECTS
+                  {
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [113694.2.1026852831]
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelUnit
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [127710.1.1014097713]
+                       {
+                         [127710.1.1014102531]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [127710.1.1014102531]
+                         {
+                           Header := 'Name'
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'DisplayName [127710.1.1013707791]'
+                           }
+                         }
+                       }
+                     }
+                     DataMemberSort 'DefinitionName [1.2.1944]' true true
+                     DataMemberSort 'DisplayIndex [127710.1.1014879496]' true true
+                    }
+                   }
+                  }
+                 }
+                }
+               }
+               INFOOBJECT
+               {
+                KEY [127238.0.1883516541]
+                OBJECTTYPE SplitterPane // SplitterPaneProducts
+                CONTENTS
+                {
+                 Size 0
+                 VISIBLE true
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [127238.0.1883516544]
+                  OBJECTTYPE List // ListProductInPanel
+                  CONTENTS
+                  {
+                   Quantorrow := false
+                  }
+                  BASEINFOOBJECTS
+                  {
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [113694.2.1025678105]
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelProducts
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [113694.2.1026639210]
+                       {
+                         [113694.2.1026641039]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [127710.1.791646005]
+                         {
+                           Width := 43
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'Name [101472.1.1551142288]'
+                           }
+                         }
+                       }
+                     }
+                     DataMemberSort 'DisplayIndex [101472.1.1550630686]' true true
+                    }
+                   }
+                  }
+                 }
+                }
+               }
+               INFOOBJECT
+               {
+                KEY [127238.0.1883516552]
+                OBJECTTYPE SplitterPane // SplitterPaneSalesSegment
+                CONTENTS
+                {
+                 Size 0
+                 VISIBLE true
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [127238.0.1883516554]
+                  OBJECTTYPE List // ListSalesSegmentInPanel
+                  CONTENTS
+                  {
+                   Quantorrow := false
+                  }
+                  BASEINFOOBJECTS
+                  {
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [11660.0.1616690288]
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelSalesSegment
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [113694.2.1026633433]
+                       {
+                         [113694.2.1026637315]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [127710.1.791646006]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'Name [101472.1.1552565832]'
+                           }
+                         }
+                       }
+                     }
+                     DataMemberSort 'DisplayIndex [101472.1.1552054710]' true true
+                    }
+                   }
+                  }
+                 }
+                }
+               }
+               INFOOBJECT
+               {
+                KEY [131438.0.356639347]
+                OBJECTTYPE SplitterPane // SplitterPanePeriods
+                CONTENTS
+                {
+                 Size 0
+                 VISIBLE true
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [131438.0.353247249]
+                  OBJECTTYPE List // ListPeriodSpecificationInPanel
+                  CONTENTS
+                  {
+                   Quantorrow := false
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [131438.0.371333408]
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelPeriodSpecifications
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [131438.0.360617528]
+                       {
+                         [131438.0.360619967]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [131438.0.360619967]
+                         {
+                           Header := 'Name'
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'ID [112884.1.819834135]'
+                           }
+                         }
+                       }
+                     }
+                     DataMemberSort 'TimeUnitLevel [110702.1.442080356]' true true
+                     DataMemberSort 'NrOfTimeUnit [113694.2.259953597]' true true
+                    }
+                    INFOOBJECTS
+                    {
+                     INFOOBJECT
+                     {
+                      KEY [131438.0.402834330]
+                      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelPeriods
+                      CONTENTS
+                      {
+                       Columns
+                       {
+                         Definition := [131438.0.360619043]
+                         {
+                           [131438.0.373648709]
+                           [131438.0.373648710]
+                         }
+                         SubTotals := true
+                         Visible
+                         {
+                           Column internal[DataSetDataColumn] [131438.0.373648709]
+                           {
+                             Header := 'Start'
+                             Width := 100
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'Period_MP [133004.0.129306565]|StartDate [11660.0.1924712308]'
+                             }
+                           }
+                           Column internal[DataSetDataColumn] [131438.0.373648710]
+                           {
+                             Header := 'End'
+                             Width := 100
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'Period_MP [133004.0.129306565]|EndDate [11660.0.1924712413]'
+                             }
+                           }
+                         }
+                       }
+                       ColumnSort [131438.0.373648709] true false
+                      }
+                     }
+                    }
+                   }
+                  }
+                 }
+                }
+               }
+              }
+             }
+             INFOOBJECT
+             {
+              KEY [127238.0.1884468404]
+              OBJECTTYPE SplitterWnd // SplitterWnd466
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [127238.0.1884468405]
+                OBJECTTYPE SplitterPane // SplitterPane252
+                CONTENTS
+                {
+                 VISIBLE true
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [127238.0.1884468597]
+                  OBJECTTYPE List // ListBookmarks
+                  CONTENTS
+                  {
+                   Quantorrow := false
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [130238.0.368320209]
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelBookmarks
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [121072.0.291112455]
+                       {
+                         [121072.0.291113667]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [121072.0.291113667]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'Name [121072.0.290461471]'
+                           }
+                         }
+                       }
+                     }
+                     DataMemberSort 'IsFolder [127238.0.1889576073]' false true
+                     ColumnSort [121072.0.291113667] true false
+                    }
+                    INFOOBJECTS
+                    {
+                     INFOOBJECT
+                     {
+                      KEY [130238.0.368320210]
+                      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelBookmarkChildren
+                      CONTENTS
+                      {
+                       Columns
+                       {
+                         Definition := [121072.0.291112455]
+                         {
+                           [121072.0.291113667]
+                         }
+                         SubTotals := true
+                         Visible
+                         {
+                           Column internal[DataSetDataColumn] [121072.0.291113667]
+                           {
+                             Width := 100
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'Name [121072.0.290461471]'
+                             }
+                           }
+                         }
+                       }
+                       DataMemberSort 'IsFolder [127238.0.1889576073]' false true
+                       ColumnSort [121072.0.291113667] true false
+                      }
+                     }
+                    }
+                   }
+                  }
+                 }
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [108486.1.1170974339]
+      SINGLEINSTANCE false
+      ID 'Pegging'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Form // FormPegging
+      CREATETYPE FormPegging
+      CONTENTS
+      {
+       State := normal
+       (354,421,990,664)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5507;]TabIdx[1]Selection[FRONT]
+      }
+      BASEINFOOBJECTS
+      {
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [108486.1.1171911809]
+        OBJECTTYPE SplitterWnd // SplitterWnd1
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [108486.1.1171911810]
+          OBJECTTYPE SplitterPane // SplitterPane
+          CONTENTS
+          {
+           Size 50.132802124834
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [108486.1.1171921411]
+            OBJECTTYPE SplitterWnd // SplitterWndDemand_MP_Pegging
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [108486.1.1171921412]
+              OBJECTTYPE SplitterPane // SplitterPane2
+              CONTENTS
+              {
+               Size 52.6515151515151
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [108486.1.1171921414]
+                OBJECTTYPE List // ListDemand
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [108486.1.1171924299]
+                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelDemand_MP
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     Definition := [11766.0.1025088210]
+                     {
+                       [11766.1.490215920]
+                     }
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetImageColumn] [108486.1.2111697545]
+                       {
+                         Width := 19
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'DemandType [11660.0.340434965]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [108486.2.15728337]
+                       {
+                         Header := 'HasValidPeggedQuantity'
+                         Width := 21
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasValidPeggedQuantity [108486.2.15494714]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [127710.1.1139010297]
+                       {
+                         Header := 'Stocking point'
+                         Width := 137
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ProductInStockingPointInPeriodPlanning [134266.1.219045427]|AsPlanningProductInStockingPoint [134266.1.8545642]|StockingPoint_MP [11660.0.488414369]|Name [101472.1.1554218718]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [108486.1.2110122000]
+                       {
+                         Header := 'Product'
+                         Width := 184
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ProductInStockingPointInPeriodPlanning [134266.1.219045427]|ProductInStockingPoint_MP [134266.1.5798354]|Product_MP [11660.0.486228287]|Name [101472.1.1551142288]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [108486.1.2112140291]
+                       {
+                         Header := 'Period start'
+                         Width := 115
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.GetPeriodStart() )'
+                           Alignment := ''
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [11766.1.490215920]
+                       {
+                         Width := 80
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Quantity [101320.0.110374989]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [108486.1.2110122001]
+                       {
+                         Header := 'Fulfilled'
+                         Width := 82
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'FulfilledQuantity [11660.0.157649047]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [110880.2.1142677800]
+                       {
+                         Header := 'Available'
+                         Width := 79
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.GetAvailableQuantityForPegging() )'
+                           Alignment := ''
+                         }
+                       }
+                       Column internal[DataSetChartColumn] [108486.1.2112734746]
+                       {
+                         Header := 'Fulfillment'
+                         Width := 104
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           Type := 'Stacked Bar'
+                           Relative := true
+                           Points
+                           {
+                             PointDefinition
+                             {
+                               Text := 'minvalue( object.GetPeggedQuantity(), object.FulfilledQuantity() )'
+                               Color := 'Green'
+                               NegativeColor := 'Red'
+                               Description := 'Fulfilled pegged quantity'
+                             }
+                             PointDefinition
+                             {
+                               Text := 'maxvalue( object.FulfilledQuantity() - object.GetPeggedQuantity(), 0 )'
+                               Color := '$FF9900'
+                               NegativeColor := 'Red'
+                               Description := 'Unpegged quantity'
+                             }
+                             PointDefinition
+                             {
+                               Text := 'maxvalue( object.GetPeggedQuantity() - object.FulfilledQuantity(), 0 )'
+                               Color := 'Red'
+                               NegativeColor := 'Red'
+                               Description := 'Overpegged quantity'
+                             }
+                           }
+                         }
+                       }
+                     }
+                   }
+                   ColumnSort [108486.1.2112140291] true false
+                  }
+                 }
+                }
+               }
+              }
+             }
+             INFOOBJECT
+             {
+              KEY [108486.1.1171921413]
+              OBJECTTYPE SplitterPane // SplitterPane3
+              CONTENTS
+              {
+               Size 47.3484848484849
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [113694.0.1490022148]
+                OBJECTTYPE List // ListDemandPegging
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [113694.0.1490022154]
+                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel2
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     Definition := [108486.1.1171928381]
+                     {
+                       [108486.1.1171960868]
+                       [108486.1.1320715923]
+                     }
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetImageColumn] [135072.0.40676723]
+                       {
+                         Width := 22
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Supply_MP [134266.1.11843917]|SupplyType [108486.1.1185051348]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [110880.9.1181376772]
+                       {
+                         Header := 'HasUserQuantity'
+                         Width := 23
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasUserQuantity [108486.1.1707654857]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [113694.0.1490534244]
+                       {
+                         Width := 21
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasSupply [108486.2.16148330]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [113694.0.1490809329]
+                       {
+                         Header := 'Period start'
+                         Width := 115
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.Supply_MP().GetPeriodStart() )'
+                           Alignment := 'Default'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [113694.0.1490521540]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Quantor
+                         {
+                           Simple := 'sum' DataMemberString := 'Quantity [134266.1.8545959]'
+                         }
+                         Specific
+                         {
+                           DataPath := 'Quantity [134266.1.8545959]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [112884.0.2032524903]
+                       {
+                         Header := 'Cost'
+                         Width := 100
+                         Subtotals := false
+                         Quantor
+                         {
+                           Expression := 'sum' 'object.Supply_MP().GetBaseCostPerQuantity() * object.Quantity()'
+                         }
+                         Specific
+                         {
+                           Text := 'VALUE( object.Supply_MP().GetBaseCostPerQuantity() * object.Quantity() )'
+                           Alignment := 'Default'
+                         }
+                       }
+                     }
+                   }
+                   Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="Fulfillment Q134266_1_8545931">\n  <GEBFiltering Key="@Default_Filter1" TargetType="Fulfillment Q134266_1_8545931">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@Quantity1" ElementType="Fulfillment Q134266_1_8545931" ValueType="Real">\n        <ColumnID>[112610.0.1005221707]</ColumnID>\n        <BaseName>Quantity</BaseName>\n        <Name>Quantity</Name>\n        <Title>Quantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Quantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@3">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@4" Column="@Quantity1">\n          <ColumnID>[112610.0.1005221707]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@5">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
+                   ColumnSort [113694.0.1490809329] true false
+                   ColumnSort [113694.0.1490521540] true false
+                  }
+                 }
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+         INFOOBJECT
+         {
+          KEY [108486.1.1171911811]
+          OBJECTTYPE SplitterPane // SplitterPane1
+          CONTENTS
+          {
+           Size 49.867197875166
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [108486.1.1175693802]
+            OBJECTTYPE SplitterWnd // SplitterWndSupply_MP_Pegging
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [108486.1.1175693803]
+              OBJECTTYPE SplitterPane // SplitterPane4
+              CONTENTS
+              {
+               Size 52.6315789473684
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [108486.1.1175693804]
+                OBJECTTYPE List // ListSupply
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [108486.1.1175693807]
+                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelSupply_MP
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     Definition := [108486.1.1175456932]
+                     {
+                       [108486.1.1175896212]
+                     }
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetImageColumn] [108486.1.2113319927]
+                       {
+                         Width := 23
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'SupplyType [108486.1.1185051348]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [108486.2.521730743]
+                       {
+                         Header := 'HasValidPegging'
+                         Width := 21
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasValidPegging [108486.2.479981617]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [108486.2.14534947]
+                       {
+                         Header := 'HasValidPeggedQuantity'
+                         Width := 23
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasValidPeggedQuantity [108486.1.2146810434]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [108486.1.2113344305]
+                       {
+                         Header := 'Period start'
+                         Width := 115
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.GetPeriodStart() )'
+                           Alignment := ''
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [108486.1.2110122007]
+                       {
+                         Width := 116
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Quantity [112884.1.1160030032]'
+                         }
+                       }
+                       Column internal[DataSetChartColumn] [108486.1.2113393570]
+                       {
+                         Header := 'Supply'
+                         Width := 72
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           Type := 'Stacked Bar'
+                           Relative := true
+                           Points
+                           {
+                             PointDefinition
+                             {
+                               Text := 'minvalue( object.GetPeggedQuantity(), object.Quantity() )'
+                               Color := '$CCCCCC'
+                               NegativeColor := 'Red'
+                               Description := 'Used quantity for pegging'
+                             }
+                             PointDefinition
+                             {
+                               Text := 'object.GetAvailableQuantityForPegging()'
+                               Color := 'Green'
+                               NegativeColor := 'Red'
+                               Description := 'Available quantity for pegging'
+                             }
+                             PointDefinition
+                             {
+                               Text := 'maxvalue( object.GetPeggedQuantity() - object.Quantity(), 0 )'
+                               Color := 'Red'
+                               NegativeColor := 'Red'
+                               Description := 'Overused quantity'
+                             }
+                           }
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [110880.2.1142925855]
+                       {
+                         Header := 'Available'
+                         Width := 79
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.GetAvailableQuantityForPegging() )'
+                           Alignment := ''
+                         }
+                       }
+                     }
+                   }
+                   ColumnSort [108486.1.2113344305] true false
+                  }
+                 }
+                }
+               }
+              }
+             }
+             INFOOBJECT
+             {
+              KEY [108486.1.1175693810]
+              OBJECTTYPE SplitterPane // SplitterPane5
+              CONTENTS
+              {
+               Size 47.3684210526316
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [108486.1.1175693811]
+                OBJECTTYPE List // ListSupplyPegging
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [108486.1.1175693814]
+                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel4
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     Definition := [108486.1.1175456935]
+                     {
+                       [108486.1.1175896215]
+                       [108486.1.1320715924]
+                     }
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetImageColumn] [108486.1.2113733284]
+                       {
+                         Header := 'DemandType'
+                         Width := 23
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Demand_MP [134266.1.16794407]|DemandType [11660.0.340434965]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [110880.9.1181425511]
+                       {
+                         Header := 'HasUserQuantity'
+                         Width := 25
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasUserQuantity [108486.1.1707654857]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [113694.0.1488690244]
+                       {
+                         Width := 21
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasDemand [113694.0.1488476421]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [108486.1.2113843687]
+                       {
+                         Header := 'Period start'
+                         Width := 115
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.Demand_MP().GetPeriodStart() )'
+                           Alignment := ''
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [108486.1.2110122012]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Quantor
+                         {
+                           Simple := 'sum' DataMemberString := 'Quantity [134266.1.8545959]'
+                         }
+                         Specific
+                         {
+                           DataPath := 'Quantity [134266.1.8545959]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [108486.1.2110122013]
+                       {
+                         Header := 'Cost'
+                         Width := 100
+                         Subtotals := false
+                         Quantor
+                         {
+                           Simple := 'sum' DataMemberString := 'BaseCost [134266.1.8545935]'
+                         }
+                         Specific
+                         {
+                           DataPath := 'BaseCost [134266.1.8545935]'
+                         }
+                       }
+                     }
+                   }
+                   ColumnSort [108486.1.2113843687] true false
+                  }
+                 }
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [127710.1.818301225]
+      SINGLEINSTANCE false
+      ID '浜у搧瑙勫垝鏁版嵁鐭╅樀'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Form // FormProductPlanningMatrix
+      CREATETYPE FormProductPlanningMatrix
+      CONTENTS
+      {
+       State := normal
+       (0,0,0,0)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4493;]TabIdx[0]Selection[NONE]
+      }
+      BASEINFOOBJECTS
+      {
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [127710.1.821866707]
+        OBJECTTYPE CheckBox // CheckBoxFilterByProductLevel
+        CONTENTS
+        {
+         Checkstate 1
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [127710.1.821866918]
+        OBJECTTYPE StringSelection // StringSelectionProductLevel
+        CONTENTS
+        {
+         BoundValue '[Leaf product]'
+        }
+        INFOOBJECTS
+        {
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [127710.1.818312567]
+        OBJECTTYPE MatrixEditor // MatrixEditorProductPlanning
+        CONTENTS
+        {
+         RowHeight 29
+         ColumnWidth 82
+         FirstColumnWidth 433
+         Attributes 'SupplyQuantity;DependentDemandAndSalesDemandQuantity;TargetInventoryLevel;InventoryLevelEnd;StockLevelInDays'
+        }
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [127710.1.819572713]
+          OBJECTTYPE GUIScaleView // MatrixEditorColumns
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [127710.1.820829335]
+            OBJECTTYPE UserConfigurableInformation // UserConfigurableInformationPeriod
+            CONTENTS
+            {
+             ObjectText 'VALUE(object.Start())'
+            }
+           }
+          }
+         }
+         INFOOBJECT
+         {
+          KEY [127710.1.819572710]
+          OBJECTTYPE GUIScaleView // MatrixEditorRows
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [127710.1.820300549]
+            OBJECTTYPE UserConfigurableInformation // UserConfigurableInformationPISP
+            CONTENTS
+            {
+             ObjectText 'VALUE( object.Name() ) (VALUE( object.UnitOfMeasureName() ))'
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [107654.0.139602704]
+      SINGLEINSTANCE false
+      ID '閿�鍞渶姹�'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Form // FormSalesDemands
+      CREATETYPE FormSalesDemands
+      CONTENTS
+      {
+       State := normal
+       (1344,0,192,928)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4493;]TabIdx[1]Selection[FOCUS]
+      }
+      BASEINFOOBJECTS
+      {
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [124112.0.87054864]
+        OBJECTTYPE SplitterWnd // SplitterWnd1
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [124112.0.87054865]
+          OBJECTTYPE SplitterPane // SplitterPaneSalesDemand
+          CONTENTS
+          {
+           Size 72.2642807983482
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [124112.0.87250426]
+            OBJECTTYPE List // ListSalesDemand
+            CONTENTS
+            {
+             Quantorrow := false
+            }
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [124112.0.87253131]
+              OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelSalesDemand
+              CONTENTS
+              {
+               Columns
+               {
+                 SubTotals := true
+                 Visible
+                 {
+                   Column internal[DataSetDataColumn] [414702.1.48371364]
+                   {
+                     Width := 155
+                     SizedByUser := true
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'StartDate [151892.1.1091152440]'
+                       AttributePathIdentifier := "StartType('external[Forecast]')
+                       Attribute([151892.1.1091152440])"
+                     }
+                   }
+                   Column internal[DataSetImageColumn] [124112.0.127773359]
+                   {
+                     Width := 46
+                     SizedByUser := true
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'ImgNotLinkedToPeriod [11766.1.1447220213]'
+                     }
+                   }
+                   Column internal[DataSetImageColumn] [124112.0.127773360]
+                   {
+                     Width := 20
+                     SizedByUser := true
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'ImgIsPostponed [101472.1.1295487708]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [124112.0.127773361]
+                   {
+                     Header := 'Sales segment'
+                     Width := 136
+                     Subtotals := true
+                     Specific
+                     {
+                       DataPath := 'SalesSegment_MP [124112.0.66357172]|Name [101472.1.1552565832]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [124112.0.127773362]
+                   {
+                     Header := 'Product'
+                     Width := 171
+                     SizedByUser := true
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'ProductInStockingPoint_MP [124112.0.61687182]|Product_MP [11660.0.486228287]|Name [101472.1.1551142288]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [124112.0.127773363]
+                   {
+                     Header := 'Stocking point'
+                     Width := 182
+                     SizedByUser := true
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'ProductInStockingPoint_MP [124112.0.61687182]|StockingPoint_MP [11660.0.488414369]|Name [101472.1.1554218718]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [112610.0.1212432722]
+                   {
+                     Width := 93
+                     Subtotals := false
+                     Quantor
+                     {
+                       Simple := 'sum' DataMemberString := 'Quantity [151892.1.1091152476]'
+                     }
+                     Specific
+                     {
+                       DataPath := 'Quantity [151892.1.1091152476]'
+                     }
+                   }
+                   Column internal[DataSetChartColumn] [112610.0.1108107591]
+                   {
+                     Header := 'Fulfillment'
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       Type := 'Stacked Bar'
+                       Relative := false
+                       Points
+                       {
+                         PointDefinition
+                         {
+                           Text := 'object.FulfilledQuantity() * object.DefaultUOMConversionFactor()'
+                           Color := 'Green'
+                           NegativeColor := 'Red'
+                           Description := ''
+                         }
+                         PointDefinition
+                         {
+                           Text := 'sum( object, SalesDemandInPeriod, sdip, sdip.UnfulfilledQuantity() * object.DefaultUOMConversionFactor() )'
+                           Color := '$FFA300'
+                           NegativeColor := 'Green'
+                           Description := ''
+                         }
+                       }
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [124112.0.127773364]
+                   {
+                     Width := 56
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'Price [151892.1.1091152449]'
+                     }
+                   }
+                 }
+               }
+               Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="Forecast Q124112_0_61686821">\n  <GEBFiltering Key="@Default_Filter1" TargetType="Forecast Q124112_0_61686821">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@Quantity1" ElementType="Forecast Q124112_0_61686821" ValueType="Real">\n        <ColumnID>[112610.0.1212345820]</ColumnID>\n        <BaseName>Quantity</BaseName>\n        <Name>Quantity</Name>\n        <Title>Quantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Quantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@FulfilledQuantity1" ElementType="Forecast Q124112_0_61686821" ValueType="Real">\n        <ColumnID>[112610.0.1212349003]</ColumnID>\n        <BaseName>FulfilledQuantity</BaseName>\n        <Name>FulfilledQuantity</Name>\n        <Title>FulfilledQuantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>FulfilledQuantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@3">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@4" Column="@Quantity1">\n          <ColumnID>[112610.0.1212345820]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFilterColumn Key="@5" Column="@FulfilledQuantity1">\n          <ColumnID>[112610.0.1212349003]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@6">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
+               ColumnSort [414702.1.48371364] true false
+              }
+             }
+            }
+           }
+          }
+         }
+         INFOOBJECT
+         {
+          KEY [124112.0.87054866]
+          OBJECTTYPE SplitterPane // SplitterPaneSalesDemandInPeriod
+          CONTENTS
+          {
+           Size 27.7357192016518
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [116826.1.6886965]
+            OBJECTTYPE SplitterWnd // SplitterWnd
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [116826.1.6886966]
+              OBJECTTYPE SplitterPane // SplitterPane
+              CONTENTS
+              {
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [116826.1.6887229]
+                OBJECTTYPE List // ListAggregatedSalesDemandInPeriod
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [116826.1.6887235]
+                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelSalesDemandInPeriod
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     Definition := [11766.0.1025088210]
+                     {
+                       [11766.1.490215920]
+                     }
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetDataColumn] [127710.1.899918256]
+                       {
+                         Header := 'Sales segment'
+                         Width := 120
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'SalesSegmentName [123718.0.362599768]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [127710.1.899918258]
+                       {
+                         Header := 'Product'
+                         Width := 103
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ProductID [123718.0.362599725]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [127710.1.899918257]
+                       {
+                         Header := 'Stocking point'
+                         Width := 121
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'StockingPointID [123718.0.362599783]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [127710.1.899918259]
+                       {
+                         Header := 'Start'
+                         Width := 96
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'StartDate [123718.0.362599776]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [127710.1.899918260]
+                       {
+                         Header := 'End'
+                         Width := 98
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'EndDate [123718.0.362599633]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [127710.1.899918261]
+                       {
+                         Width := 77
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Quantity [101320.0.110374989]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [127710.1.899918262]
+                       {
+                         Header := 'Fulfilled'
+                         Width := 69
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'FulfilledQuantity [11660.0.157649047]'
+                         }
+                       }
+                     }
+                   }
+                   ColumnSort [127710.1.899918259] true false
+                  }
+                 }
+                }
+               }
+              }
+             }
+             INFOOBJECT
+             {
+              KEY [116826.1.6886967]
+              OBJECTTYPE SplitterPane // SplitterPane552
+              CONTENTS
+              {
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [116826.1.6889558]
+                OBJECTTYPE List // ListDisaggregatedSalesDemandInPeriod
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [116826.1.6889563]
+                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     Definition := [11766.0.1025088210]
+                     {
+                       [11766.1.490215920]
+                     }
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetDataColumn] [127710.1.899918256]
+                       {
+                         Header := 'Sales segment'
+                         Width := 212
+                         Subtotals := true
+                         Specific
+                         {
+                           DataPath := 'SalesSegmentName [123718.0.362599768]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [127710.1.899918258]
+                       {
+                         Header := 'Product'
+                         Width := 118
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ProductID [123718.0.362599725]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [127710.1.899918257]
+                       {
+                         Header := 'Stocking point'
+                         Width := 124
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'StockingPointID [123718.0.362599783]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [127710.1.899918259]
+                       {
+                         Header := 'Start'
+                         Width := 103
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'StartDate [123718.0.362599776]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [127710.1.899918260]
+                       {
+                         Header := 'End'
+                         Width := 103
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'EndDate [123718.0.362599633]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [127710.1.899918261]
+                       {
+                         Width := 77
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Quantity [101320.0.110374989]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [127710.1.899918262]
+                       {
+                         Header := 'Fulfilled'
+                         Width := 69
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'FulfilledQuantity [11660.0.157649047]'
+                         }
+                       }
+                     }
+                   }
+                   DataMemberSort 'ProductInStockingPoint_MP [123718.0.362599994]|Product_MP [11660.0.486228287]|Name [101472.1.1551142288]' true true
+                   DataMemberSort 'ProductInStockingPoint_MP [123718.0.362599994]|StockingPoint_MP [11660.0.488414369]|Name [101472.1.1554218718]' true true
+                  }
+                 }
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [136682.0.365472357]
+      SINGLEINSTANCE false
+      ID '鍔犲伐璺緞'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Form // FormRoutings
+      CREATETYPE FormRoutings
+      CONTENTS
+      {
+       State := normal
+       (0,0,0,0)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5507;]TabIdx[0]Selection[NONE]
+      }
+      BASEINFOOBJECTS
+      {
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [136682.0.365497231]
+        OBJECTTYPE SplitterWnd // SplitterWnd1
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [136682.0.365497232]
+          OBJECTTYPE SplitterPane // SplitterPane
+          CONTENTS
+          {
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [136682.0.365497233]
+            OBJECTTYPE List // ListRouting
+            CONTENTS
+            {
+             Quantorrow := false
+            }
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [136682.0.365497235]
+              OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelRouting
+              CONTENTS
+              {
+               Columns
+               {
+                 SubTotals := true
+                 Visible
+                 {
+                   Column internal[DataSetDataColumn] [414702.1.14320987]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'AllowWIPInventory [127238.0.1952375105]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14320988]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'BackgroundRegionHeight [110994.0.1957900049]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14320989]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'BackgroundRegionWidth [110994.0.1957900066]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14320990]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'CopyHelper [145808.0.1360181115]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14320991]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'End [113694.1.1906651480]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14320992]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'HasInputOrOutput [127710.1.662345328]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14320993]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'HasNonSystemInputOrOutput [158636.0.308982340]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14320994]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'HasStep [127710.1.661407939]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14320995]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'ID [113694.1.1906651466]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14320996]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'IsEnabled [113694.1.1929700744]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14320997]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'IsManuallyConfigured [129442.0.45566327]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14320998]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'IsSoftDeleted [124808.0.1333363657]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14320999]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'IsValidData [124808.0.1255490063]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14321000]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'LeftRegionHeight [110994.0.1930836805]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14321001]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'LeftRegionWidth [110994.0.1921226998]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14321002]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'MaxNrOfOperations [110994.0.1912206775]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14321003]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'MinXOutputPISP [113694.1.1978168643]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14321004]
+                   {
+                     Width := 376
+                     SizedByUser := true
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'Name [113694.1.1906651470]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14321005]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'SanityCheckDataMostSevere [122192.0.113673777]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14321006]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'SanityCheckDataMostSevereCount [122192.0.113673781]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14321007]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'SanityCheckDataTotalViolationCount [122192.0.170828320]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14321008]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'Start [113694.1.1906651474]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14321009]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'TopRegionHeight [110994.0.1930538690]'
+                     }
+                   }
+                   Column internal[DataSetDataColumn] [414702.1.14321010]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'TopRegionWidth [110994.0.1921955322]'
+                     }
+                   }
+                   Column internal[DataSetImageColumn] [414702.1.14321011]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'ImgIsEnabled [113694.1.1934081987]'
+                     }
+                   }
+                 }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+         INFOOBJECT
+         {
+          KEY [136682.0.365497250]
+          OBJECTTYPE SplitterPane // SplitterPane1
+          CONTENTS
+          {
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [136682.0.365497251]
+            OBJECTTYPE SplitterWnd // SplitterWnd2
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [136682.0.365497252]
+              OBJECTTYPE SplitterPane // SplitterPane2
+              CONTENTS
+              {
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [136682.0.365502343]
+        OBJECTTYPE CheckBox // CheckBoxFilterProduct
+        CONTENTS
+        {
+         Checkstate 1
+        }
+       }
+      }
+     }
+    }
+   }
+  }
+}
diff --git a/_var/_Main/ProjSettings/MacroPlannerWebApp/Views/Capacity___sale_budge.vw b/_var/_Main/ProjSettings/MacroPlannerWebApp/Views/Capacity___sale_budge.vw
index c31c665..780f9e5 100644
--- a/_var/_Main/ProjSettings/MacroPlannerWebApp/Views/Capacity___sale_budge.vw
+++ b/_var/_Main/ProjSettings/MacroPlannerWebApp/Views/Capacity___sale_budge.vw
@@ -191,10 +191,10 @@
     userconfigurableinformation
     {
     }
+    index: 0
     image: 'CHART_HI_LO'
     page: 'ActionBarPageScenarioComparison'
     group: ''
-    index: 0
     description: ''
   }
   formatversion: 2
diff --git a/_var/_Main/ProjSettings/MacroPlannerWebApp/Views/PR_DATA.vw b/_var/_Main/ProjSettings/MacroPlannerWebApp/Views/PR_DATA.vw
new file mode 100644
index 0000000..daa8c14
--- /dev/null
+++ b/_var/_Main/ProjSettings/MacroPlannerWebApp/Views/PR_DATA.vw
@@ -0,0 +1,428 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_legacy_1
+      {
+        title: 'Scenario manager'
+        shown: true
+        componentID: 'FormScenarioManager'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormScenarioManager_ListScenario
+          {
+          }
+          FormScenarioManager_DataSetLevelScenario
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 100
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 233
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 2
+              subtotals: ''
+              width: 86
+            }
+            column_ChangedOn
+            {
+              columnId: 'ChangedOn'
+              dataPath: 'ChangedOn'
+              dataType: 'datetime'
+              title: 'Changed on'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_StorageMode
+            {
+              columnId: 'StorageMode'
+              dataPath: 'StorageMode'
+              dataType: 'string'
+              title: 'StorageMode'
+              index: 4
+              subtotals: ''
+              width: 40
+            }
+          }
+        }
+      }
+      form_legacy_2
+      {
+        title: 'Assumptions'
+        shown: true
+        componentID: 'FormAssumptions'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 9
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormAssumptions_ListAssumptions
+          {
+          }
+          FormAssumptions_DataSetLevelAssumptions
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              title: '绫诲埆'
+              index: 1
+              subtotals: ''
+              width: 162
+            }
+            column_Importance
+            {
+              columnId: 'Importance'
+              dataPath: 'Importance'
+              dataType: 'string'
+              title: '閲嶈鎬�'
+              index: 2
+              subtotals: ''
+              width: 104
+            }
+            column_Title
+            {
+              columnId: 'Title'
+              dataPath: 'Title'
+              dataType: 'string'
+              title: '鏍囬'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 4
+              subtotals: ''
+              width: 92
+            }
+            column_CreatedOn
+            {
+              columnId: 'CreatedOn'
+              dataPath: 'CreatedOn'
+              dataType: 'datetime'
+              title: 'Created on'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_legacy_4
+      {
+        title: 'Supply chain overview'
+        shown: true
+        componentID: 'FormSupplyChainOverview'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 6
+          columnSpan: 7
+        }
+        components
+        {
+          FormSupplyChainOverview_PanelToolbar
+          {
+            sizeRatio: 1
+          }
+          FormSupplyChainOverview_PanelSCO
+          {
+            sizeRatio: 1
+          }
+          FormSupplyChainOverview_CustomDrawSCO
+          {
+            forceFitY: false
+            zoomX: 1
+            zoomY: 1
+            forceFitX: false
+            backendState
+            {
+              componentId: 'QLibMacroPlannerWebUI::FormSupplyChainOverview.CustomDrawSCO'
+              state
+              {
+              }
+            }
+          }
+        }
+      }
+      form_FormPRHistoryData
+      {
+        title: 'QTIANMA_JITUAN::FormPRHistoryData'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPRHistoryData'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 17
+          rowSpan: 6
+          columnPosition: 5
+          columnSpan: 7
+        }
+        components
+        {
+          FormPRHistoryData_PanelPRHistoryButton
+          {
+            sizeRatio: 1
+          }
+          FormPRHistoryData_ListPRHistoryData
+          {
+          }
+          FormPRHistoryData_DataSetLevelPRHistoryData
+          {
+            groupDepth: -1
+            column_BusinessType
+            {
+              columnId: 'BusinessType'
+              dataPath: 'BusinessType'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_MRPCalverNo
+            {
+              columnId: 'MRPCalverNo'
+              dataPath: 'MRPCalverNo'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_OrganCode
+            {
+              columnId: 'OrganCode'
+              dataPath: 'OrganCode'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'real'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_SendStatus
+            {
+              columnId: 'SendStatus'
+              dataPath: 'SendStatus'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_ReleaseBy
+            {
+              columnId: 'ReleaseBy'
+              dataPath: 'ReleaseBy'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_ReceiveStatus
+            {
+              columnId: 'ReceiveStatus'
+              dataPath: 'ReceiveStatus'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_ReceiveError
+            {
+              columnId: 'ReceiveError'
+              dataPath: 'ReceiveError'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPRData
+      {
+        title: 'QTIANMA_JITUAN::FormPRData'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPRData'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 17
+          rowSpan: 6
+          columnPosition: 1
+          columnSpan: 4
+        }
+        components
+        {
+          FormPRData_PanelPRDataButton
+          {
+            sizeRatio: 1
+          }
+          FormPRData_ListPRData
+          {
+          }
+          FormPRData_DataSetLevelPRData
+          {
+            groupDepth: -1
+            column_MRPCalverNo
+            {
+              columnId: 'MRPCalverNo'
+              dataPath: 'MRPCalverNo'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ProduceRequiredDate
+            {
+              columnId: 'ProduceRequiredDate'
+              dataPath: 'ProduceRequiredDate'
+              dataType: 'date'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'real'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_SendStatus
+            {
+              columnId: 'SendStatus'
+              dataPath: 'SendStatus'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_SendBy
+            {
+              columnId: 'SendBy'
+              dataPath: 'SendBy'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    image: 'WORM'
+    page: 'ActionBarPageData'
+    group: ''
+    index: 0
+    description: 'PR鐢宠'
+  }
+  formatversion: 2
+  id: 'PR_DATA'
+  name: 'PR_DATA'
+  isglobal: false
+  isroot: true
+}

--
Gitblit v1.9.3