From ac97b8878764d0e9e8e8e3c177e385864cee616c Mon Sep 17 00:00:00 2001
From: yypsybs <yypsybs@foxmail.com>
Date: 星期三, 20 九月 2023 18:26:50 +0800
Subject: [PATCH] 年度预算产销复盘

---
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth2.qbl                                        |    8 
 _Main/BL/Type_CapacityAndSaleBudgeChartRow/Attribute_PlaceOfProductionOfArray.qbl                      |    2 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl                     |    6 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountTotal.qbl                                           |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_NumberOfCut.qbl                                               |    8 
 _Main/BL/Type_MappingSaleBudge/DefaultValue_Resolution.qbl                                             |    6 
 _Main/BL/Type_MappingSaleBudge/DefaultValue_PlaceOfProductionOfEvaporation.qbl                         |    6 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth4.qbl                                   |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth1.qbl                                     |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth10.qbl                                    |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth11.qbl                                    |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_DisplayTechnology.qbl                                         |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth2.qbl                                     |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth3.qbl                                        |    8 
 _Main/BL/Type_CapacityAndSaleBudgeChartRowProduct/StaticMethod_CreateIfNotExist.qbl                    |    2 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonLoad_OnClick.def        |    4 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth5.qbl                                   |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth10.qbl                                  |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth3.qbl                                     |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetTotal.qbl                                      |    8 
 _Main/BL/Type_MappingSaleBudge/DefaultValue_CapacityEquivalent.qbl                                     |    6 
 _Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfArray.qbl                                  |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth4.qbl                                        |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth5.qbl                                        |    8 
 _Main/BL/Type_MappingSaleBudge/DefaultValue_ShippingForm.qbl                                           |    6 
 _Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfEvaporation.qbl                            |    8 
 _Main/BL/Type_MappingBOM/StaticMethod_CreateTestData.qbl                                               |    7 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth12.qbl                                    |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth6.qbl                                   |    8 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def                          |    2 
 _Main/BL/Type_MappingSaleBudge/Attribute_NumberOfMask.qbl                                              |    8 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetBySeason.qbl                                       |   26 +
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth4.qbl                                     |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth6.qbl                                        |    8 
 _Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfMask.qbl                                           |    6 
 _Main/BL/Type_MappingSaleBudge/Attribute_OrgCode.qbl                                                   |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_Deleted.qbl                                                   |    8 
 _Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByBusinessType.qbl              |   11 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth7.qbl                                   |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_Resolution.qbl                                                |    8 
 _Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInYear.qbl                                     |   15 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByYear.qbl                                          |   20 +
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth7.qbl                                        |    8 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/Attribute_PlaceOfProductionOfArray.qbl                |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth5.qbl                                     |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def             |    6 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth6.qbl                                     |    8 
 _Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl                                   |   62 +--
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def                  |    1 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth8.qbl                                   |    8 
 _Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfCut.qbl                                            |    6 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth10.qbl                                       |    8 
 _Main/BL/Type_MPSync/StaticMethod_CapacityAndSaleBudgeYearsString.qbl                                  |    0 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth8.qbl                                        |    8 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByYear.qbl                                         |   20 +
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth7.qbl                                     |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_ShippingForm.qbl                                              |    8 
 _Main/BL/Type_MappingSaleBudge/DefaultValue_DisplayTechnology.qbl                                      |    6 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth9.qbl                                   |    8 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick#623.def |    4 
 _Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeBusinessTypeString.qbl                                 |    2 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityEquivalent.qbl                                        |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth11.qbl                                       |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def  |    8 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemRowProduct/StaticMethod_CreateIfNotExist.qbl              |    2 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth1.qbl                                   |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth8.qbl                                     |    8 
 _Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl                                                   |   50 ---
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByHalfYear.qbl                                     |   21 +
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSTotal.qbl                                        |    8 
 _Main/BL/Type_MPSync/StaticMethod_TestData.qbl                                                         |   43 ++
 _Main/BL/Type_MappingSaleBudge/Method_GetSaleAmountInYear.qbl                                          |   15 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth11.qbl                                  |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth12.qbl                                       |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth9.qbl                                        |    8 
 _Main/BL/Type_MPSync/Method_CapacityAndSaleBudgePlaceOfProductionOfArrayString.qbl                     |    2 
 /dev/null                                                                                              |    7 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth9.qbl                                     |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth2.qbl                                   |    8 
 _Main/BL/Type_MappingSaleBudge/DefaultValue_OrgCode.qbl                                                |    6 
 _Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInSeason.qbl                                   |   19 +
 _Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth1.qbl                                        |    8 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByMonth.qbl                                         |   22 +
 _Main/BL/Type_CapacityAndSaleBudge/_ROOT_Type_CapacityAndSaleBudge.qbl                                 |    2 
 _Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByPlaceOfProductionOfArray.qbl  |    9 
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth12.qbl                                  |    8 
 _Main/BL/Type_MappingSaleBudge/Method_GetCapacityInPCSInYear.qbl                                       |   15 
 _Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInHalfYear.qbl                                 |   19 +
 _Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl                                     |   50 ++-
 _Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth3.qbl                                   |    8 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByMonth.qbl                                        |   22 +
 91 files changed, 803 insertions(+), 141 deletions(-)

diff --git a/_Main/BL/Type_CapacityAndSaleBudge/_ROOT_Type_CapacityAndSaleBudge.qbl b/_Main/BL/Type_CapacityAndSaleBudge/_ROOT_Type_CapacityAndSaleBudge.qbl
index 19c5d54..650ea87 100644
--- a/_Main/BL/Type_CapacityAndSaleBudge/_ROOT_Type_CapacityAndSaleBudge.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudge/_ROOT_Type_CapacityAndSaleBudge.qbl
@@ -5,6 +5,6 @@
 {
   #keys: '5[414384.0.810464639][414384.0.810464637][0.0.0][414384.0.810464638][414384.0.810464640]'
   BaseType: Object
-  Description: '浜ч攢棰勭畻'
+  Description: '浜ч攢棰勭畻 锛侊紒锛佸純鐢紒锛侊紒'
   StructuredName: 'CapacityAndSaleBudges'
 }
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_Create.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_Create.qbl
deleted file mode 100644
index 2acad18..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_Create.qbl
+++ /dev/null
@@ -1,14 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod Create (
-  ScenarioManager parent,
-  String timeStringAndScenarioName,
-  String businessTypeOrOrgCode,
-  Real quantity
-)
-{
-  TextBody:
-  [*
-    // yypsybs Sep-20-2023 (created)
-  *]
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/Attribute_PlaceOfProductionOfArray.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartRow/Attribute_PlaceOfProductionOfArray.qbl
index 57beec6..fad5998 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/Attribute_PlaceOfProductionOfArray.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartRow/Attribute_PlaceOfProductionOfArray.qbl
@@ -3,6 +3,6 @@
 Attribute PlaceOfProductionOfArray
 {
   #keys: '3[414384.0.850180083][414384.0.850180082][414384.0.850180084]'
-  Description: '缁勭粐缂栫爜'
+  Description: '闈㈡澘鍩哄湴'
   ValueType: String
 }
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByBusinessType.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByBusinessType.qbl
index a664cdc..1a9a53a 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByBusinessType.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByBusinessType.qbl
@@ -2,14 +2,17 @@
 #parent: #root
 StaticMethod GetProductCodesByBusinessType (
   CapacityAndSaleBudgeChartRows list,
-  String businessTyoe
+  String businessType
 ) as owning Strings
 {
   TextBody:
   [*
     // yypsybs Sep-20-2023 (created)
-    return selectuniquevalues(  list, Elements, item, 
-                                item.BusinessType() = businessTyoe,
-                                item.BusinessType() );
+    result := construct( Strings );
+    rowList := selectset( list, Elements, item, item.BusinessType() = businessType );
+    traverse( rowList, Elements, row ) {
+      result := result.Union( selectvalues( row, CapacityAndSaleBudgeChartRowProduct, cell, cell.ProductCode() ) ); 
+    }
+    return &result;
   *]
 }
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByPlaceOfProductionOfArray.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByPlaceOfProductionOfArray.qbl
index 109e1d7..7ded1be 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByPlaceOfProductionOfArray.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_GetProductCodesByPlaceOfProductionOfArray.qbl
@@ -8,8 +8,11 @@
   TextBody:
   [*
     // yypsybs Sep-20-2023 (created)
-    return selectuniquevalues(  list, Elements, item, 
-                                item.PlaceOfProductionOfArray() = placeOfProductionOfArray,
-                                item.PlaceOfProductionOfArray() );
+    result := construct( Strings );
+    rowList := selectset( list, Elements, item, item.PlaceOfProductionOfArray() = placeOfProductionOfArray );
+    traverse( rowList, Elements, row ) {
+      result := result.Union( selectvalues( row, CapacityAndSaleBudgeChartRowProduct, cell, cell.ProductCode() ) ); 
+    }
+    return &result;
   *]
 }
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartRowProduct/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartRowProduct/StaticMethod_CreateIfNotExist.qbl
index 8d05fbd..ad1fad0 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeChartRowProduct/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartRowProduct/StaticMethod_CreateIfNotExist.qbl
@@ -10,7 +10,7 @@
     // yypsybs Sep-18-2023 (created)
     value := select( parent, CapacityAndSaleBudgeChartRowProduct, item, item.ProductCode() = productCode );
     if( isnull( value ) ) {
-      parent.CapacityAndSaleBudgeChartRowProduct( relnew, ProductCode := productCode );
+      value := parent.CapacityAndSaleBudgeChartRowProduct( relnew, ProductCode := productCode );
     }
     return value;
   *]
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/Attribute_OrgCode.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/Attribute_OrgCode.qbl
deleted file mode 100644
index 3329fb9..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/Attribute_OrgCode.qbl
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute OrgCode
-{
-  #keys: '3[414384.0.822962978][414384.0.822962977][414384.0.822962979]'
-  Description: '缁勭粐缂栫爜'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/Attribute_PlaceOfProductionOfArray.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/Attribute_PlaceOfProductionOfArray.qbl
new file mode 100644
index 0000000..da79fc6
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/Attribute_PlaceOfProductionOfArray.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlaceOfProductionOfArray
+{
+  #keys: '3[414384.0.864360344][414384.0.864360343][414384.0.864360345]'
+  Description: '闈㈡澘鍩哄湴'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl
index 8d6c215..e155e81 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl
@@ -3,15 +3,15 @@
 StaticMethod CreateIfNotExist (
   ScenarioManager scenarioManager,
   String businessType,
-  String orgCode
+  String placeOfProductionOfArray
 ) as CapacityAndSaleBudgeCompareItemRow
 {
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
-    value := select( scenarioManager, CapacityAndSaleBudgeCompareItemRow, row, row.BusinessType() = businessType and row.OrgCode() = orgCode );
+    value := select( scenarioManager, CapacityAndSaleBudgeCompareItemRow, row, row.BusinessType() = businessType and row.PlaceOfProductionOfArray() = placeOfProductionOfArray );
     if( isnull( value ) ) {
-      value := scenarioManager.CapacityAndSaleBudgeCompareItemRow( relnew, BusinessType := businessType, OrgCode := orgCode );  
+      value := scenarioManager.CapacityAndSaleBudgeCompareItemRow( relnew, BusinessType := businessType, PlaceOfProductionOfArray := placeOfProductionOfArray );  
     } 
     return value;
   *]
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRowProduct/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRowProduct/StaticMethod_CreateIfNotExist.qbl
index aae08c5..e0c8850 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRowProduct/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRowProduct/StaticMethod_CreateIfNotExist.qbl
@@ -10,7 +10,7 @@
     // yypsybs Sep-18-2023 (created)
     value := select( parent, CapacityAndSaleBudgeCompareItemRowProduct, item, item.ProductCode() = productCode );
     if( isnull( value ) ) {
-      parent.CapacityAndSaleBudgeCompareItemRowProduct( relnew, ProductCode := productCode );
+      value := parent.CapacityAndSaleBudgeCompareItemRowProduct( relnew, ProductCode := productCode );
     }
     return value;
   *]
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl b/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl
index f69a011..dd75de6 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl
@@ -16,55 +16,5 @@
     MatAttrSettingAndPlanStrategyDetail::CreateIfNotExist( mat2, "PROD_2", 1777.0, "PROD_2_DESC" );
     MatAttrSettingAndPlanStrategy::CreateIfNotExist( this, 3, "鎵嬫満浜嬩笟閮�", "MAT_3", "MAT_3", "TYPE_1", 233.0, "閫氱敤", "鐭懆鏈�" );
     MatAttrSettingAndPlanStrategy::CreateIfNotExist( this, 4, "鎵嬫満浜嬩笟閮�", "MAT_4", "MAT_4", "TYPE_2", 233.0, "涓撶敤", "鐭懆鏈�" );
-    
-    
-    // yypsybs Sep-15-2023 (created)
-    info( "CapacityAndSaleBudge::InitTestData" )
-    this.CapacityAndSaleBudge( relflush );
-    for( i := 1; i < 100; i := i + 1 ) {
-      row := this.CapacityAndSaleBudge( relnew, 
-                                        PlaceOfProductionOfArray := "闈㈡澘鍩哄湴" + [String]Number::Random( 1, 10 ), 
-                                        BusinessType := "浜嬩笟閮�" + [String]Number::Random( 1, 10 ), 
-                                        CapacityInPCSInMonth1 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth2 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth3 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth4 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth5 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth6 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth7 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth8 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth9 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth10 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth11 := Number::Random( 1, 10000 ),  
-                                        CapacityInPCSInMonth12 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth1 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth2 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth3 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth4 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth5 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth6 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth7 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth8 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth9 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth10 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth11 := Number::Random( 1, 10000 ),  
-                                        CapacityInSheetInMonth12 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth1 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth2 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth3 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth4 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth5 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth6 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth7 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth8 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth9 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth10 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth11 := Number::Random( 1, 10000 ),
-                                        SaleAmountInMonth12 := Number::Random( 1, 10000 ) 
-                                      );
-      row.CapacityInPCSTotal( row.GetCapacityInPCSInYear() );
-      row.CapacityInSheetTotal( row.GetCapacityInSheetInYear() );
-      row.SaleAmountTotal( row.GetSaleAmountInYear() );
-    }
   *]
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeBusinessTypeString.qbl b/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeBusinessTypeString.qbl
similarity index 66%
rename from _Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeBusinessTypeString.qbl
rename to _Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeBusinessTypeString.qbl
index a9f779b..717a4f8 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeBusinessTypeString.qbl
+++ b/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeBusinessTypeString.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // yypsybs Sep-19-2023 (created)
-    result := selectuniquevalues( this, CapacityAndSaleBudge, item, true, item.BusinessType() );
+    result := selectuniquevalues( this, MappingCapacityAndSaleBudge, item, true, item.BusinessType() );
     return result.Concatenate( ";" ) ;
   *]
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgePlaceOfProductionOfArrayString.qbl b/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgePlaceOfProductionOfArrayString.qbl
similarity index 65%
rename from _Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgePlaceOfProductionOfArrayString.qbl
rename to _Main/BL/Type_MPSync/Method_CapacityAndSaleBudgePlaceOfProductionOfArrayString.qbl
index 753ff1b..2612296 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgePlaceOfProductionOfArrayString.qbl
+++ b/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgePlaceOfProductionOfArrayString.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // yypsybs Sep-19-2023 (created)
-    result := selectuniquevalues( this, CapacityAndSaleBudge, item, true, item.PlaceOfProductionOfArray() );
+    result := selectuniquevalues( this, MappingCapacityAndSaleBudge, item, true, item.PlaceOfProductionOfArray() );
     return result.Concatenate( ";" ) ;
   *]
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_CapacityAndSaleBudgeYearsString.qbl b/_Main/BL/Type_MPSync/StaticMethod_CapacityAndSaleBudgeYearsString.qbl
similarity index 100%
rename from _Main/BL/Type_GlobalDTOTable/StaticMethod_CapacityAndSaleBudgeYearsString.qbl
rename to _Main/BL/Type_MPSync/StaticMethod_CapacityAndSaleBudgeYearsString.qbl
diff --git a/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl b/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl
new file mode 100644
index 0000000..3cb7643
--- /dev/null
+++ b/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod TestData (
+  MPSync mpSync,
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    // yypsybs Sep-20-2023 (created)
+    
+    info( "MPSync::TestData" );
+    
+    productCodeList := selectuniquevalues( macroPlan, Product_MP, item, item.ID() );
+    
+    info( "productCodeList : " + [String]productCodeList.Size() );
+    
+    mpSync.MappingCapacityAndSaleBudge( relflush );
+    for( i := 1; i <= productCodeList.Size(); i := i + 1 ) {
+      productCode := productCodeList.Element( i - 1 );
+      mappingCapacityAndSaleBudge := mpSync.MappingCapacityAndSaleBudge( relnew, 
+                                                                         ProductCode := productCode,
+                                                                         BusinessType := "浜嬩笟閮�" + [String](productCode.Length() mod 3 + 1), 
+                                                                         PlaceOfProductionOfArray := "闈㈡澘鍩哄湴" + [String](productCode.Length() mod 4 + 1)
+                                                                          );
+      for( month := 1; month <= 12; month := month + 1 ) {
+        field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInPCSInMonth" + [String]month );
+        field.Set( mappingCapacityAndSaleBudge, Real::Random( 20.0, 30.0 ) );
+        field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]month );
+        field.Set( mappingCapacityAndSaleBudge, Real::Random( 20.0, 30.0 ) );
+        field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "SaleAmountInMonth" + [String]month );
+        field.Set( mappingCapacityAndSaleBudge, Real::Random( 20.0, 30.0 ) );
+      }
+      mappingCapacityAndSaleBudge.CapacityInPCSTotal( mappingCapacityAndSaleBudge.GetCapacityInPCSInYear() );
+      mappingCapacityAndSaleBudge.CapacityInSheetTotal( mappingCapacityAndSaleBudge.GetCapacityInSheetInYear() );
+      mappingCapacityAndSaleBudge.SaleAmountTotal( mappingCapacityAndSaleBudge.GetSaleAmountInYear() );
+    }
+    
+    result := selectset( mpSync, MappingCapacityAndSaleBudge, item, true );
+    
+    info( "MappingCapacityAndSaleBudge size : " + [String]result.Size() );
+  *]
+}
diff --git a/_Main/BL/Type_MappingBOM/StaticMethod_CreateTestData.qbl b/_Main/BL/Type_MappingBOM/StaticMethod_CreateTestData.qbl
index 2c92dc7..d374c5e 100644
--- a/_Main/BL/Type_MappingBOM/StaticMethod_CreateTestData.qbl
+++ b/_Main/BL/Type_MappingBOM/StaticMethod_CreateTestData.qbl
@@ -3,19 +3,20 @@
 StaticMethod CreateTestData (
   MacroPlan parent,
   String businessType,
-  String orgCode
+  String orgCode,
+  String productCode
 ) as MappingBOM
 {
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
-    value := select( parent, MappingBOM, bom, bom.BusinessType() = businessType and bom.OrganCode() = orgCode );
+    value := select( parent, MappingBOM, bom, bom.BusinessType() = businessType and bom.OrganCode() = orgCode and bom.ProductCode() = productCode );
     if( isnull( value ) ) {
       value := parent.MappingBOM( relnew, 
                                   BusinessType := businessType,
                                   OrganCode := orgCode,
+                                  ProductCode := productCode, 
                                   ProcessSection := "", 
-                                  ProductCode := "", 
                                   ComponentCode := "", 
                                   AlternativeMaterialCode := "" );
     }
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityEquivalent.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityEquivalent.qbl
new file mode 100644
index 0000000..79ee8e4
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityEquivalent.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityEquivalent
+{
+  #keys: '3[414384.0.867241217][414384.0.867241216][414384.0.867241218]'
+  Description: '浜ц兘褰撻噺'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInJan.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInJan.qbl
deleted file mode 100644
index acb1511..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInJan.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInPCSInJan
-{
-  #keys: '3[414384.0.803580132][414384.0.803580131][414384.0.803580133]'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth1.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth1.qbl
new file mode 100644
index 0000000..5aa064a
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth1.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth1
+{
+  #keys: '3[414384.0.864360392][414384.0.864360391][414384.0.864360393]'
+  Description: '1鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth10.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth10.qbl
new file mode 100644
index 0000000..2d0823b
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth10.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth10
+{
+  #keys: '3[414384.0.864360398][414384.0.864360397][414384.0.864360399]'
+  Description: '10鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth11.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth11.qbl
new file mode 100644
index 0000000..3e4e17f
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth11.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth11
+{
+  #keys: '3[414384.0.864360395][414384.0.864360394][414384.0.864360396]'
+  Description: '11鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth12.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth12.qbl
new file mode 100644
index 0000000..a494071
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth12.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth12
+{
+  #keys: '3[414384.0.864360386][414384.0.864360385][414384.0.864360387]'
+  Description: '12鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth2.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth2.qbl
new file mode 100644
index 0000000..96e4277
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth2.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth2
+{
+  #keys: '3[414384.0.864360371][414384.0.864360370][414384.0.864360372]'
+  Description: '2鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth3.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth3.qbl
new file mode 100644
index 0000000..c82ee6a
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth3.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth3
+{
+  #keys: '3[414384.0.864360374][414384.0.864360373][414384.0.864360375]'
+  Description: '3鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth4.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth4.qbl
new file mode 100644
index 0000000..14a2e6c
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth4.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth4
+{
+  #keys: '3[414384.0.864360377][414384.0.864360376][414384.0.864360378]'
+  Description: '4鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth5.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth5.qbl
new file mode 100644
index 0000000..e889eda
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth5.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth5
+{
+  #keys: '3[414384.0.864360380][414384.0.864360379][414384.0.864360381]'
+  Description: '5鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth6.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth6.qbl
new file mode 100644
index 0000000..227edb2
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth6.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth6
+{
+  #keys: '3[414384.0.864360401][414384.0.864360400][414384.0.864360402]'
+  Description: '6鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth7.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth7.qbl
new file mode 100644
index 0000000..007d324
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth7.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth7
+{
+  #keys: '3[414384.0.864360383][414384.0.864360382][414384.0.864360384]'
+  Description: '7鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth8.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth8.qbl
new file mode 100644
index 0000000..0bea26a
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth8.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth8
+{
+  #keys: '3[414384.0.864360368][414384.0.864360367][414384.0.864360369]'
+  Description: '8鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth9.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth9.qbl
new file mode 100644
index 0000000..ce4956a
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSInMonth9.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSInMonth9
+{
+  #keys: '3[414384.0.864360389][414384.0.864360388][414384.0.864360390]'
+  Description: '9鏈堜骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSTotal.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSTotal.qbl
new file mode 100644
index 0000000..c7b3fc7
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInPCSTotal.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInPCSTotal
+{
+  #keys: '3[414384.0.867241226][414384.0.867241225][414384.0.867241227]'
+  Description: '骞翠骇鑳斤紙PCS锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInJan.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInJan.qbl
deleted file mode 100644
index b063ea3..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInJan.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CapacityInSheetInJan
-{
-  #keys: '3[414384.0.803580142][414384.0.803580141][414384.0.803580143]'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth1.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth1.qbl
new file mode 100644
index 0000000..f2ed586
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth1.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth1
+{
+  #keys: '3[414384.0.864360406][414384.0.864360405][414384.0.864360407]'
+  Description: '1鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth10.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth10.qbl
new file mode 100644
index 0000000..9e791d0
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth10.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth10
+{
+  #keys: '3[414384.0.864360430][414384.0.864360429][414384.0.864360431]'
+  Description: '10鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth11.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth11.qbl
new file mode 100644
index 0000000..283eb69
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth11.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth11
+{
+  #keys: '3[414384.0.864360427][414384.0.864360426][414384.0.864360428]'
+  Description: '11鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth12.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth12.qbl
new file mode 100644
index 0000000..b91d698
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth12.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth12
+{
+  #keys: '3[414384.0.864360439][414384.0.864360438][414384.0.864360440]'
+  Description: '12鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth2.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth2.qbl
new file mode 100644
index 0000000..b73c187
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth2.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth2
+{
+  #keys: '3[414384.0.864360409][414384.0.864360408][414384.0.864360410]'
+  Description: '2鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth3.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth3.qbl
new file mode 100644
index 0000000..7d60a74
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth3.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth3
+{
+  #keys: '3[414384.0.864360421][414384.0.864360420][414384.0.864360422]'
+  Description: '3鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth4.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth4.qbl
new file mode 100644
index 0000000..6c46554
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth4.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth4
+{
+  #keys: '3[414384.0.864360415][414384.0.864360414][414384.0.864360416]'
+  Description: '4鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth5.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth5.qbl
new file mode 100644
index 0000000..575b883
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth5.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth5
+{
+  #keys: '3[414384.0.864360412][414384.0.864360411][414384.0.864360413]'
+  Description: '5鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth6.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth6.qbl
new file mode 100644
index 0000000..5af9a7b
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth6.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth6
+{
+  #keys: '3[414384.0.864360424][414384.0.864360423][414384.0.864360425]'
+  Description: '6鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth7.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth7.qbl
new file mode 100644
index 0000000..dca7992
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth7.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth7
+{
+  #keys: '3[414384.0.864360433][414384.0.864360432][414384.0.864360434]'
+  Description: '7鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth8.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth8.qbl
new file mode 100644
index 0000000..3daef81
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth8.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth8
+{
+  #keys: '3[414384.0.864360436][414384.0.864360435][414384.0.864360437]'
+  Description: '8鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth9.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth9.qbl
new file mode 100644
index 0000000..b739807
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetInMonth9.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetInMonth9
+{
+  #keys: '3[414384.0.864360418][414384.0.864360417][414384.0.864360419]'
+  Description: '9鏈堜骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetTotal.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetTotal.qbl
new file mode 100644
index 0000000..1ec9da6
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_CapacityInSheetTotal.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CapacityInSheetTotal
+{
+  #keys: '3[414384.0.867241232][414384.0.867241231][414384.0.867241233]'
+  Description: '骞翠骇鑳斤紙Sheet锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_Deleted.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_Deleted.qbl
new file mode 100644
index 0000000..38d2205
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_Deleted.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Deleted
+{
+  #keys: '3[414384.0.867241223][414384.0.867241222][414384.0.867241224]'
+  Description: '宸插垹闄�'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_DisplayTechnology.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_DisplayTechnology.qbl
new file mode 100644
index 0000000..cfa5f36
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_DisplayTechnology.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DisplayTechnology
+{
+  #keys: '3[414384.0.867241208][414384.0.867241207][414384.0.867241209]'
+  Description: '鏄剧ず鎶�鏈垎绫�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfCut.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfCut.qbl
new file mode 100644
index 0000000..aac3e19
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfCut.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute NumberOfCut
+{
+  #keys: '3[414384.0.867241229][414384.0.867241228][414384.0.867241230]'
+  Description: '鍒囧壊鏁�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfMask.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfMask.qbl
new file mode 100644
index 0000000..0a37a77
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_NumberOfMask.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute NumberOfMask
+{
+  #keys: '3[414384.0.867241241][414384.0.867241240][414384.0.867241242]'
+  Description: 'mask鏁�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_OrgCode.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_OrgCode.qbl
new file mode 100644
index 0000000..3e69afb
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_OrgCode.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrgCode
+{
+  #keys: '3[414384.0.867241214][414384.0.867241213][414384.0.867241215]'
+  Description: '涓氬姟閮ㄩ棬'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfArray.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfArray.qbl
new file mode 100644
index 0000000..5f3564c
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfArray.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlaceOfProductionOfArray
+{
+  #keys: '3[414384.0.864360358][414384.0.864360357][414384.0.864360359]'
+  Description: '闈㈡澘鍩哄湴'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfEvaporation.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfEvaporation.qbl
new file mode 100644
index 0000000..78ade77
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_PlaceOfProductionOfEvaporation.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlaceOfProductionOfEvaporation
+{
+  #keys: '3[414384.0.867241211][414384.0.867241210][414384.0.867241212]'
+  Description: '钂搁晙浜у湴'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_Resolution.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_Resolution.qbl
new file mode 100644
index 0000000..f503398
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_Resolution.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Resolution
+{
+  #keys: '3[414384.0.867241235][414384.0.867241234][414384.0.867241236]'
+  Description: '鍒嗚鲸鐜�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth1.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth1.qbl
new file mode 100644
index 0000000..d061259
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth1.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth1
+{
+  #keys: '3[414384.0.864360470][414384.0.864360469][414384.0.864360471]'
+  Description: '1鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth10.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth10.qbl
new file mode 100644
index 0000000..824026b
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth10.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth10
+{
+  #keys: '3[414384.0.864360449][414384.0.864360448][414384.0.864360450]'
+  Description: '10鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth11.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth11.qbl
new file mode 100644
index 0000000..896ab80
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth11.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth11
+{
+  #keys: '3[414384.0.864360443][414384.0.864360442][414384.0.864360444]'
+  Description: '11鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth12.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth12.qbl
new file mode 100644
index 0000000..e6fb2ea
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth12.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth12
+{
+  #keys: '3[414384.0.864360455][414384.0.864360454][414384.0.864360456]'
+  Description: '12鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth2.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth2.qbl
new file mode 100644
index 0000000..7f2e07b
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth2.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth2
+{
+  #keys: '3[414384.0.864360461][414384.0.864360460][414384.0.864360462]'
+  Description: '2鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth3.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth3.qbl
new file mode 100644
index 0000000..cafbdf7
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth3.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth3
+{
+  #keys: '3[414384.0.864360467][414384.0.864360466][414384.0.864360468]'
+  Description: '3鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth4.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth4.qbl
new file mode 100644
index 0000000..d710f68
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth4.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth4
+{
+  #keys: '3[414384.0.864360464][414384.0.864360463][414384.0.864360465]'
+  Description: '4鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth5.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth5.qbl
new file mode 100644
index 0000000..59d0ed8
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth5.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth5
+{
+  #keys: '3[414384.0.864360476][414384.0.864360475][414384.0.864360477]'
+  Description: '5鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth6.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth6.qbl
new file mode 100644
index 0000000..bb36165
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth6.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth6
+{
+  #keys: '3[414384.0.864360458][414384.0.864360457][414384.0.864360459]'
+  Description: '6鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth7.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth7.qbl
new file mode 100644
index 0000000..68f79e6
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth7.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth7
+{
+  #keys: '3[414384.0.864360473][414384.0.864360472][414384.0.864360474]'
+  Description: '7鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth8.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth8.qbl
new file mode 100644
index 0000000..212ce32
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth8.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth8
+{
+  #keys: '3[414384.0.864360446][414384.0.864360445][414384.0.864360447]'
+  Description: '8鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth9.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth9.qbl
new file mode 100644
index 0000000..e014c2a
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountInMonth9.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountInMonth9
+{
+  #keys: '3[414384.0.864360452][414384.0.864360451][414384.0.864360453]'
+  Description: '9鏈堥攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountTotal.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountTotal.qbl
new file mode 100644
index 0000000..db943a7
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_SaleAmountTotal.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaleAmountTotal
+{
+  #keys: '3[414384.0.867241220][414384.0.867241219][414384.0.867241221]'
+  Description: '骞撮攢鍞锛堜竾锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_SalesAmountInWInJan.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_SalesAmountInWInJan.qbl
deleted file mode 100644
index 97fa1b8..0000000
--- a/_Main/BL/Type_MappingSaleBudge/Attribute_SalesAmountInWInJan.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute SalesAmountInWInJan
-{
-  #keys: '3[414384.0.803580152][414384.0.803580151][414384.0.803580153]'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_ShippingForm.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_ShippingForm.qbl
new file mode 100644
index 0000000..8356f90
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_ShippingForm.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ShippingForm
+{
+  #keys: '3[414384.0.867241244][414384.0.867241243][414384.0.867241245]'
+  Description: '鍑鸿揣褰㈡��'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_CapacityEquivalent.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_CapacityEquivalent.qbl
new file mode 100644
index 0000000..c5be8e2
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/DefaultValue_CapacityEquivalent.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: CapacityEquivalent
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_DisplayTechnology.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_DisplayTechnology.qbl
new file mode 100644
index 0000000..81ea97e
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/DefaultValue_DisplayTechnology.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: DisplayTechnology
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfCut.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfCut.qbl
new file mode 100644
index 0000000..c512ccf
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfCut.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: NumberOfCut
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfMask.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfMask.qbl
new file mode 100644
index 0000000..27114c0
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/DefaultValue_NumberOfMask.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: NumberOfMask
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_OrgCode.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_OrgCode.qbl
new file mode 100644
index 0000000..e95264f
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/DefaultValue_OrgCode.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: OrgCode
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_PlaceOfProductionOfEvaporation.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_PlaceOfProductionOfEvaporation.qbl
new file mode 100644
index 0000000..0c8ee87
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/DefaultValue_PlaceOfProductionOfEvaporation.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: PlaceOfProductionOfEvaporation
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_Resolution.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_Resolution.qbl
new file mode 100644
index 0000000..e505ebf
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/DefaultValue_Resolution.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Resolution
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/DefaultValue_ShippingForm.qbl b/_Main/BL/Type_MappingSaleBudge/DefaultValue_ShippingForm.qbl
new file mode 100644
index 0000000..bf077c5
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/DefaultValue_ShippingForm.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ShippingForm
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInPCSInYear.qbl b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInPCSInYear.qbl
new file mode 100644
index 0000000..d3faf58
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/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( "MappingCapacityAndSaleBudge", "CapacityInPCSInMonth" + [String]i );
+      result := result + field.GetReal( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInHalfYear.qbl b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInHalfYear.qbl
new file mode 100644
index 0000000..7ddf422
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInHalfYear.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetCapacityInSheetInHalfYear (
+  Number halfNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := 0.0;
+    fromMonth := 1 + ( halfNo - 1 ) * 6;
+    toMonth := 6 + ( halfNo - 1 ) * 6;
+    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
+      field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]i );
+      result := result + field.GetReal( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInSeason.qbl b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInSeason.qbl
new file mode 100644
index 0000000..75d8ad6
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInSeason.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetCapacityInSheetInSeason (
+  Number seasonNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := 0.0;
+    fromMonth := 1 + ( seasonNo - 1 ) * 3;
+    toMonth := 3 + ( seasonNo - 1 ) * 3;
+    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
+      field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]i );
+      result := result + field.GetReal( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInYear.qbl b/_Main/BL/Type_MappingSaleBudge/Method_GetCapacityInSheetInYear.qbl
new file mode 100644
index 0000000..ddb2a10
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/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( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]i );
+      result := result + field.GetReal( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Method_GetSaleAmountInYear.qbl b/_Main/BL/Type_MappingSaleBudge/Method_GetSaleAmountInYear.qbl
new file mode 100644
index 0000000..93bf2ba
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/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( "MappingCapacityAndSaleBudge", "SaleAmountInMonth" + [String]i );
+      result := result + field.GetReal( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByMonth.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByMonth.qbl
new file mode 100644
index 0000000..a004017
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByMonth.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSaleByMonth (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo,
+  Number monthNo
+) as Real
+{
+  Description: '閿�鍞锛圵锛�'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "SaleAmountInMonth" + [String]monthNo );
+    value := sum( parent, 
+                  MappingCapacityAndSaleBudge, 
+                  item, 
+                  productNo.Find( item.ProductCode() ) > -1,
+                  field.GetReal( item ) );
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByYear.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByYear.qbl
new file mode 100644
index 0000000..c5ef67c
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByYear.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSaleByYear (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo
+) as Real
+{
+  Description: '閿�鍞锛圵锛�'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := sum( parent, 
+                   MappingCapacityAndSaleBudge, 
+                   item, 
+                   productNo.Find( item.ProductCode() ) > -1,
+                   item.GetSaleAmountInYear() );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByHalfYear.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByHalfYear.qbl
new file mode 100644
index 0000000..d0d21e7
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByHalfYear.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSheetByHalfYear (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo,
+  Number halfNo
+) as Real
+{
+  Description: '浜ц兘 - 瀹炴暟澶у紶'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := sum( parent, 
+                   MappingCapacityAndSaleBudge, 
+                   item, 
+                   productNo.Find( item.ProductCode() ) > -1,
+                   item.GetCapacityInSheetInHalfYear( halfNo ) );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByMonth.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByMonth.qbl
new file mode 100644
index 0000000..03c0529
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByMonth.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSheetByMonth (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo,
+  Number monthNo
+) as Real
+{
+  Description: '浜ц兘-瀹炴暟澶у紶'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]monthNo );
+    value := sum( parent, 
+                  MappingCapacityAndSaleBudge, 
+                  item, 
+                  productNo.Find( item.ProductCode() ) > -1,
+                  field.GetReal( item ) );
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetBySeason.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetBySeason.qbl
new file mode 100644
index 0000000..3426e30
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetBySeason.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSheetBySeason (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo,
+  Number seasonNo
+) as Real
+{
+  Description: '浜ц兘 - 瀹炴暟澶у紶'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    
+    list := selectset( parent, 
+                       MappingCapacityAndSaleBudge, 
+                       item, 
+                       productNo.Find( item.ProductCode() ) > -1 );
+    result := sum( parent, 
+                   MappingCapacityAndSaleBudge, 
+                   item, 
+                   productNo.Find( item.ProductCode() ) > -1,
+                   item.GetCapacityInSheetInSeason( seasonNo ) );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByYear.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByYear.qbl
new file mode 100644
index 0000000..124d7ff
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByYear.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSheetByYear (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo
+) as Real
+{
+  Description: '浜ц兘 - 瀹炴暟澶у紶'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := sum( parent, 
+                   MappingCapacityAndSaleBudge, 
+                   item, 
+                   productNo.Find( item.ProductCode() ) > -1,
+                   item.GetCapacityInSheetInYear() );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl
index 43f414f..69f306b 100644
--- a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl
+++ b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl
@@ -32,19 +32,21 @@
     this.CapacityAndSaleBudgeChartElement( relflush );
     
     // ====鎸夐潰鏉垮熀鍦板拰浜嬩笟閮ㄥ浜у搧杩涜绛涢�夊垎缁�====
-    historyData := selectset( otdTable, CapacityAndSaleBudge, item, true );
+    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() );
     // 鐢熸垚鍥捐〃鍏冪礌
@@ -56,10 +58,10 @@
                                                TimeStringAndScenarioName := [String]year + "骞�-鐩爣",
                                                BusinessTypeOrOrgCode := placeOfProductionOfArray, 
                                                Quantity := ifexpr( isCapacity,
-                                                                   CapacityAndSaleBudge::GetSheetByYear( productCodeList, otdTable, [Number]year ),
+                                                                   MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, [Number]year ),
                                                                    MappingForecast::GetQuantityByYear( productCodeList, mappingParent, [Number]year ) )
                                                );  
-          // S&OP
+        // S&OP
         traverse( macroPlans, Elements, macroPlan ) {
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-" + macroPlan.ScenarioName(),
@@ -79,10 +81,10 @@
                                                  TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
                                                  BusinessTypeOrOrgCode := placeOfProductionOfArray, 
                                                  Quantity := ifexpr( isCapacity,
-                                                                     CapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, otdTable, [Number]year, halfNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ),
                                                                      MappingForecast::GetQuantityByHalfYear( productCodeList, mappingParent, [Number]year, halfNo ) )
                                                  );  
-            // S&OP
+          // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
@@ -99,14 +101,18 @@
       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害-鐩爣",
                                                  BusinessTypeOrOrgCode := placeOfProductionOfArray, 
                                                  Quantity := ifexpr( isCapacity,
-                                                                     CapacityAndSaleBudge::GetSheetBySeason( productCodeList, otdTable, [Number]year, seasonNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ),
                                                                      MappingForecast::GetQuantityBySeason( productCodeList, mappingParent, [Number]year, seasonNo ) )
                                                  );  
-            // S&OP
+    //      info( "productCodeList : " + [String]productCodeList.Size() );
+          // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
@@ -127,10 +133,10 @@
                                                  TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]monthNo + "鏈�-鐩爣",
                                                  BusinessTypeOrOrgCode := placeOfProductionOfArray, 
                                                  Quantity := ifexpr( isCapacity,
-                                                                     CapacityAndSaleBudge::GetSheetByMonth( productCodeList, otdTable, [Number]year, monthNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ),
                                                                      MappingForecast::GetQuantityByMonth( productCodeList, mappingParent, [Number]year, monthNo ) )
                                                  );  
-            // S&OP
+          // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]monthNo + "鏈�-" + macroPlan.ScenarioName(),
@@ -151,10 +157,10 @@
                                                TimeStringAndScenarioName := [String]year + "骞�-鐩爣",
                                                BusinessTypeOrOrgCode := businessType, 
                                                Quantity := ifexpr( isCapacity,
-                                                                   CapacityAndSaleBudge::GetSheetByYear( productCodeList, otdTable, [Number]year ),
+                                                                   MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, [Number]year ),
                                                                    MappingForecast::GetQuantityByYear( productCodeList, mappingParent, [Number]year ) )
                                                );  
-          // S&OP
+        // S&OP
         traverse( macroPlans, Elements, macroPlan ) {
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-" + macroPlan.ScenarioName(),
@@ -174,10 +180,10 @@
                                                  TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
                                                  BusinessTypeOrOrgCode := businessType, 
                                                  Quantity := ifexpr( isCapacity,
-                                                                     CapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, otdTable, [Number]year, halfNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ),
                                                                      MappingForecast::GetQuantityByHalfYear( productCodeList, mappingParent, [Number]year, halfNo ) )
                                                  );  
-            // S&OP
+          // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
@@ -198,10 +204,10 @@
                                                  TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-鐩爣",
                                                  BusinessTypeOrOrgCode := businessType, 
                                                  Quantity := ifexpr( isCapacity,
-                                                                     CapacityAndSaleBudge::GetSheetBySeason( productCodeList, otdTable, [Number]year, seasonNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ),
                                                                      MappingForecast::GetQuantityBySeason( productCodeList, mappingParent, [Number]year, seasonNo ) )
                                                  );  
-            // S&OP
+          // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
@@ -222,10 +228,10 @@
                                                  TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]monthNo + "鏈�-鐩爣",
                                                  BusinessTypeOrOrgCode := businessType, 
                                                  Quantity := ifexpr( isCapacity,
-                                                                     CapacityAndSaleBudge::GetSheetByMonth( productCodeList, otdTable, [Number]year, monthNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ),
                                                                      MappingForecast::GetQuantityByMonth( productCodeList, mappingParent, [Number]year, monthNo ) )
                                                  );  
-            // S&OP
+          // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]monthNo + "鏈�-" + macroPlan.ScenarioName(),
@@ -238,5 +244,15 @@
         }
       }
     }
+    //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_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl
index a2a5dc7..6688d88 100644
--- a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl
+++ b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl
@@ -37,39 +37,34 @@
     this.CapacityAndSaleBudgeCompareItemRow( relflush );
     this.CapacityAndSaleBudgeCompareItemColumn( relflush );
     // ====姹囨�绘墍鏈夊嚭鐜扮殑浜у搧====
-    productCodeList := construct( Strings );
     historyData := selectset( mpSync, MappingCapacityAndSaleBudge, item, true );
+    info( "historyData : " + [String]historyData.Size() )
     traverse( historyData, Elements, one ) {
-      productCodeList.Add( one.ProductCode() );
-    }
-    traverse( macroPlans, Elements, macroPlan ) {
-      traverse( macroPlan, Product_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, pispip ) {
-        productCodeList.Add( pispip.ProductInStockingPoint_MP().Product_MP().ID() );
-      }
-    }
-    productCodeList := selectuniquevalues( productCodeList, Elements, item, item );
-    info( "product count : " + [String]productCodeList.Size() )
-    // ====鏍规嵁浜у搧鏌ヤ簨涓氶儴鍜岀粍缁囩紪鐮侊紝鐒跺悗鎸変簨涓氶儴鍜岀粍缁囩紪鐮佹眹鎬�====
-    traverse( productCodeList, Elements, productCode ) {
-      bom := MappingBOM::CreateTestData( mappingParent, [String](productCode.Length() mod 3), [String](productCode.Length() mod 4) );
-    //  bom := select( mappingParent, MappingBOM, bom, bom.ProductCode() = productCode );
-      if( not isnull( bom ) ) {
+      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 );
+      if( boms.Size() > 0 ) {
+        bom := boms.First();
         businessType := bom.BusinessType();
-        orgCode := bom.OrganCode();
-        row := CapacityAndSaleBudgeCompareItemRow::CreateIfNotExist( this, businessType, orgCode );
+        placeOfProductionOfArray := one.PlaceOfProductionOfArray();
+        // 鐩稿悓闈㈡澘鍩哄湴鍜屼簨涓氶儴鐨勬斁涓�琛�
+        row := CapacityAndSaleBudgeCompareItemRow::CreateIfNotExist( this, businessType, placeOfProductionOfArray );
         // 璁板綍姣忚鍖呭惈鍝簺product
         CapacityAndSaleBudgeCompareItemRowProduct::CreateIfNotExist( row, productCode );
+      } else {
+    //    info( "111111" );
       }
     }
+    info( "CapacityAndSaleBudgeCompareItemRow : " + [String]selectset( this, CapacityAndSaleBudgeCompareItemRow, item, true ).Size() );
     // ====浠庡乏鍚戝彸鐢熸垚鍒楀ご涓庡唴瀹�====
     // 浜嬩笟閮紝缁勭粐
-    info( "dealing businessType and orgCode" )
+    info( "dealing businessType and placeOfProductionOfArray" )
     columnBusinessType := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜嬩笟閮�" );
-    columnOrgCode := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "缁勭粐缂栫爜" );
+    columnPlaceOfProductionOfArray := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍩哄湴" );
     traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
       cell := columnBusinessType.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.BusinessType() );
       cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-      cell := columnOrgCode.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.OrgCode() );
+      cell := columnPlaceOfProductionOfArray.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.PlaceOfProductionOfArray() );
       cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
     }
     // 闈㈡澘鍒嗛厤閲� - 骞村害棰勭畻 (sheets)
@@ -78,18 +73,18 @@
     if( CapacityAndSaleBudgeFilterItem::Contains( items, "闈㈡澘鍒嗛厤閲�" ) ) {
       // 鍘嗗彶鏁版嵁
       traverse( months, Elements, month ) {
-        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + "-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
+        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
         traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-          cellReal := CapacityAndSaleBudge::GetSheetByMonth( row.GetProductCodes(), otdTable, DateTime::Now().Year(), month.MonthNo() );
-          cellReal := Real::Random( 1.0, 999.0 );
+          cellReal := MappingCapacityAndSaleBudge::GetSheetByMonth( row.GetProductCodes(), mpSync, DateTime::Now().Year(), month.MonthNo() );
+    //      cellReal := Real::Random( 1.0, 999.0 );
           cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
           cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
         }
       }
       columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-total-骞村害棰勭畻" );
       traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-        cellReal := CapacityAndSaleBudge::GetSheetByYear( row.GetProductCodes(), otdTable, DateTime::Now().Year() );
-        cellReal := Real::Random( 1.0, 999.0 );
+        cellReal := MappingCapacityAndSaleBudge::GetSheetByYear( row.GetProductCodes(), mpSync, DateTime::Now().Year() );
+    //    cellReal := Real::Random( 1.0, 999.0 );
         cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
         cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
       }
@@ -101,7 +96,7 @@
                                                                                     "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-" + macroPlan.ScenarioName() );
             traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
               cellReal := Product_MP::GetNewSupplyByMonth( row.GetProductCodes(), macroPlan, year.YearNo(), month.MonthNo() );
-              cellReal := Real::Random( 1.0, 999.0 );
+    //          cellReal := Real::Random( 1.0, 999.0 );
               cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
               cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
             }
@@ -110,7 +105,7 @@
                                                                                  "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-" + macroPlan.ScenarioName() );
           traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
             cellReal := Product_MP::GetNewSupplyByYear( row.GetProductCodes(), macroPlan, year.YearNo() );
-            cellReal := Real::Random( 1.0, 999.0 );
+    //        cellReal := Real::Random( 1.0, 999.0 );
             cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
             cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
           }
@@ -124,16 +119,16 @@
       traverse( months, Elements, month ) {
         columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + "-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
         traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-          cellReal := CapacityAndSaleBudge::GetSaleByMonth( row.GetProductCodes(), otdTable, DateTime::Now().Year(), month.MonthNo() );
-          cellReal := Real::Random( 1.0, 999.0 );
+          cellReal := MappingCapacityAndSaleBudge::GetSaleByMonth( row.GetProductCodes(), mpSync, DateTime::Now().Year(), month.MonthNo() );
+    //      cellReal := Real::Random( 1.0, 999.0 );
           cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
           cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
         }
       }
       columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-total-骞村害棰勭畻" );
       traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-        cellReal := CapacityAndSaleBudge::GetSaleByYear( row.GetProductCodes(), otdTable, DateTime::Now().Year() );
-        cellReal := Real::Random( 1.0, 999.0 );
+        cellReal := MappingCapacityAndSaleBudge::GetSaleByYear( row.GetProductCodes(), mpSync, DateTime::Now().Year() );
+    //    cellReal := Real::Random( 1.0, 999.0 );
         cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
         cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
       }
@@ -163,6 +158,7 @@
       // 鍘嗗彶鏁版嵁
       columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "澶у紶鐩堝埄棰�-骞村害棰勭畻" );
       traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+        // todo
         cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
         cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
       }
@@ -181,6 +177,7 @@
       // 鍘嗗彶鏁版嵁
       columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-骞村害棰勭畻" );
       traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+        // todo
         cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
         cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
       }
@@ -188,6 +185,7 @@
       traverse( macroPlans, Elements, macroPlan ) {
         columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-" + [String]year.YearNo() + "骞�" );
         traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+          // todo
           cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
           cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
         }
@@ -197,7 +195,7 @@
     // 璁剧疆rowNo鍜宑olumnNo
     info( "set rowNo and columnNo" );
     rowNo := 1;
-    rowSorted := selectsortedset( this, CapacityAndSaleBudgeCompareItemRow, item, item.BusinessType() + "_" + item.OrgCode() );
+    rowSorted := selectsortedset( this, CapacityAndSaleBudgeCompareItemRow, item, item.PlaceOfProductionOfArray() + "_" + item.BusinessType() );
     traverse( rowSorted, Elements, item ) {
       item.RowNo( rowNo );
       rowNo := rowNo + 1;
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def b/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def
index a803cba..e0f9eb6 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def
@@ -34,7 +34,7 @@
       Properties:
       [
         Image: 'THICK_ARROW_DOWN_BLUE'
-        Label: 'Clean & Load'
+        Label: '閲嶆柊鍔犺浇'
         Taborder: 0
       ]
     }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick\043623.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick\043623.def"
index ca3a5f2..6e0a043 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick\043623.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick\043623.def"
@@ -8,10 +8,6 @@
   CanBindMultiple: false
   DefinitionID => /ListPRData_844/Responsedef_ListPRData_844_WebMenu_OnClick
   Initiator: 'MenuPrintRequest'
-  Precondition:
-  [*
-    
-  *]
   QuillAction
   {
     Body:
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 5a0a69d..0c4edde 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonLoad_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonLoad_OnClick.def
@@ -5,10 +5,6 @@
   #keys: '[414384.0.859141084]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
-  Precondition:
-  [*
-    
-  *]
   QuillAction
   {
     Body:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
index d67039a..478593e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
@@ -11,10 +11,10 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'MPSync'
+        Source: 'MPSync'
         Taborder: 0
-        Transformation: 'CapacityAndSaleBudge'
+        Transformation: 'MappingCapacityAndSaleBudge'
       ]
     }
     #child: listActionBarPageCapacityAndSaleBudge
@@ -28,7 +28,7 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Deleted","title":"Deleted","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Deleted"}},{"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":"LineAndSpec","title":"LineAndSpec","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LineAndSpec"}},{"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":"Deleted","title":"Deleted","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Deleted"}},{"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"}}]'
         ContextMenu: 'listContextMenuCapacityAndSaleBudge'
         SortCriteria: 'BusinessType;OrgCode;ProductCode'
         Taborder: 2
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def
index 99ec0c4..2b3f638 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def
@@ -10,6 +10,7 @@
   {
     Body:
     [*
+      MPSync::TestData( MPSync, MacroPlan );
       GlobalOTDTable.InitTestData();
     *]
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def
index ea33703..51a6e54 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def
@@ -11,9 +11,9 @@
     [*
       CapacityAndSaleBudgeChartElement::TestData( ScenarioManager );
       
-      DropDownBusinessTypes.Strings( GlobalOTDTable.CapacityAndSaleBudgeBusinessTypeString() );
-      DropDownPlaceOfProductionOfArrays.Strings( GlobalOTDTable.CapacityAndSaleBudgePlaceOfProductionOfArrayString() );
-      DropDownYears.Strings( GlobalOTDTable::CapacityAndSaleBudgeYearsString() );
+      DropDownBusinessTypes.Strings( MPSync.CapacityAndSaleBudgeBusinessTypeString() );
+      DropDownPlaceOfProductionOfArrays.Strings( MPSync.CapacityAndSaleBudgePlaceOfProductionOfArrayString() );
+      DropDownYears.Strings( MPSync::CapacityAndSaleBudgeYearsString() );
     *]
     GroupServerCalls: false
   }

--
Gitblit v1.9.3