From 4b15cdb0ac0b85f53072e0320730f01547bf1cec Mon Sep 17 00:00:00 2001
From: hongji.li <hongji.a.li@capgemini.com>
Date: 星期二, 10 十月 2023 21:31:13 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/TIANMA_JITUAN into dev_lhj

---
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity6.qbl                                                                                                |    8 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_UnitOfMeasureName.qbl                                                                                                  |    8 
 _Main/BL/Type_PRData/Attribute_LineAttribute3.qbl                                                                                                                             |    7 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl                                                                                          |    4 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity2.qbl                                                                                              |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_Export#666.qbl                                                                                                      |  507 +++++++++
 _Main/BL/Type_PRData/Attribute_PRReleaseStatus.qbl                                                                                                                            |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales8.qbl                                                                                                      |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/TypeIndex_Global_MappingAnnualBudgetDataTypeIndex.qbl                                                                            |   12 
 _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/BL/EDI/Broker_GlobalOTDTable_AnnualBudgetData.qbl                                                                                                                       |  398 +++++++
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity12.qbl                                                                                               |    8 
 _Main/BL/Type_PRData/Function_CalcSendTimeString.qbl                                                                                                                          |    6 
 _Main/BL/Type_PRData/Attribute_CreateBy.qbl                                                                                                                                   |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Component_ListPRHistoryData#844.def                                                                                   |    2 
 _Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByHalfYear.qbl                                                                                                         |   21 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl                                                                                               |    6 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByHalfYear.qbl                                                                                                   |   24 
 _Main/BL/Relations/Relation_Global_MappingProviderCapacity_GlobalOTDTable_GlobalOTDTable_Global.qbl                                                                           |   23 
 _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/BL/Type_PRData/Attribute_CreateTime.qbl                                                                                                                                 |    2 
 _Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityBySeason.qbl                                                                                                          |   10 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity4.qbl                                                                                                |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity9.qbl                                                                                              |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales12.qbl                                                                                                     |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def                                                                        |    2 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_ProductID.qbl                                                                                                          |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity2.qbl                                                                                                |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByHalfYear.qbl                                                                                               |   21 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_PlantName.qbl                                                                                                          |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales1.qbl                                                                                                      |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity10.qbl                                                                                               |    8 
 _Main/BL/Type_PRHistoryData/StaticMethod_ProductIdOver14Days.qbl                                                                                                              |    2 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def                                                                           |    2 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByMonth.qbl                                                                                                      |   20 
 _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/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityByHalfYear.qbl                                                                                                        |   21 
 _Main/BL/Type_PRHistoryData/Attribute_PreparerId#603.qbl                                                                                                                      |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity7.qbl                                                                                              |    8 
 _Main/BL/Type_PRData/Attribute_CreateTimeString.qbl                                                                                                                           |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason#000.qbl                                                                                             |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def                                                                                         |    4 
 _Main/BL/Type_PRData/StaticMethod_TestData.qbl                                                                                                                                |   36 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_Rate.qbl                                                                                                               |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_OrganName.qbl                                                                                                          |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales11.qbl                                                                                                     |    8 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceByYear.qbl                                                                                                        |   20 
 _Main/BL/Type_Global_MappingAnnualBudgetData/_ROOT_Type_Global_MappingAnnualBudgetData.qbl                                                                                    |   10 
 _Main/BL/Type_GlobalDTOTable/Method_RefreshCapacityAndSaleBudgeFilter.qbl                                                                                                     |   26 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales3.qbl                                                                                                      |    8 
 _Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceBySeason#763.qbl                                                                                                       |   10 
 _Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart#156.qbl                                                                                                         |  123 +-
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def                                                  |    6 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity5.qbl                                                                                              |    8 
 _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_MappingOperation/StaticMethod_GetByProductId.qbl                                                                                                         |   13 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInYear.qbl                                                                                              |   15 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_StockingPointID.qbl                                                                                                    |    8 
 _Main/BL/Type_PRData/Attribute_DeliveryDate.qbl                                                                                                                               |    8 
 _Main/BL/Type_PRData/StaticMethod_ProductIdOver14Days.qbl                                                                                                                     |    2 
 _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_Global_MappingAnnualBudgetData/Attribute_CutsNumber.qbl                                                                                                         |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl                                                                                            |    4 
 _Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning#662.qbl                                                                                                                  |   86 +
 _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/BL/Type_PRHistoryData/Attribute_DeliveryDate#168.qbl                                                                                                                    |    2 
 _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 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_Export.qbl                                                                                                          |   13 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales5.qbl                                                                                                      |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick.def             |    2 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetBalanceByMonth.qbl                                                                                                       |   21 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInPCSInYear.qbl                                                                                                |   15 
 _Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl                                                                                                                       |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_OrganCode.qbl                                                                                                          |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity12.qbl                                                                                             |    8 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_IsPartRecognition.qbl                                                                                                  |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales7.qbl                                                                                                      |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity3.qbl                                                                                              |    8 
 _Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning.qbl                                                                                                                      |   12 
 _Main/BL/Type_ProductInStockingPointInPeriod/StaticMethod_GetByMRPCalverNo.qbl                                                                                                |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity5.qbl                                                                                                |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ID.qbl                                                                                                                 |    9 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationAllMappingBrokerAndAPI.qbl                                                                                           |   10 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity1.qbl                                                                                              |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_YearNo.qbl                                                                                                             |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByMonth.qbl                                                                                                  |   22 
 _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_Global_MappingForecast/StaticMethod_GetBalanceBySeason.qbl                                                                                                      |   24 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity11.qbl                                                                                               |    8 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByYear.qbl                                                                                                       |   20 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_CapacityEquivalent.qbl                                                                                                 |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales9.qbl                                                                                                      |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl                                                                                                |    6 
 _Main/BL/Type_Global_MappingProviderCapacity/StaticMethod_GetByProductId.qbl                                                                                                  |   13 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_ActualCapacity.qbl                                                                                                     |    8 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_LotSize.qbl                                                                                                            |    8 
 _Main/BL/Type_ERPRequestOfPR/StaticMethod_Create.qbl                                                                                                                          |    2 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_IsSpecialDisplay.qbl                                                                                                   |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ShippingForm.qbl                                                                                                       |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl                                                                                                  |    6 
 _Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompare.qbl                                                                                                           |   30 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity3.qbl                                                                                                |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity8.qbl                                                                                              |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MaskNumber.qbl                                                                                                         |    8 
 _Main/BL/Type_PRData/Method_PrintCall.qbl                                                                                                                                     |    5 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_BusinessSort.qbl                                                                                                       |    8 
 _Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl                                                                                                            |   22 
 _Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByYear#0.qbl                                                                                                           |   20 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales2.qbl                                                                                                      |    8 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_MinimumQuantity.qbl                                                                                                    |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl                                                                                                   |    6 
 _Main/UI/MacroPlannerWebApp/Views/Capacity___sale_budge.vw                                                                                                                    |   16 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleBySeason.qbl                                                                                                 |   21 
 _Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityByYear.qbl                                                                                                            |   20 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityBySeason.qbl                                                                                                     |   24 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_IsSecondSource.qbl                                                                                                     |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales10.qbl                                                                                                     |    8 
 _Main/BL/Type_Global_MappingOperation/Attribute_DestinationOrganizationId.qbl                                                                                                 |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl                                                                                              |    6 
 _var/_Main/ProjSettings/MacroPlannerWebApp/Views/PR_DATA.vw                                                                                                                   |  428 ++++++++
 _Main/BL/Type_Global_MappingProduct_MP/StaticMethod_GetByProductId.qbl                                                                                                        |   15 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_DisplayTechSort.qbl                                                                                                    |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity6.qbl                                                                                              |    8 
 _Main/BL/Type_Global_MappingProviderCapacity/Attribute_ProviderName.qbl                                                                                                       |    8 
 _Main/BL/Relations/Relation_Global_MappingAnnualBudgetData_GlobalOTDTable_GlobalOTDTable_Global.qbl                                                                           |   23 
 _Main/BL/Type_Global_MappingOperation/Attribute_OrganId.qbl                                                                                                                   |    7 
 _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/BL/Type_GlobalDTOTable/Method_InitTestData.qbl                                                                                                                          |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales4.qbl                                                                                                      |    8 
 _Main/BL/Type_MPSync/StaticMethod_TestData.qbl                                                                                                                                |   27 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def                                                  |    4 
 /dev/null                                                                                                                                                                     |    7 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_ProductLineAndSpecification.qbl                                                                                        |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySales6.qbl                                                                                                      |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlySheetCapacity4.qbl                                                                                              |    8 
 _Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl                                                                                                                     |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_BusinessType.qbl                                                                                                       |    8 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Attribute_MonthlyModCapacity7.qbl                                                                                                |    8 
 _Main/BL/Type_PRData/Method_DoCall.qbl                                                                                                                                        |   12 
 157 files changed, 2,845 insertions(+), 253 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_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_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_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl "b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceBySeason\043763.qbl"
similarity index 60%
copy from _Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl
copy to "_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceBySeason\043763.qbl"
index 9023738..c78100e 100644
--- a/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl
+++ "b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceBySeason\043763.qbl"
@@ -1,18 +1,20 @@
 Quintiq file version 2.0
 #parent: #root
-Method GetCapacityInSheetInSeason (
+StaticMethod GetFulfilledBalanceBySeason (
+  Strings productNo,
+  MacroPlan macroPlan,
+  Number yearNo,
   Number seasonNo
 ) as Real
 {
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
-    result := 0.0;
     fromMonth := 1 + ( seasonNo - 1 ) * 3;
     toMonth := 3 + ( seasonNo - 1 ) * 3;
+    result := 0.0;
     for( i := fromMonth; i <= toMonth; i := i + 1 ) {
-      field := Reflection::FindAttribute( "MappingAnnualBudget", "MonthlySheetCapacity" + [String]i );
-      result := result + field.GetReal( this );
+      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_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityBySeason.qbl
similarity index 60%
copy from _Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl
copy to _Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityBySeason.qbl
index 9023738..c763c5c 100644
--- a/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl
+++ b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledQuantityBySeason.qbl
@@ -1,18 +1,20 @@
 Quintiq file version 2.0
 #parent: #root
-Method GetCapacityInSheetInSeason (
+StaticMethod GetFulfilledQuantityBySeason (
+  Strings productNo,
+  MacroPlan macroPlan,
+  Number yearNo,
   Number seasonNo
 ) as Real
 {
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
-    result := 0.0;
     fromMonth := 1 + ( seasonNo - 1 ) * 3;
     toMonth := 3 + ( seasonNo - 1 ) * 3;
+    result := 0.0;
     for( i := fromMonth; i <= toMonth; i := i + 1 ) {
-      field := Reflection::FindAttribute( "MappingAnnualBudget", "MonthlySheetCapacity" + [String]i );
-      result := result + field.GetReal( this );
+      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/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_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_MappingAnnualBudget/Method_GetCapacityInSheetInHalfYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl
similarity index 66%
rename from _Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInHalfYear.qbl
rename to _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl
index 3606369..cfe0c10 100644
--- a/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInHalfYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl
@@ -11,8 +11,8 @@
     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 );
+      field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySheetCapacity" + [String]i );
+      result := result + [Real]field.GetString( this );
     }
     return result;
   *]
diff --git a/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl
similarity index 67%
rename from _Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl
rename to _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl
index 9023738..7da4592 100644
--- a/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl
@@ -11,8 +11,8 @@
     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 );
+      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_MappingAnnualBudget/Method_GetCapacityInSheetInHalfYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl
similarity index 60%
copy from _Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInHalfYear.qbl
copy to _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl
index 3606369..d882fef 100644
--- a/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInHalfYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
 #parent: #root
-Method GetCapacityInSheetInHalfYear (
+Method GetSaleAmountInHalfYear (
   Number halfNo
 ) as Real
 {
@@ -11,8 +11,8 @@
     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 );
+      field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySales" + [String]i );
+      result := result + [Real]field.GetString( this );
     }
     return result;
   *]
diff --git a/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl "b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason\043000.qbl"
similarity index 61%
copy from _Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl
copy to "_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason\043000.qbl"
index 9023738..c35dd6e 100644
--- a/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl
+++ "b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason\043000.qbl"
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
 #parent: #root
-Method GetCapacityInSheetInSeason (
+Method GetSaleAmountInSeason (
   Number seasonNo
 ) as Real
 {
@@ -11,8 +11,8 @@
     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 );
+      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_MappingAnnualBudget/StaticMethod_GetSaleByYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl
similarity index 65%
rename from _Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByYear.qbl
rename to _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl
index 679009e..5377001 100644
--- a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 StaticMethod GetSaleByYear (
   Strings productNo,
-  MPSync parent,
+  GlobalOTDTable parent,
   Number yearNo
 ) as Real
 {
@@ -11,9 +11,9 @@
   [*
     // yypsybs Sep-18-2023 (created)
     result := sum( parent, 
-                   MappingAnnualBudget, 
+                   Global_MappingAnnualBudgetData, 
                    item, 
-                   item.YearNo() = yearNo and productNo.Find( item.ProductId() ) > -1,
+                   item.YearNo() = [String]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_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl
similarity index 68%
rename from _Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByHalfYear.qbl
rename to _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl
index 0bc221e..d356e4c 100644
--- a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByHalfYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 StaticMethod GetSheetByHalfYear (
   Strings productNo,
-  MPSync parent,
+  GlobalOTDTable parent,
   Number yearNo,
   Number halfNo
 ) as Real
@@ -12,9 +12,9 @@
   [*
     // yypsybs Sep-18-2023 (created)
     result := sum( parent, 
-                   MappingAnnualBudget, 
+                   Global_MappingAnnualBudgetData, 
                    item, 
-                   item.YearNo() = yearNo and productNo.Find( item.ProductId() ) > -1,
+                   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_MappingAnnualBudget/StaticMethod_GetSheetBySeason.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl
similarity index 68%
rename from _Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetBySeason.qbl
rename to _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl
index 0d6087b..4b9775a 100644
--- a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetBySeason.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 StaticMethod GetSheetBySeason (
   Strings productNo,
-  MPSync parent,
+  GlobalOTDTable parent,
   Number yearNo,
   Number seasonNo
 ) as Real
@@ -12,9 +12,9 @@
   [*
     // yypsybs Sep-18-2023 (created)
     result := sum( parent, 
-                   MappingAnnualBudget, 
+                   Global_MappingAnnualBudgetData, 
                    item, 
-                   item.YearNo() = yearNo and productNo.Find( item.ProductId() ) > -1,
+                   item.YearNo() = [String]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_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl
similarity index 66%
rename from _Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByYear.qbl
rename to _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl
index e63a38a..a98de35 100644
--- a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 StaticMethod GetSheetByYear (
   Strings productNo,
-  MPSync parent,
+  GlobalOTDTable parent,
   Number yearNo
 ) as Real
 {
@@ -11,9 +11,9 @@
   [*
     // yypsybs Sep-18-2023 (created)
     result := sum( parent, 
-                   MappingAnnualBudget, 
+                   Global_MappingAnnualBudgetData, 
                    item, 
-                   item.YearNo() = yearNo and productNo.Find( item.ProductId() ) > -1,
+                   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_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_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_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_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_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_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/Method_MappingOperationData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
index 21238e0..3ef68b5 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
@@ -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_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/DefaultValue_BusinessType.qbl b/_Main/BL/Type_MappingAnnualBudget/DefaultValue_BusinessType.qbl
deleted file mode 100644
index 1672b03..0000000
--- a/_Main/BL/Type_MappingAnnualBudget/DefaultValue_BusinessType.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: BusinessType
-}
diff --git a/_Main/BL/Type_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_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_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/_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_PRData/Attribute_SendBy.qbl b/_Main/BL/Type_PRData/Attribute_CreateBy.qbl
similarity index 89%
rename from _Main/BL/Type_PRData/Attribute_SendBy.qbl
rename to _Main/BL/Type_PRData/Attribute_CreateBy.qbl
index 71a556e..79e0921 100644
--- a/_Main/BL/Type_PRData/Attribute_SendBy.qbl
+++ b/_Main/BL/Type_PRData/Attribute_CreateBy.qbl
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
 #parent: #root
-Attribute SendBy
+Attribute CreateBy
 {
   #keys: '3[414384.0.789498519][414384.0.789498518][414384.0.789498520]'
   Description: '鍙戦�佷汉'
diff --git a/_Main/BL/Type_PRData/Attribute_SendTIme.qbl b/_Main/BL/Type_PRData/Attribute_CreateTime.qbl
similarity index 88%
rename from _Main/BL/Type_PRData/Attribute_SendTIme.qbl
rename to _Main/BL/Type_PRData/Attribute_CreateTime.qbl
index 767d0b3..b25c6e9 100644
--- a/_Main/BL/Type_PRData/Attribute_SendTIme.qbl
+++ b/_Main/BL/Type_PRData/Attribute_CreateTime.qbl
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
 #parent: #root
-Attribute SendTime
+Attribute CreateTime
 {
   #keys: '3[414384.0.789498516][414384.0.789498515][414384.0.789498517]'
   Description: '鍙戦�佹椂闂�'
diff --git a/_Main/BL/Type_PRData/Attribute_SendTimeString.qbl b/_Main/BL/Type_PRData/Attribute_CreateTimeString.qbl
similarity index 83%
rename from _Main/BL/Type_PRData/Attribute_SendTimeString.qbl
rename to _Main/BL/Type_PRData/Attribute_CreateTimeString.qbl
index 248a63f..96b5c1d 100644
--- a/_Main/BL/Type_PRData/Attribute_SendTimeString.qbl
+++ b/_Main/BL/Type_PRData/Attribute_CreateTimeString.qbl
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
 #parent: #root
-Attribute SendTimeString
+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_SendStatus.qbl b/_Main/BL/Type_PRData/Attribute_PRReleaseStatus.qbl
similarity index 86%
rename from _Main/BL/Type_PRData/Attribute_SendStatus.qbl
rename to _Main/BL/Type_PRData/Attribute_PRReleaseStatus.qbl
index 7df5d57..3c6c4a5 100644
--- a/_Main/BL/Type_PRData/Attribute_SendStatus.qbl
+++ b/_Main/BL/Type_PRData/Attribute_PRReleaseStatus.qbl
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
 #parent: #root
-Attribute SendStatus
+Attribute PRReleaseStatus
 {
   #keys: '3[414384.0.789498513][414384.0.789498512][414384.0.789498514]'
   Description: 'PR鏁版嵁鍙戦�佺姸鎬�'
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/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_ProduceRequiredDate\043168.qbl" "b/_Main/BL/Type_PRHistoryData/Attribute_DeliveryDate\043168.qbl"
similarity index 85%
rename from "_Main/BL/Type_PRHistoryData/Attribute_ProduceRequiredDate\043168.qbl"
rename to "_Main/BL/Type_PRHistoryData/Attribute_DeliveryDate\043168.qbl"
index 56336a7..0df18fa 100644
--- "a/_Main/BL/Type_PRHistoryData/Attribute_ProduceRequiredDate\043168.qbl"
+++ "b/_Main/BL/Type_PRHistoryData/Attribute_DeliveryDate\043168.qbl"
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
 #parent: #root
-Attribute ProduceRequiredDate
+Attribute DeliveryDate
 {
   #keys: '3[414384.0.795671764][414384.0.795671763][414384.0.795671765]'
   Description: '闇�姹傛棩鏈�/浜よ揣鏃ユ湡'
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/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/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_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_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/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/_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