yypsybs
2023-09-22 744ece58704eabc06b44d3df45216bcced80ed96
处理测试问题
已修改9个文件
已添加5个文件
613 ■■■■ 文件已修改
_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeExport.qbl 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MPSync/StaticMethod_TestData.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MappingSaleBudge/StaticMethod_ExpectedHeaders.qbl 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MappingSaleBudge/StaticMethod_Export.qbl 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MappingSaleBudge/StaticMethod_ExportFields.qbl 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart#95.qbl 100 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl 102 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_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 );
_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();
  *]
}
_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, 
_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;
  *]
}
_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();
  *]
}
_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;
  *]
}
_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart#95.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 );
    // æœˆ;季度;半年;å¹´
    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 + "季度-目标",
                                                   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 + "季度-" + 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 + "季度-目标",
                                                   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 + "季度-" + 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() )
                                                                         )
                                                     ); 
            }            
_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 );
    // æœˆ;季度;半年;å¹´
    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 + "季度-目标",
                                                 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 + "季度-" + 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 + "季度-目标",
                                                 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 + "季度-" + 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 ) )
                                                   ); 
          }                    
        }
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
@@ -38,6 +38,6 @@
  ]
  Properties:
  [
    Taborder: 0
    Taborder: 1
  ]
}
_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
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def
@@ -12,6 +12,7 @@
    [*
      MPSync::TestData( MPSync, MacroPlan );
      GlobalOTDTable.InitTestData();
      MPSync.RefreshCapacityAndSaleBudgeFilter();
    *]
  }
}
_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:
  [
_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(),
_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:
  [