From 744ece58704eabc06b44d3df45216bcced80ed96 Mon Sep 17 00:00:00 2001
From: yypsybs <yypsybs@foxmail.com>
Date: 星期五, 22 九月 2023 22:52:01 +0800
Subject: [PATCH] 处理测试问题

---
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def        |   22 +
 _Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl                                                        |    2 
 _Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeExport.qbl                                                                   |  143 +++++++++++++
 _Main/BL/Type_MappingSaleBudge/StaticMethod_ExpectedHeaders.qbl                                                              |   64 +++++
 _Main/BL/Type_MappingSaleBudge/StaticMethod_Export.qbl                                                                       |   73 ++++++
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def                  |   11 +
 _Main/BL/Type_MPSync/StaticMethod_TestData.qbl                                                                               |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def                                        |    1 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_ExportFields.qbl                                                                 |   64 +++++
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def                       |   23 ++
 _Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart#95.qbl                                                        |  100 ++++----
 _Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl                                                           |  102 ++++----
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def                        |    2 
 14 files changed, 496 insertions(+), 117 deletions(-)

diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl
index 822bde4..7fa388c 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl
@@ -10,7 +10,7 @@
     // yypsybs Sep-15-2023 (created)
     existList := selectuniquevalues( parent, CapacityAndSaleBudgeFilterYear, item, item.YearNo() );
     nowYear := Date::Today().Year();
-    for( i := nowYear - 10; i <= nowYear; i++ ) {
+    for( i := nowYear - 10; i <= nowYear + 5; i++ ) {
       if( existList.Find( i ) = -1 ) {
         parent.CapacityAndSaleBudgeFilterYear( relnew, 
                                                YearNo := i );
diff --git a/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeExport.qbl b/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeExport.qbl
new file mode 100644
index 0000000..0048b94
--- /dev/null
+++ b/_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeExport.qbl
@@ -0,0 +1,143 @@
+Quintiq file version 2.0
+#parent: #root
+Method CapacityAndSaleBudgeExport () as BinaryValue
+{
+  Description: '瀵煎嚭姣旇緝缁撴灉'
+  TextBody:
+  [*
+    // generate by generate_export.py
+    info( "export start" );
+    text:= '<?xml version="1.0" encoding="utf-8" standalone="yes"?><table><name>骞村害浜ч攢棰勭畻</name>
+    <column><name>鍒犻櫎鏍囪</name><type>String</type></column>
+    <column><name>骞翠唤</name><type>Number</type></column>
+    <column><name>涓氬姟閮ㄩ棬</name><type>String</type></column>
+    <column><name>鏄剧ず鎶�鏈垎绫�</name><type>String</type></column>
+    <column><name>涓氬姟鍒嗙被</name><type>String</type></column>
+    <column><name>浜у搧绾�/浜у搧瑙勬牸</name><type>String</type></column>
+    <column><name>浜у搧鏂欏彿</name><type>String</type></column>
+    <column><name>Array浜у湴</name><type>String</type></column>
+    <column><name>钂搁晙浜у湴</name><type>String</type></column>
+    <column><name>鍒嗚鲸鐜�</name><type>String</type></column>
+    <column><name>鍑鸿揣褰㈡��</name><type>String</type></column>
+    <column><name>鍒囧壊鏁�</name><type>String</type></column>
+    <column><name>浜ц兘褰撻噺</name><type>String</type></column>
+    <column><name>mask鏁�</name><type>String</type></column>
+    <column><name>1鏈堜骇鑳�(PCS)</name><type>Real</type></column>
+    <column><name>2鏈堜骇鑳�(PCS)</name><type>Real</type></column>
+    <column><name>3鏈堜骇鑳�(PCS)</name><type>Real</type></column>
+    <column><name>4鏈堜骇鑳�(PCS)</name><type>Real</type></column>
+    <column><name>5鏈堜骇鑳�(PCS)</name><type>Real</type></column>
+    <column><name>6鏈堜骇鑳�(PCS)</name><type>Real</type></column>
+    <column><name>7鏈堜骇鑳�(PCS)</name><type>Real</type></column>
+    <column><name>8鏈堜骇鑳�(PCS)</name><type>Real</type></column>
+    <column><name>9鏈堜骇鑳�(PCS)</name><type>Real</type></column>
+    <column><name>10鏈堜骇鑳�(PCS)</name><type>Real</type></column>
+    <column><name>11鏈堜骇鑳�(PCS)</name><type>Real</type></column>
+    <column><name>12鏈堜骇鑳�(PCS)</name><type>Real</type></column>
+    <column><name>骞翠骇鑳�(PCS)</name><type>Real</type></column>
+    <column><name>1鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
+    <column><name>2鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
+    <column><name>3鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
+    <column><name>4鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
+    <column><name>5鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
+    <column><name>6鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
+    <column><name>7鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
+    <column><name>8鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
+    <column><name>9鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
+    <column><name>10鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
+    <column><name>11鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
+    <column><name>12鏈堜骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
+    <column><name>骞翠骇鑳�(瀹炴暟澶у紶)</name><type>Real</type></column>
+    <column><name>1鏈堥攢鍞(W)</name><type>Real</type></column>
+    <column><name>2鏈堥攢鍞(W)</name><type>Real</type></column>
+    <column><name>3鏈堥攢鍞(W)</name><type>Real</type></column>
+    <column><name>4鏈堥攢鍞(W)</name><type>Real</type></column>
+    <column><name>5鏈堥攢鍞(W)</name><type>Real</type></column>
+    <column><name>6鏈堥攢鍞(W)</name><type>Real</type></column>
+    <column><name>7鏈堥攢鍞(W)</name><type>Real</type></column>
+    <column><name>8鏈堥攢鍞(W)</name><type>Real</type></column>
+    <column><name>9鏈堥攢鍞(W)</name><type>Real</type></column>
+    <column><name>10鏈堥攢鍞(W)</name><type>Real</type></column>
+    <column><name>11鏈堥攢鍞(W)</name><type>Real</type></column>
+    <column><name>12鏈堥攢鍞(W)</name><type>Real</type></column>
+    <column><name>骞撮攢鍞(W)</name><type>Real</type></column>
+    </table>';
+    xmlDOMImplementation := XMLDOMImplementation::Create();
+    xmlDOMDocument := xmlDOMImplementation.CreateDocumentFromString( text );
+    
+    tableElement:= xmlDOMDocument.GetElementByTagName( "table", 0 );
+    
+    toExportList := selectsortedset( this, MappingCapacityAndSaleBudge, item, true, item.OrgCode() + "_" + item.PlaceOfProductionOfArray() );
+    info( "export size : " + [String]toExportList.Size() );
+    nowNo := 1;
+    traverse ( toExportList, Elements, toExport ) {
+      info( "nowNo : " + [String]nowNo );
+      nowNo := nowNo + 1;
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, ifexpr( toExport.Deleted(), "Y", "N"), "鍒犻櫎鏍囪" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.YearNo(), "骞翠唤" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.OrgCode(), "涓氬姟閮ㄩ棬" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.DisplayTechnology(), "鏄剧ず鎶�鏈垎绫�" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.BusinessType(), "涓氬姟鍒嗙被" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.LineAndSpecification(), "浜у搧绾�/浜у搧瑙勬牸" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductCode(), "浜у搧鏂欏彿" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.PlaceOfProductionOfArray(), "Array浜у湴" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.PlaceOfProductionOfEvaporation(), "钂搁晙浜у湴" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.Resolution(), "鍒嗚鲸鐜�" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ShippingForm(), "鍑鸿揣褰㈡��" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.NumberOfCut(), "鍒囧壊鏁�" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.CapacityEquivalent(), "浜ц兘褰撻噺" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.NumberOfMask(), "mask鏁�" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth1(), "1鏈堜骇鑳�(PCS)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth2(), "2鏈堜骇鑳�(PCS)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth3(), "3鏈堜骇鑳�(PCS)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth4(), "4鏈堜骇鑳�(PCS)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth5(), "5鏈堜骇鑳�(PCS)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth6(), "6鏈堜骇鑳�(PCS)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth7(), "7鏈堜骇鑳�(PCS)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth8(), "8鏈堜骇鑳�(PCS)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth9(), "9鏈堜骇鑳�(PCS)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth10(), "10鏈堜骇鑳�(PCS)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth11(), "11鏈堜骇鑳�(PCS)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth12(), "12鏈堜骇鑳�(PCS)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSTotal(), "骞翠骇鑳�(PCS)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth1(), "1鏈堜骇鑳�(瀹炴暟澶у紶)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth2(), "2鏈堜骇鑳�(瀹炴暟澶у紶)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth3(), "3鏈堜骇鑳�(瀹炴暟澶у紶)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth4(), "4鏈堜骇鑳�(瀹炴暟澶у紶)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth5(), "5鏈堜骇鑳�(瀹炴暟澶у紶)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth6(), "6鏈堜骇鑳�(瀹炴暟澶у紶)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth7(), "7鏈堜骇鑳�(瀹炴暟澶у紶)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth8(), "8鏈堜骇鑳�(瀹炴暟澶у紶)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth9(), "9鏈堜骇鑳�(瀹炴暟澶у紶)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth10(), "10鏈堜骇鑳�(瀹炴暟澶у紶)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth11(), "11鏈堜骇鑳�(瀹炴暟澶у紶)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth12(), "12鏈堜骇鑳�(瀹炴暟澶у紶)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetTotal(), "骞翠骇鑳�(瀹炴暟澶у紶)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth1(), "1鏈堥攢鍞(W)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth2(), "2鏈堥攢鍞(W)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth3(), "3鏈堥攢鍞(W)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth5(), "4鏈堥攢鍞(W)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth4(), "5鏈堥攢鍞(W)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth6(), "6鏈堥攢鍞(W)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth7(), "7鏈堥攢鍞(W)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth8(), "8鏈堥攢鍞(W)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth9(), "9鏈堥攢鍞(W)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth10(), "10鏈堥攢鍞(W)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth11(), "11鏈堥攢鍞(W)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth12(), "12鏈堥攢鍞(W)" );
+      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountTotal(), "骞撮攢鍞(W)" );
+    }
+    
+    xmlDOMSerializer := xmlDOMImplementation.CreateSerializer();
+    xmlTableString := xmlDOMSerializer.WriteToString( xmlDOMDocument );
+    
+    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTableString ) );
+    tableGroupHandle := TableGroupHandle::Create( "骞村害浜ч攢棰勭畻" );
+    tableGroupHandle.Add( tableHandle );
+    tableBinaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    
+    info( "export end" );
+    
+    return tableBinaryData.AsBinaryValue();
+  *]
+}
diff --git a/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl b/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl
index 87c2b27..541ab96 100644
--- a/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl
+++ b/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl
@@ -15,7 +15,7 @@
     info( "productCodeList : " + [String]productCodeList.Size() );
     
     mpSync.MappingCapacityAndSaleBudge( relflush );
-    for( year := Date::ActualDate().Year() - 10; year <= Date::ActualDate().Year(); year := year + 1 ) {
+    for( year := Date::ActualDate().Year() - 10; year <= Date::ActualDate().Year() + 5; year := year + 1 ) {
       for( i := 1; i <= productCodeList.Size(); i := i + 1 ) {
         productCode := productCodeList.Element( i - 1 );
         mappingCapacityAndSaleBudge := mpSync.MappingCapacityAndSaleBudge( relnew, 
@@ -41,7 +41,7 @@
     info( "test MappingCapacityAndSaleBudge size : " + [String]result1.Size() );
     
     mpSync.MappingAnnualBudget( relflush );
-    for( year := Date::ActualDate().Year() - 10; year <= Date::ActualDate().Year(); year := year + 1 ) {
+    for( year := Date::ActualDate().Year() - 10; year <= Date::ActualDate().Year() + 5; year := year + 1 ) {
       for( i := 1; i <= productCodeList.Size(); i := i + 1 ) {
         productCode := productCodeList.Element( i - 1 );
         mappingAnnualBudget := mpSync.MappingAnnualBudget( relnew, 
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_ExpectedHeaders.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_ExpectedHeaders.qbl
new file mode 100644
index 0000000..d7275ba
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_ExpectedHeaders.qbl
@@ -0,0 +1,64 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ExpectedHeaders () as owning Strings
+{
+  TextBody:
+  [*
+    // yypsybs Jun-30-2023 (created)
+    value := construct( structured[String] );
+    value.Add( "鍒犻櫎鏍囪" );
+    value.Add( "骞翠唤" );
+    value.Add( "涓氬姟閮ㄩ棬" );
+    value.Add( "鏄剧ず鎶�鏈垎绫�" );
+    value.Add( "涓氬姟鍒嗙被" );
+    value.Add( "浜у搧绾�/浜у搧瑙勬牸" );
+    value.Add( "浜у搧鏂欏彿" );
+    value.Add( "Array浜у湴" );
+    value.Add( "钂搁晙浜у湴" );
+    value.Add( "鍒嗚鲸鐜�" );
+    value.Add( "鍑鸿揣褰㈡��" );
+    value.Add( "鍒囧壊鏁�" );
+    value.Add( "浜ц兘褰撻噺" );
+    value.Add( "mask鏁�" );
+    value.Add( "1鏈堜骇鑳�(PCS)" );
+    value.Add( "2鏈堜骇鑳�(PCS)" );
+    value.Add( "3鏈堜骇鑳�(PCS)" );
+    value.Add( "4鏈堜骇鑳�(PCS)" );
+    value.Add( "5鏈堜骇鑳�(PCS)" );
+    value.Add( "6鏈堜骇鑳�(PCS)" );
+    value.Add( "7鏈堜骇鑳�(PCS)" );
+    value.Add( "8鏈堜骇鑳�(PCS)" );
+    value.Add( "9鏈堜骇鑳�(PCS)" );
+    value.Add( "10鏈堜骇鑳�(PCS)" );
+    value.Add( "11鏈堜骇鑳�(PCS)" );
+    value.Add( "12鏈堜骇鑳�(PCS)" );
+    value.Add( "骞翠骇鑳�(PCS)" );
+    value.Add( "1鏈堜骇鑳�(瀹炴暟澶у紶)" );
+    value.Add( "2鏈堜骇鑳�(瀹炴暟澶у紶)" );
+    value.Add( "3鏈堜骇鑳�(瀹炴暟澶у紶)" );
+    value.Add( "4鏈堜骇鑳�(瀹炴暟澶у紶)" );
+    value.Add( "5鏈堜骇鑳�(瀹炴暟澶у紶)" );
+    value.Add( "6鏈堜骇鑳�(瀹炴暟澶у紶)" );
+    value.Add( "7鏈堜骇鑳�(瀹炴暟澶у紶)" );
+    value.Add( "8鏈堜骇鑳�(瀹炴暟澶у紶)" );
+    value.Add( "9鏈堜骇鑳�(瀹炴暟澶у紶)" );
+    value.Add( "10鏈堜骇鑳�(瀹炴暟澶у紶)" );
+    value.Add( "11鏈堜骇鑳�(瀹炴暟澶у紶)" );
+    value.Add( "12鏈堜骇鑳�(瀹炴暟澶у紶)" );
+    value.Add( "骞翠骇鑳�(瀹炴暟澶у紶)" );
+    value.Add( "1鏈堥攢鍞(W)" );
+    value.Add( "2鏈堥攢鍞(W)" );
+    value.Add( "3鏈堥攢鍞(W)" );
+    value.Add( "4鏈堥攢鍞(W)" );
+    value.Add( "5鏈堥攢鍞(W)" );
+    value.Add( "6鏈堥攢鍞(W)" );
+    value.Add( "7鏈堥攢鍞(W)" );
+    value.Add( "8鏈堥攢鍞(W)" );
+    value.Add( "9鏈堥攢鍞(W)" );
+    value.Add( "10鏈堥攢鍞(W)" );
+    value.Add( "11鏈堥攢鍞(W)" );
+    value.Add( "12鏈堥攢鍞(W)" );
+    value.Add( "骞撮攢鍞(W)" );
+    return &value;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_Export.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_Export.qbl
new file mode 100644
index 0000000..c469165
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_Export.qbl
@@ -0,0 +1,73 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Export (
+  MPSync parent
+) as String
+{
+  TextBody:
+  [*
+    // yypsybs Jul-1-2023 (created)
+    xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?>
+    <table>
+      <name>MappingCapacityAndSaleBudge</name>
+    ';
+    //---------------------------------------------------------------------------------------------
+    exportFields := MappingCapacityAndSaleBudge::ExportFields();
+    exportHeaders := MappingCapacityAndSaleBudge::ExpectedHeaders();
+    if( exportFields.Size() <> exportHeaders.Size() ) {
+      error( "fields and headers not match" );  
+    }
+    info( "export start" );
+    for( i := 0; i < exportFields.Size() ; i++ ) {
+      header := exportHeaders.Element( i );
+      fieldName := exportFields.Element( i );
+      info( "header : " + header )
+      info( "fieldName : " + fieldName )
+      columnStr := "<column><name>" + header + "</name><type>String</type>";
+      traverse( parent, MappingCapacityAndSaleBudge, oldRecord ) {
+        field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", fieldName);
+        if( not isnull( field ) ) {
+          fieldValue := "";
+          if( fieldValue = "" ) {
+            fieldValue := guard( field.GetString( oldRecord ), "" );
+          }
+          if( fieldValue = "" ) {
+            fieldValue := guard( [String]field.GetNumber( oldRecord ), "" );
+          }
+          if( fieldValue = "" ) {
+            fieldValue := guard( [String]field.GetReal( oldRecord ), "" );
+          }
+          if( fieldValue = "" ) {
+            fieldValue := guard( ifexpr( field.GetBoolean( oldRecord ), "Y", "N" ), "" );
+          }
+          if( fieldValue = "" ) {
+            fileDateValue := guard( field.GetDate( oldRecord ), Date::MinDate() );
+            if( fileDateValue <> Date::MinDate() ) {
+              conv := DateTimeToString::StandardConverter();
+              conv.SetCustomConversion();
+              conv.CustomFormatString( 'yyyyMMdd' );
+              fieldValue := conv.Convert( fileDateValue.DateTime() );
+            }
+          }
+          cellStr := '<cell value="' + fieldValue + '"/>';
+          
+          columnStr := columnStr + cellStr;
+        } else {
+          error( "no field " + fieldName + " in type MappingCapacityAndSaleBudge");
+        }
+      }
+      columnStr := columnStr + "</column>";
+      xmlTemplate := xmlTemplate + columnStr;
+    }
+    //---------------------------------------------------------------------------------------------
+    xmlTemplate := xmlTemplate + "</table>";
+    info( xmlTemplate );
+    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTemplate ) );
+    XLS::SaveTable( tableHandle, OS::TempPath() + "MappingCapacityAndSaleBudge.xlsx" );
+    file := OSFile::Construct();
+    file.Open( OS::TempPath() + "MappingCapacityAndSaleBudge.xlsx", "Read", true );
+    data := file.ReadBinary()
+    info( "export end" );
+    return data.AsBase64EncodedString();
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_ExportFields.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_ExportFields.qbl
new file mode 100644
index 0000000..58b6447
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_ExportFields.qbl
@@ -0,0 +1,64 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ExportFields () as owning Strings
+{
+  TextBody:
+  [*
+    // yypsybs Jun-30-2023 (created)
+    value := construct( structured[String] );
+    value.Add( "Deleted" );
+    value.Add( "YearNo" );
+    value.Add( "OrgCode" );
+    value.Add( "DisplayTechnology" );
+    value.Add( "BusinessType" );
+    value.Add( "LineAndSpecification" );
+    value.Add( "ProductCode" );
+    value.Add( "PlaceOfProductionOfArray" );
+    value.Add( "PlaceOfProductionOfEvaporation" );
+    value.Add( "Resolution" );
+    value.Add( "ShippingForm" );
+    value.Add( "NumberOfCut" );
+    value.Add( "CapacityEquivalent" );
+    value.Add( "NumberOfMask" );
+    value.Add( "CapacityInPCSInMonth1" );
+    value.Add( "CapacityInPCSInMonth2" );
+    value.Add( "CapacityInPCSInMonth3" );
+    value.Add( "CapacityInPCSInMonth4" );
+    value.Add( "CapacityInPCSInMonth5" );
+    value.Add( "CapacityInPCSInMonth6" );
+    value.Add( "CapacityInPCSInMonth7" );
+    value.Add( "CapacityInPCSInMonth8" );
+    value.Add( "CapacityInPCSInMonth9" );
+    value.Add( "CapacityInPCSInMonth10" );
+    value.Add( "CapacityInPCSInMonth11" );
+    value.Add( "CapacityInPCSInMonth12" );
+    value.Add( "CapacityInPCSTotal" );
+    value.Add( "CapacityInSheetInMonth1" );
+    value.Add( "CapacityInSheetInMonth2" );
+    value.Add( "CapacityInSheetInMonth3" );
+    value.Add( "CapacityInSheetInMonth4" );
+    value.Add( "CapacityInSheetInMonth5" );
+    value.Add( "CapacityInSheetInMonth6" );
+    value.Add( "CapacityInSheetInMonth7" );
+    value.Add( "CapacityInSheetInMonth8" );
+    value.Add( "CapacityInSheetInMonth9" );
+    value.Add( "CapacityInSheetInMonth10" );
+    value.Add( "CapacityInSheetInMonth11" );
+    value.Add( "CapacityInSheetInMonth12" );
+    value.Add( "CapacityInSheetTotal" );
+    value.Add( "SaleAmountInMonth1" );
+    value.Add( "SaleAmountInMonth2" );
+    value.Add( "SaleAmountInMonth3" );
+    value.Add( "SaleAmountInMonth5" );
+    value.Add( "SaleAmountInMonth4" );
+    value.Add( "SaleAmountInMonth6" );
+    value.Add( "SaleAmountInMonth7" );
+    value.Add( "SaleAmountInMonth8" );
+    value.Add( "SaleAmountInMonth9" );
+    value.Add( "SaleAmountInMonth10" );
+    value.Add( "SaleAmountInMonth11" );
+    value.Add( "SaleAmountInMonth12" );
+    value.Add( "SaleAmountTotal" );
+    return &value;
+  *]
+}
diff --git "a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart\04395.qbl" "b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart\04395.qbl"
index 2c07b9d..c543694 100644
--- "a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart\04395.qbl"
+++ "b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart\04395.qbl"
@@ -2,7 +2,7 @@
 #parent: #root
 Method CapacityAndSaleBudgeChart (
   MacroPlans macroPlans,
-  Boolean isCapacity,
+  String saleOrCapacity,
   String groupBy,
   String byBusinessTypeOrByOrgCode,
   CapacityAndSaleBudgeFilterBusinessTypes businessTypes,
@@ -19,7 +19,7 @@
   [*
     // yypsybs Sep-19-2023 (created)
     // true, false
-    info( isCapacity );
+    info( saleOrCapacity );
     // 鏈�;瀛e害;鍗婂勾;骞�
     info( groupBy );
     // 闈㈡澘鍩哄湴;浜嬩笟閮�
@@ -82,18 +82,18 @@
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year.YearNo() + "骞�-鐩爣",
                                                  BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                 Quantity := ifexpr( isCapacity,
-                                                                     MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, year.YearNo() ),
-                                                                     MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, year.YearNo() ) )
+                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                     MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, year.YearNo() ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, year.YearNo() ) )
                                                  );  
           // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName(),
                                                    BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                   Quantity := ifexpr( isCapacity,
-                                                                       Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ),
-                                                                       MappingCustomerOrder::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ) 
+                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                       MappingCustomerOrder::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ),
+                                                                       Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ) 
                                                                        )
                                                    ); 
           }                    
@@ -106,18 +106,18 @@
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
                                                    BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                   Quantity := ifexpr( isCapacity,
-                                                                       MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ),
-                                                                       MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ) )
+                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                       MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ),
+                                                                       MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ) )
                                                    );  
             // S&OP
             traverse( macroPlans, Elements, macroPlan ) {
               this.CapacityAndSaleBudgeChartElement( relnew, 
                                                      TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
                                                      BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                     Quantity := ifexpr( isCapacity,
-                                                                         Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ),
-                                                                         MappingCustomerOrder::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ) 
+                                                     Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                         MappingCustomerOrder::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ),
+                                                                         Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo )
                                                                          )
                                                      ); 
             }                    
@@ -134,9 +134,9 @@
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + [String]seasonNo + "瀛e害-鐩爣",
                                                    BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                   Quantity := ifexpr( isCapacity,
-                                                                       MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ),
-                                                                       MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ) )
+                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                       MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ),
+                                                                       MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ) )
                                                    );  
       //      info( "productCodeList : " + [String]productCodeList.Size() );
             // S&OP
@@ -144,9 +144,9 @@
               this.CapacityAndSaleBudgeChartElement( relnew, 
                                                      TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
                                                      BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                     Quantity := ifexpr( isCapacity,
-                                                                         Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ),
-                                                                         MappingCustomerOrder::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ) 
+                                                     Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                         MappingCustomerOrder::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ) ,
+                                                                         Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo )
                                                                          )
                                                      ); 
             }                    
@@ -162,18 +162,18 @@
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + monthNoString + "鏈�-鐩爣",
                                                    BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                   Quantity := ifexpr( isCapacity,
-                                                                       MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ),
-                                                                       MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ) )
+                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                       MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ),
+                                                                       MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ) )
                                                    );  
             // S&OP
             traverse( macroPlans, Elements, macroPlan ) {
               this.CapacityAndSaleBudgeChartElement( relnew, 
                                                      TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + monthNoString + "鏈�-" + macroPlan.ScenarioName(),
                                                      BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                     Quantity := ifexpr( isCapacity,
-                                                                         Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ),
-                                                                         MappingCustomerOrder::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ) 
+                                                     Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                         MappingCustomerOrder::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ),
+                                                                         Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ) 
                                                                          )
                                                      ); 
             }
@@ -188,18 +188,18 @@
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year.YearNo() + "骞�-鐩爣",
                                                  BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                 Quantity := ifexpr( isCapacity,
-                                                                     MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, year.YearNo() ),
-                                                                     MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, year.YearNo() ) )
+                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                     MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, year.YearNo() ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, year.YearNo() ) )
                                                  );  
           // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName(),
                                                    BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                   Quantity := ifexpr( isCapacity,
-                                                                       Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ),
-                                                                       MappingCustomerOrder::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ) 
+                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                       MappingCustomerOrder::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ) ,
+                                                                       Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() )
                                                                        )
                                                    ); 
           }                    
@@ -212,18 +212,18 @@
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
                                                    BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                   Quantity := ifexpr( isCapacity,
-                                                                       MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ),
-                                                                       MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ) )
+                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                       MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ),
+                                                                       MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ) )
                                                    );  
             // S&OP
             traverse( macroPlans, Elements, macroPlan ) {
               this.CapacityAndSaleBudgeChartElement( relnew, 
                                                      TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
                                                      BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                     Quantity := ifexpr( isCapacity,
-                                                                         Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ),
-                                                                         MappingCustomerOrder::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ) 
+                                                     Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                         MappingCustomerOrder::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ) ,
+                                                                         Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo )
                                                                          )
                                                      ); 
             }                    
@@ -238,18 +238,18 @@
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + [String]seasonNo + "瀛e害-鐩爣",
                                                    BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                   Quantity := ifexpr( isCapacity,
-                                                                       MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ),
-                                                                       MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ) )
+                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                       MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ),
+                                                                       MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ) )
                                                    );  
             // S&OP
             traverse( macroPlans, Elements, macroPlan ) {
               this.CapacityAndSaleBudgeChartElement( relnew, 
                                                      TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
                                                      BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                     Quantity := ifexpr( isCapacity,
-                                                                         Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ),
-                                                                         MappingCustomerOrder::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ) 
+                                                     Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                         MappingCustomerOrder::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ),
+                                                                         Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ) 
                                                                          )
                                                      ); 
             }                    
@@ -266,18 +266,18 @@
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + monthNoString + "鏈�-鐩爣",
                                                    BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                   Quantity := ifexpr( isCapacity,
-                                                                       MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ),
-                                                                       MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ) )
+                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                       MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ),
+                                                                       MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ) )
                                                    );  
             // S&OP
             traverse( macroPlans, Elements, macroPlan ) {
               this.CapacityAndSaleBudgeChartElement( relnew, 
                                                      TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + monthNoString + "鏈�-" + macroPlan.ScenarioName(),
                                                      BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                     Quantity := ifexpr( isCapacity,
-                                                                         Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ),
-                                                                         MappingCustomerOrder::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ) 
+                                                     Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                         MappingCustomerOrder::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ) ,
+                                                                         Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() )
                                                                          )
                                                      ); 
             }            
diff --git a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl
index 2f62201..fbb2caf 100644
--- a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl
+++ b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 Method CapacityAndSaleBudgeChart (
   MacroPlans macroPlans,
-  Boolean isCapacity,
+  String saleOrCapacity,
   String groupBy,
   String byBusinessTypeOrByOrgCode,
   String businessTypeChosen,
@@ -22,7 +22,7 @@
   [*
     // yypsybs Sep-19-2023 (created)
     // true, false
-    info( isCapacity );
+    info( saleOrCapacity );
     // 鏈�;瀛e害;鍗婂勾;骞�
     info( groupBy );
     // 闈㈡澘鍩哄湴;浜嬩笟閮�
@@ -61,20 +61,18 @@
         this.CapacityAndSaleBudgeChartElement( relnew, 
                                                TimeStringAndScenarioName := [String]year + "骞�-鐩爣",
                                                BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                               Quantity := ifexpr( isCapacity,
-                                                                   MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, [Number]year ),
-                                                                   // todo QID 23
-                                                                   MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, [Number]year ) )
+                                               Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                   MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, [Number]year ),
+                                                                   MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, [Number]year ) )
                                                );  
         // S&OP
         traverse( macroPlans, Elements, macroPlan ) {
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-" + macroPlan.ScenarioName(),
                                                  BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                 Quantity := ifexpr( isCapacity,
-                                                                     Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, [Number]year ),
-                                                                     // todo
-                                                                     0.0 )
+                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                     0.0,
+                                                                     Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, [Number]year ) )
                                                  ); 
         }                    
       }
@@ -86,18 +84,18 @@
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
                                                  BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                 Quantity := ifexpr( isCapacity,
-                                                                     MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ),
-                                                                     MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ) )
+                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                     MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ) )
                                                  );  
           // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
                                                    BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                   Quantity := ifexpr( isCapacity,
-                                                                       Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, [Number]year, halfNo ),
-                                                                       0.0 )
+                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                       0.0,
+                                                                       Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, [Number]year, halfNo ) )
                                                    ); 
           }                    
         }
@@ -113,9 +111,9 @@
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-鐩爣",
                                                  BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                 Quantity := ifexpr( isCapacity,
-                                                                     MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ),
-                                                                     MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) )
+                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                     MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) )
                                                  );  
     //      info( "productCodeList : " + [String]productCodeList.Size() );
           // S&OP
@@ -123,9 +121,9 @@
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
                                                    BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                   Quantity := ifexpr( isCapacity,
-                                                                       Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, [Number]year, seasonNo ),
-                                                                       0.0 )
+                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                       0.0,
+                                                                       Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, [Number]year, seasonNo ) )
                                                    ); 
           }                    
         }
@@ -139,18 +137,18 @@
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-绗�" + monthNoString + "鏈�-鐩爣",
                                                  BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                 Quantity := ifexpr( isCapacity,
-                                                                     MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ),
-                                                                     MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ) )
+                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                     MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ) )
                                                  );  
           // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-绗�" + monthNoString + "鏈�-" + macroPlan.ScenarioName(),
                                                    BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                   Quantity := ifexpr( isCapacity,
-                                                                       Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, [Number]year, monthNo ),
-                                                                       0.0 )
+                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                       0.0,
+                                                                       Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, [Number]year, monthNo ) )
                                                    ); 
           }                    
         }
@@ -163,18 +161,18 @@
         this.CapacityAndSaleBudgeChartElement( relnew, 
                                                TimeStringAndScenarioName := [String]year + "骞�-鐩爣",
                                                BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                               Quantity := ifexpr( isCapacity,
-                                                                   MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, [Number]year ),
-                                                                   MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, [Number]year ) )
+                                               Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                   MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, [Number]year ),
+                                                                   MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, [Number]year ) )
                                                );  
         // S&OP
         traverse( macroPlans, Elements, macroPlan ) {
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-" + macroPlan.ScenarioName(),
                                                  BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                 Quantity := ifexpr( isCapacity,
-                                                                     Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, [Number]year ),
-                                                                     0.0 )
+                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                     0.0,
+                                                                     Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, [Number]year ) )
                                                  ); 
         }                    
       }
@@ -186,18 +184,18 @@
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
                                                  BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                 Quantity := ifexpr( isCapacity,
-                                                                     MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ),
-                                                                     MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ) )
+                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                     MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ) )
                                                  );  
           // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
                                                    BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                   Quantity := ifexpr( isCapacity,
-                                                                       Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, [Number]year, halfNo ),
-                                                                       0.0 )
+                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                       0.0,
+                                                                       Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, [Number]year, halfNo ) )
                                                    ); 
           }                    
         }
@@ -210,18 +208,18 @@
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-鐩爣",
                                                  BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                 Quantity := ifexpr( isCapacity,
-                                                                     MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ),
-                                                                     MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) )
+                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                     MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) )
                                                  );  
           // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
                                                    BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                   Quantity := ifexpr( isCapacity,
-                                                                       Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, [Number]year, seasonNo ),
-                                                                       0.0 )
+                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                       0.0,
+                                                                       Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, [Number]year, seasonNo ) )
                                                    ); 
           }                    
         }
@@ -235,18 +233,18 @@
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-绗�" + monthNoString + "鏈�-鐩爣",
                                                  BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                 Quantity := ifexpr( isCapacity,
-                                                                     MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ),
-                                                                     MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ) )
+                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                     MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ),
+                                                                     MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ) )
                                                  );  
           // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-绗�" + monthNoString + "鏈�-" + macroPlan.ScenarioName(),
                                                    BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                   Quantity := ifexpr( isCapacity,
-                                                                       Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, [Number]year, monthNo ),
-                                                                       0.0 )
+                                                   Quantity := ifexpr( saleOrCapacity = "閿�鍞",
+                                                                       0.0,
+                                                                       Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, [Number]year, monthNo ) )
                                                    ); 
           }                    
         }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
index 1e5e82c..984c1f6 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
@@ -38,6 +38,6 @@
   ]
   Properties:
   [
-    Taborder: 0
+    Taborder: 1
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def
new file mode 100644
index 0000000..4f195d5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: ButtonExportDetail
+Response OnClick () id:Response_FormCapacityAndSaleBudge_ButtonExportDetail_OnClick
+{
+  #keys: '[414384.0.887310502]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MPSync );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      //Application.Download( "骞村害浜ч攢棰勭畻璇︽儏.xlsx", MPSync.CapacityAndSaleBudgeExport().AsBinaryData() );
+      
+      base64 := MappingCapacityAndSaleBudge::Export( MPSync );
+      Application.Download( "骞村害浜ч攢棰勭畻璇︽儏.xlsx", base64 );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def
index 2b3f638..d4df714 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def
@@ -12,6 +12,7 @@
     [*
       MPSync::TestData( MPSync, MacroPlan );
       GlobalOTDTable.InitTestData();
+      MPSync.RefreshCapacityAndSaleBudgeFilter();
     *]
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
index 168d51b..8758502 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
@@ -8,6 +8,17 @@
   Children:
   [
     #child: ListCapacityAndSaleBudge
+    Component ButtonExportDetail
+    {
+      #keys: '[414384.0.887310503]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Label: '瀵煎嚭'
+        Taborder: 0
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
index ccb0ea2..53e33ba 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
@@ -13,7 +13,7 @@
       CapacityAndSaleBudgeChartElement::TestData( ScenarioManager );
       
       ScenarioManager.CapacityAndSaleBudgeChart( DataHolderMacroPlansForScenarioComparison.Data(), 
-                                                 CheckboxIsCapacity.Checked(),
+                                                 DropDownSaleOrCapacity.Text(),
                                                  DropDownTimeGroup.Text(),
                                                  DropDownByBusinessTypeOrByOrgCode.Text(),
                                                  DataHolderCapacityAndSaleBudgeFilterBusinessType.Data(),
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def
index 3684ed8..237e0c6 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def
@@ -53,16 +53,6 @@
         Visible: false
       ]
     }
-    Component CheckboxIsCapacity
-    {
-      #keys: '[414384.0.857770765]'
-      BaseType: 'WebCheckbox'
-      Properties:
-      [
-        Label: '浜ц兘'
-        Taborder: 5
-      ]
-    }
     Component DropDownTimeGroup
     {
       #keys: '[414384.0.857771238]'
@@ -87,6 +77,18 @@
         Taborder: 0
       ]
     }
+    Component DropDownSaleOrCapacity
+    {
+      #keys: '[414384.0.886240556]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        InitialValue: '閿�鍞'
+        Label: '閿�鍞/浜ц兘'
+        Strings: '閿�鍞;浜ц兘'
+        Taborder: 5
+      ]
+    }
   ]
   Properties:
   [

--
Gitblit v1.9.3