lihongji
2024-06-28 890bde3948fb93abb133993a8e9c70fb452ed23e
Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev
已重命名7个文件
已修改13个文件
已添加66个文件
已删除6个文件
2273 ■■■■ 文件已修改
_Main/BL/InfoMessages.qbl 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_FinancialProductionSearch_FinancialProductionSource_FinancialProduc.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionReport/Attribute_IsImport.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionReport/Attribute_IsShow.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionReport/Method_Clear.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionReport/Method_Generate.qbl 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionReport/Method_GenerateColumn.qbl 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionReport/Method_IdentifyNullValues.qbl 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionReport/Method_ImportVerification.qbl 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultAllUnit.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCUnit.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLUnit.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultName.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionRow/Attribute_DuplicateValueMarker.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionRow/Attribute_Unit.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionRow/DefaultValue_DuplicateValueMarker.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionRow/Method_Filter.qbl 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionRow/Method_Initialize#110.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionRow/Method_Initialize.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSearch/Attribute_Generation.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSearch/Attribute_MqbMlb.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSearch/Attribute_Power.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSearch/Attribute_Unit.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSearch/_ROOT_Type_FinancialProductionSearch.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSource/Attribute_IsImport.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSource/Method_AfterImport.qbl 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSource/Method_Filter.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSource/Method_IsExistFutureMonthData.qbl 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSource/Method_ReadStructure.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSource/StaticMethod_DownloadTemplate.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSource/StaticMethod_Upload.qbl 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_FillCells.qbl 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_FillRows.qbl 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GenerateColumnIndex.qbl 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GetAttributeNames.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Test/StaticMethod_Test.qbl 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/Sys/Repr/Global/LocalCell_DemandComparison.qrp 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelDemandComparison294.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation#568.def 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation.def 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelSelection.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelSelectionChecks.def 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pOperation#715.def 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionBudget.def 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionCurve.def 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionIDS.def 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionPP.def 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionPPA.def 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionPR.def 94 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation11_DropDownListBaseVersion_OnSelectionChanged#168.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation11_DropDownListCompareVersion_OnSelectionChanged.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_ButtonCompare_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bDownload_OnClick#781.def 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bExport_OnClick#723.def 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_ButtonCompare_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelSelectionChecks_CheckboxBudget_OnChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelSelectionChecks_CheckboxCurve_OnChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelSelectionChecks_CheckboxIDS_OnChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelSelectionChecks_CheckboxPPA_OnChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelSelectionChecks_CheckboxPP_OnChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelSelectionChecks_CheckboxPR_OnChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionBudget_DropDownListBaseVersionBudget_OnSelectionChanged.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionBudget_DropDownListCompareVersionBudget_OnSelectionChange.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionCurve_DropDownListBaseVersionCurve_OnSelectionChanged.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionCurve_DropDownListCompareVersionCurve_OnSelectionChanged.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionIDS_DataExtractorOperationIDS_OnSelectionChanged.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionIDS_DropDownListBaseVersionIDS_OnSelectionChanged.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPPA_DropDownListBaseVersionPPA_OnSelectionChanged.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPPA_DropDownListCompareVersionPPA_OnSelectionChanged.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPP_DropDownListBaseVersionPP_OnSelectionChanged.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPP_DropDownListCompareVersionPP_OnSelectionChanged.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPR_DropDownListBaseVersionPR_OnSelectionChanged#98.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPR_DropDownListCompareVersionPR_OnSelectionChanged#599.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/_ROOT_Component_FormDemandComparison.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_MatrixEditorTable.def 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportHeader.def 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportTable.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelTable.def 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelUnit.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixEditorActionBarPageTable.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixeditorContextMenuTable.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionImport_OnCl.def 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelPower_ddslPower_OnSelectionChanged.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelUnit_ddslUnit_OnCreated.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/InfoMessages.qbl
@@ -98,6 +98,42 @@
  {
    DefaultText: 'The two products selected are the same.'
  }
  InfoMessage MP_FinancialProductionReport_ImportIndetifyDuplicateData
  {
    DefaultText: 'There is duplicate data present.'
  }
  InfoMessage MP_FinancialProductionReport_ImportIndetifyFactoryNoExist
  {
    DefaultText: 'Factory does not exist.'
  }
  InfoMessage MP_FinancialProductionReport_ImportIndetifyIllegalCharacter
  {
    DefaultText: 'The required quantity contains illegal characters.'
  }
  InfoMessage MP_FinancialProductionReport_ImportIndetifyIllegalTime
  {
    DefaultText: 'The required period contains illegal time.'
  }
  InfoMessage MP_FinancialProductionReport_ImportIndetifyNegativeNumber
  {
    DefaultText: 'The required quantity includes negative numbers.'
  }
  InfoMessage MP_FinancialProductionReport_ImportIndetifyNullStrings
  {
    DefaultText: 'Required fields contain empty data.'
  }
  InfoMessage MP_FinancialProductionReport_ImportIndetifyOverPeriod
  {
    DefaultText: 'The template month is not within the planning cycle.'
  }
  InfoMessage MP_FinancialProductionReport_ImportIndetifyProductNoExist
  {
    DefaultText: 'Product does not exist.'
  }
  InfoMessage MP_FinancialProductionReport_Question
  {
    DefaultText: '导入模板包含未来月份的财务数据,是否覆盖系统计算结果?'
  }
  InfoMessage MP_LibCal_EventType_Exist
  {
    DefaultText: 'The ID or name is the same.'
_Main/BL/Relations/Relation_FinancialProductionSearch_FinancialProductionSource_FinancialProduc.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation FinancialProductionSearch_FinancialProductionSource_FinancialProductionSource_FinancialProductionSearch
{
  #keys: '1[415136.0.854770948]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide FinancialProductionSource
  {
    #keys: '3[415136.0.854770950][415136.0.854770949][415136.0.854770951]'
    Cardinality: '0to1'
    ObjectDefinition: FinancialProductionSearch
    OwningSide: 'Reference'
  }
  RelationSide.RightSide FinancialProductionSearch
  {
    #keys: '3[415136.0.854770953][415136.0.854770952][415136.0.854770954]'
    Cardinality: '0to1'
    ObjectDefinition: FinancialProductionSource
    OwningSide: 'Owned'
  }
}
_Main/BL/Type_FinancialProductionReport/Attribute_IsImport.qbl
@@ -2,6 +2,6 @@
#parent: #root
Attribute IsImport
{
  #keys: '3[415136.0.834715063][415136.0.834715062][415136.0.834715064]'
  #keys: '3[415136.0.842718583][415136.0.842718582][415136.0.842718584]'
  ValueType: Boolean
}
_Main/BL/Type_FinancialProductionReport/Attribute_IsShow.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute IsShow
{
  #keys: '3[415136.0.853939545][415136.0.853939544][415136.0.853939546]'
  ValueType: Boolean
}
_Main/BL/Type_FinancialProductionReport/Method_Clear.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
Method Clear
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-25-2024 (created)
    this.FinancialProductionColumn( relflush );
    this.FinancialProductionRow( relflush );
    this.GenerateColumn( this.FinancialProductionSource().MacroPlan() );
  *]
}
_Main/BL/Type_FinancialProductionReport/Method_Generate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
Quintiq file version 2.0
#parent: #root
Method Generate (
  FinancialProductionSearch search,
  Product_MPs products
)
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-25-2024 (created)
    table      := selectobject( this, FinancialProductionSource.FinancialProductionReport, report, not report.IsShow() );
    allunit    := '<All>';
    //清空之前存储的显示数据
    this.Clear();
    //过滤后的产品id
    productids := selectuniquevalues( products, Elements, product, ( search.Generation() = allunit or product.Generation() = search.Generation() )
                                      and ( search.MqbMlb() = allunit or product.MQBMLB() = search.MqbMlb() )
                                      and ( search.Power() = allunit or product.Power() = search.Power() ), product.ID() );
    sumrow     := this.FinancialProductionRow( relnew, Name := 'SUM', Unit := search.Unit(), RowNr := table.FinancialProductionRow( relsize ) );
    traverse( table, FinancialProductionRow, row, row.Unit() = search.Unit() ){
      productid  := construct( Strings );
      productid.Add( row.Name() );
      if( productids.ContainsAll( productid ) ){
        showrow := this.FinancialProductionRow( relnew, Name := row.Name(), Unit := row.Unit(), RowNr := row.RowNr() );
        traverse( row, FinancialProductionCell, cell ){
          column   := selectobject( this, FinancialProductionColumn, column, column.Name() = cell.FinancialProductionColumn().Name() );
          sumcell  := selectobject( column, FinancialProductionCell, c, c.FinancialProductionRow() = sumrow );
          if( isnull( sumcell ) ){
            sumcell := column.FinancialProductionCell( relnew, Value := '0' );
            sumrow.FinancialProductionCell( relinsert, sumcell );
          }
          showcell := column.FinancialProductionCell( relnew, Value := cell.Value() );
          showrow.FinancialProductionCell( relinsert, showcell );
          value := [Real]cell.Value() + [Real]sumcell.Value();
          sumcell.Value( [String]value );
        }
      }
    }
  *]
}
_Main/BL/Type_FinancialProductionReport/Method_GenerateColumn.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: #root
Method GenerateColumn (
  MacroPlan owner
)
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-25-2024 (created)
    startofplanning           := owner.StartOfPlanning();
    startofyear               := startofplanning.StartOfYear();
    startofnextyear           := startofplanning.StartOfNextYear();
    for( start := startofyear; start < startofnextyear; start := start.StartOfNextMonth() ){
      periodtime := start.Date();
      periodname := periodtime.Format( "M2/D2/Y" );
      this.FinancialProductionColumn( relnew, Name := periodname, Period := periodtime );
    }
  *]
}
_Main/BL/Type_FinancialProductionReport/Method_IdentifyNullValues.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
Quintiq file version 2.0
#parent: #root
Method IdentifyNullValues
{
  TextBody:
  [*
    // åˆ é™¤ç©ºè¡Œæ•°æ®
    productcolumn := selectobject( this, FinancialProductionColumn, column, column.Index() = 0 );
    unitcolumn    := selectobject( this, FinancialProductionColumn, column, column.Index() = 1 );
    //删除没有对应日期数据的行
    traverse ( this, FinancialProductionRow, row ) {
      if ( forall( row, FinancialProductionCell, cell, true, ( cell.FinancialProductionColumn() <> productcolumn or cell.FinancialProductionColumn() <> unitcolumn ) and cell.Value().TrimBoth() = "" ) ) {
        row.Delete();
      }
    }
    // åˆ¤æ–­æ˜¯å¦å­˜åœ¨è´Ÿæ•°
    traverse ( this, FinancialProductionRow.FinancialProductionCell, cell ) {
      if ( cell.FinancialProductionColumn().Index() <= 1 ) {
        if ( cell.Value().TrimBoth() = "" ) {
          error( Translations::MP_FinancialProductionReport_ImportIndetifyNullStrings() );
        }
      } else {
        if ( cell.Value().TrimBoth() = "" ) {
          cell.Value( '0' );
    //      error( Translations::AC_SalesForecastInputSource_Error6() );
        } else {
          stn := StringToReal::StandardConverter();
          if ( not stn.CanConvert( cell.Value().TrimBoth() ) ) {
            error( Translations::MP_FinancialProductionReport_ImportIndetifyIllegalCharacter() );
          } else {
            if ( stn.Convert( cell.Value().TrimBoth() ) >= 0 ) {
              cell.Value( [String]ceil( stn.Convert( cell.Value().TrimBoth() ) ) );
            } else {
              error( Translations::MP_FinancialProductionReport_ImportIndetifyNegativeNumber() );
            }
          }
        }
      }
      cell.FinancialProductionRow().DuplicateValueMarker( cell.FinancialProductionRow().DuplicateValueMarker()                  +
                                                        ifexpr( cell.FinancialProductionColumn().Index() = 0, "", "-" ) +
                                                        cell.Value()
                                                       );
    }
    // åˆ¤æ–­æ˜¯å¦å­˜åœ¨é‡å¤æ•°æ®
    row := selectduplicates( this, FinancialProductionRow, row, true, row.DuplicateValueMarker() );
    if ( row.Size() > 1 ) {
      error( Translations::MP_FinancialProductionReport_ImportIndetifyDuplicateData() );
    }
  *]
}
_Main/BL/Type_FinancialProductionReport/Method_ImportVerification.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
Quintiq file version 2.0
#parent: #root
Method ImportVerification
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-27-2024 (created)
    owner           := this.FinancialProductionSource().MacroPlan();
    startofthisyear := owner.StartOfPlanning().StartOfYear().Date();
    startofnextyear := owner.StartOfPlanning().StartOfNextYear().Date();
    if ( exists( this, FinancialProductionColumn, column, ( column.Index() = 0 and column.Name() <> "Product" )             or
                                                      ( column.Index() = 1 and column.Name() <> "Unit" )  ) ){
      error( Translations::MP_FinancialProductionReport_ImportIndetifyNullStrings() );
    }
    indexcolumn := select( this, FinancialProductionColumn, column, column.Index() = 2 );
    if ( isnull( indexcolumn ) ) {
      error( Translations::MP_FinancialProductionReport_ImportIndetifyNullStrings() );
    } else {
      cnv2 := StringToDate::StandardConverter();
      cnv2.SetCustomConversion();
      cnv2.CustomFormatString( "dd/MM/yyyy" );
      while ( not isnull( indexcolumn ) ) {
        if ( not cnv2.CanConvert( indexcolumn.Name() ) ) {
          error( Translations::MP_FinancialProductionReport_ImportIndetifyIllegalTime() );
        }
        period := cnv2.Convert( indexcolumn.Name() );
      //  info( "开始时间:", this.SalesForecastInputSource().PlanningStartDate().Format( "Y-M2-D2" ),
      //        "结束时间:", this.SalesForecastInputSource().PlanningEndDate().Format( "Y-M2-D2" ),
      //        "列时间:", cnv2.Convert( indexColumn.name() ).Format( "Y-M2-D2" ) );
        // åˆ¤æ–­æ˜¯å¦åœ¨è®¡åˆ’周期内
        if ( period <= startofthisyear or period >= startofnextyear ) {
          error( Translations::MP_FinancialProductionReport_ImportIndetifyOverPeriod() );
        }
        indexcolumn := indexcolumn.NextColumn();
      }
    }
    productcolumn := selectobject( this, FinancialProductionColumn, column, column.Index() = 0 );
    unitcolumn    := selectobject( this, FinancialProductionColumn, column, column.Index() = 1 );
    units         := selectuniquevalues( unitcolumn, FinancialProductionCell, cell, cell.Value() );
    if( units.Size() <> 2 or ( units.Find( FinancialProductionReport::GetDefaultCCUnit() ) >= 0
                               and units.Find( FinancialProductionReport::GetDefaultDLUnit() ) >= 0 ) ){
      error( Translations::MP_FinancialProductionReport_ImportIndetifyFactoryNoExist() );
    }
    products     := selectuniquevalues( productcolumn, FinancialProductionCell, cell, cell.Value() );
    productnames := selectuniquevalues( owner, Product_MP, product, product.ID() );
    if( not productnames.ContainsAll( products ) ){
      error( Translations::MP_FinancialProductionReport_ImportIndetifyProductNoExist() );
    }
  *]
}
_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultAllUnit.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetDefaultAllUnit () const declarative as String
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-25-2024 (created)
    return '<All>';
  *]
}
_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCUnit.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetDefaultCCUnit () const as String
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-25-2024 (created)
    return '长春';
  *]
}
_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLUnit.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetDefaultDLUnit () const as String
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-25-2024 (created)
    return '大连';
  *]
}
_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetDefaultName () const as String
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-25-2024 (created)
    return 'Financial productions';
  *]
}
_Main/BL/Type_FinancialProductionRow/Attribute_DuplicateValueMarker.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute DuplicateValueMarker
{
  #keys: '3[415136.0.857450433][415136.0.857450432][415136.0.857450434]'
  Description: '判断是否存在重复值'
  ValueType: String
}
_Main/BL/Type_FinancialProductionRow/Attribute_Unit.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Unit
{
  #keys: '3[415136.0.842400951][415136.0.842400950][415136.0.842400952]'
  Description: '产线'
  ValueType: String
}
_Main/BL/Type_FinancialProductionRow/DefaultValue_DuplicateValueMarker.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: DuplicateValueMarker
}
_Main/BL/Type_FinancialProductionRow/Method_Filter.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#parent: #root
Method Filter (
  FinancialProductionSearch search,
  Product_MPs products
) declarative remote as Boolean
{
  Description: '过滤'
  TextBody:
  [*
    // ç”„兰鸽 Jun-24-2024 (created)
    allunit    := '<All>';
    productids := selectuniquevalues( products, Elements, product, ( search.Generation() = allunit or product.Generation() = search.Generation() )
                                      and ( search.MqbMlb() = allunit or product.MQBMLB() = search.MqbMlb() )
                                      and ( search.Power() = allunit or product.Power() = search.Power() ), product.ID() );
    productid  := construct( Strings );
    productid.Add( this.Name() );
    return productids.ContainsAll( productid ) and this.Unit() = search.Unit();
  *]
}
_Main/BL/Type_FinancialProductionRow/Method_Initialize#110.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: #root
Method Initialize (
  FinancialProductionColumn column,
  String unit
)
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-24-2024 (created)
    cell := column.FinancialProductionCell( relnew, Value := '' );
    this.FinancialProductionCell( relinsert, cell );
  *]
}
_Main/BL/Type_FinancialProductionRow/Method_Initialize.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: #root
Method Initialize (
  FinancialProductionColumn column,
  Real quantity
)
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-24-2024 (created)
    cell := selectobject( this, FinancialProductionCell, cell, cell.FinancialProductionColumn() = column );
    value := [Real]cell.Value() + quantity;
    cell.Value( [String]value );
  *]
}
_Main/BL/Type_FinancialProductionSearch/Attribute_Generation.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Generation
{
  #keys: '3[415136.0.854770962][415136.0.854770961][415136.0.854770963]'
  ValueType: String
}
_Main/BL/Type_FinancialProductionSearch/Attribute_MqbMlb.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute MqbMlb
{
  #keys: '3[415136.0.854770972][415136.0.854770971][415136.0.854770973]'
  ValueType: String
}
_Main/BL/Type_FinancialProductionSearch/Attribute_Power.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Power
{
  #keys: '3[415136.0.854770982][415136.0.854770981][415136.0.854770983]'
  ValueType: String
}
_Main/BL/Type_FinancialProductionSearch/Attribute_Unit.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Unit
{
  #keys: '3[415136.0.854770939][415136.0.854770938][415136.0.854770940]'
  Description: '产线'
  ValueType: String
}
_Main/BL/Type_FinancialProductionSearch/_ROOT_Type_FinancialProductionSearch.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type FinancialProductionSearch
{
  #keys: '5[415136.0.854770935][415136.0.854770933][0.0.0][415136.0.854770934][415136.0.854770936]'
  BaseType: Object
  Description: '查询类'
  StructuredName: 'FinancialProductionSearchs'
}
_Main/BL/Type_FinancialProductionSource/Attribute_IsImport.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute IsImport
{
  #keys: '3[415136.0.842718587][415136.0.842718586][415136.0.842718588]'
  ValueType: Boolean
}
_Main/BL/Type_FinancialProductionSource/Method_AfterImport.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
Quintiq file version 2.0
#parent: #root
Method AfterImport
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-24-2024 (created)
    allunit := FinancialProductionReport::GetDefaultAllUnit();
    table   := selectobject( this.MacroPlan(), FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() and not table.IsShow() );
    //info( '--------------------------', table.Name() );
    traverse( this, FinancialProductionReport, report ){
      productcolumn := selectobject( report, FinancialProductionColumn, column, column.Name() = 'Product' );
      unitcolumn    := selectobject( report, FinancialProductionColumn, column, column.Name() = 'Unit' );
    //  info( '----------------------1-----------------', productcolumn.Name(), unitcolumn.Name() );
      traverse( report, FinancialProductionRow, row ){
        product := selectobject( row, FinancialProductionCell, cell, cell.FinancialProductionColumn() = productcolumn );
        unit    := selectobject( row, FinancialProductionCell, cell, cell.FinancialProductionColumn() = unitcolumn );
    //    info( '----------------------2-----------------', product.Value(), unit.Value() );
        unitrow := selectobject( table, FinancialProductionRow, unitrow, unitrow.Name() = product.Value() and unitrow.Unit() = unit.Value() );
        allrow  := selectobject( table, FinancialProductionRow, allrow, allrow.Name() = product.Value() and allrow.Unit() = allunit );
    //    info( '----------------------3-----------------', unitrow.Name(), unitrow.Unit() );
        // and product.Value() = '120 kW Rotor' and unit.Value() = 'Assembly Plant (Spain)'
        traverse( row, FinancialProductionCell, cell, cell.FinancialProductionColumn() <> productcolumn and cell.FinancialProductionColumn() <> unitcolumn ){
          column   := cell.FinancialProductionColumn();
          unitcell := selectobject( unitrow, FinancialProductionCell, unitcell, unitcell.FinancialProductionColumn().Name() = column.Name() );
          allcell  := selectobject( allrow, FinancialProductionCell, allcell, allcell.FinancialProductionColumn().Name() = column.Name() );
    //      info( isnull( unitcell ), isnull( allcell ), cell.Value(), unitcell.Value(), allcell.Value() );
          if( not isnull( unitcell ) ){
            unitcell.Value( cell.Value() );
          }
          if( not isnull( allcell ) ){
            value := [Real]cell.Value() + [Real]allcell.Value();
            allcell.Value( [String]value );
          }
        }
      }
    }
  *]
}
_Main/BL/Type_FinancialProductionSource/Method_Filter.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
Method Filter (
  String productids,
  String unit
) declarative remote
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-24-2024 (created)
    info( '------------1-----------', unit, '-', productids );
    traverse( this, FinancialProductionReport.FinancialProductionRow, row, row.Name() = '92 kW Stator' ){
      productid := construct( Strings );
      productid.Add( row.Name() );
      info( '-----------------------', row.Name(), row.Unit(), productids.FindString( row.Name(), 0 ), row.Unit() = unit );
    }
  *]
}
_Main/BL/Type_FinancialProductionSource/Method_IsExistFutureMonthData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#parent: #root
Method IsExistFutureMonthData () as Boolean
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-26-2024 (created)
    startofplanning := this.MacroPlan().StartOfPlanning().Date().Format( 'M2/D2/Y' );
    columns         := selectset( this, FinancialProductionReport.FinancialProductionColumn, column, column.Name() > startofplanning );
    return exists( columns, Elements.FinancialProductionCell, cell, cell.Value() <> '' );
  *]
}
_Main/BL/Type_FinancialProductionSource/Method_ReadStructure.qbl
@@ -20,7 +20,17 @@
      xlstable.SyncRows();
      
      xlstable.Name( sheetName );
      xlstable.IsImport( true );
      this.FinancialProductionReport( relinsert, &xlstable ); 
      Transaction::Transaction().Propagate( attribute( FinancialProductionColumn, Index ) );
      // ï¼ˆå¯¼å…¥å‰ï¼‰ç»™ç©ºå€¼èµ‹äºˆé»˜è®¤å€¼ï¼ˆN/A),并且删除空行数据和数据校验
      xlstable.IdentifyNullValues();
      xlstable.ImportVerification();
    }
    //导入后处理数据
    //this.AfterImport();
  *]
}
_Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl
@@ -4,15 +4,35 @@
  MacroPlan macroPlan
) as BinaryValue
{
  Description: '下载财务报表数据'
  TextBody:
  [*
    table := selectobject( macroPlan, FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() );
    table := selectobject( macroPlan, FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() and table.IsShow() );
    
    xmlDOMI := XMLDOMImplementation::Create();
    xmlDOM  := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + table.Name() + '</name></table>' );
    
    tableElement := xmlDOM.GetElementByTagName( "table", 0 );
    //Product
    productcolumnelement := xmlDOM.CreateElement( "column" );
    productnameelement   := xmlDOM.CreateElement( "name" );
    producttypeelement   := xmlDOM.CreateElement( "type" );
    productnameelement.TextContent( 'Product' );
    producttypeelement.TextContent( "String" );
    productcolumnelement.AppendChild( productnameelement );
    productcolumnelement.AppendChild( producttypeelement );
    //Unit
    unitcolumnelement := xmlDOM.CreateElement( "column" );
    unitnameelement   := xmlDOM.CreateElement( "name" );
    unittypeelement   := xmlDOM.CreateElement( "type" );
    unitnameelement.TextContent( 'Unit' );
    unittypeelement.TextContent( "String" );
    unitcolumnelement.AppendChild( unitnameelement );
    unitcolumnelement.AppendChild( unittypeelement );
    
    tableElement.AppendChild( productcolumnelement );
    tableElement.AppendChild( unitcolumnelement );
    traverse ( table, FinancialProductionColumn, column ) {
      columnelement := xmlDOM.CreateElement( "column" );
      nameelement   := xmlDOM.CreateElement( "name" );
@@ -22,13 +42,24 @@
      columnelement.AppendChild( nameelement );
      columnelement.AppendChild( typeelement );
      
      cells := selectsortedset( column, FinancialProductionCell, cell, true, cell.FinancialProductionRow().RowNr() );
      cells := selectsortedset( column, FinancialProductionCell, cell, cell.FinancialProductionRow().RowNr() );
      traverse ( cells, Elements, c ) {
        if( column.Index() = 0 ){
          row := c.FinancialProductionRow();
          //Product
          productcellElement := xmlDOM.CreateElement( "cell" );
          productcellElement.SetAttribute( "value", row.Name() );
          productcolumnelement.AppendChild( productcellElement );
          //Unit
          unitcellElement := xmlDOM.CreateElement( "cell" );
          unitcellElement.SetAttribute( "value", row.Unit() );
          unitcolumnelement.AppendChild( unitcellElement );
        }
        cellElement := xmlDOM.CreateElement( "cell" );
        cellElement.SetAttribute( "value", c.Value() );
        columnelement.AppendChild( cellElement );
      }
      tableElement.AppendChild( columnelement );  
    }
    
@@ -36,7 +67,7 @@
    
    //info( xmlString );
    
    tableGroupHandle := TableGroupHandle::Create( "Financial productions" );
    tableGroupHandle := TableGroupHandle::Create( FinancialProductionReport::GetDefaultName() );
    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
    tableGroupHandle.Add( tableHandle );
    
_Main/BL/Type_FinancialProductionSource/StaticMethod_DownloadTemplate.qbl
@@ -29,7 +29,7 @@
    
    //info( xmlString );
    
    tableGroupHandle := TableGroupHandle::Create( "Financial productions" );
    tableGroupHandle := TableGroupHandle::Create( FinancialProductionReport::GetDefaultName() );
    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
    tableGroupHandle.Add( tableHandle );
    
_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Initialize (
  MacroPlan owner
)
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-24-2024 (created)
    owner.FinancialProductionSource( relflush );
    ccunit                    := FinancialProductionReport::GetDefaultCCUnit();
    dlunit                    := FinancialProductionReport::GetDefaultDLUnit();
    allunit                   := FinancialProductionReport::GetDefaultAllUnit();
    source                    := owner.FinancialProductionSource( relnew, IsImport := false, Name := FinancialProductionReport::GetDefaultName() );
    table                     := source.FinancialProductionReport( relnew, ID := source.Name(), Name := source.Name(), IsImport := false );
    showtable                 := source.FinancialProductionReport( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsImport := false, IsShow := true );
    startofplanning           := owner.StartOfPlanning();
    startofnextmonth          := owner.StartOfPlanning().StartOfNextMonth();
    startofyear               := startofplanning.StartOfYear();
    startofnextyear           := startofplanning.StartOfNextYear();
    search                    := source.FinancialProductionSearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit );
    products                  := construct( Product_MPs );
    table.GenerateColumn( owner );
    traverse( owner, Product_MP.ProductInStockingPoint_MP, pisp, pisp.Product_MP().IsLeaf() and ( pisp.StockingPoint_MP().UnitID() = ccunit or pisp.StockingPoint_MP().UnitID() = dlunit ) ){
      unit := pisp.StockingPoint_MP().UnitID();
      info( unit, pisp.ProductID() );
      ccrow := null( FinancialProductionRow );
      dlrow := null( FinancialProductionRow );
      allrow := selectobject( table, FinancialProductionRow, row, row.Name() = pisp.ProductID() and row.Unit() = allunit );
      if( unit = ccunit ){
        ccrow := table.FinancialProductionRow( relnew, Name := pisp.ProductID(), Unit := unit );
      }else{
        dlrow := table.FinancialProductionRow( relnew, Name := pisp.ProductID(), Unit := unit );
      }
      if( isnull( allrow ) ){
        products.Add( pisp.Product_MP() );
        allrow := table.FinancialProductionRow( relnew, Name := pisp.ProductID(), Unit := allunit );
      }
      for( start := startofyear; start < startofnextyear; start := start.StartOfNextMonth() ){
        periodtime := start.Date();
        periodname := periodtime.Format( "M2/D2/Y" );
        column := selectobject( table, FinancialProductionColumn, column, column.Name() = periodname and column.Period() = periodtime );
        if( not isnull( ccrow ) ){
          ccrow.Initialize( column, ccunit );
        }
        if( not isnull( dlrow ) ){
          dlrow.Initialize( column, dlunit );
        }
        if( not exists( allrow, FinancialProductionCell, allcell, allcell.FinancialProductionColumn() = column ) ){
          allrow.Initialize( column, allunit );
        }
      }
      traverse( pisp, ProductInStockingPointInPeriod, pispip, pispip.Start() >= startofplanning
                and ( ( pispip.Start() < startofnextmonth and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day() )
                      or ( pispip.Start() < startofnextyear and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Month() ) ) ){
        periodtime := pispip.Start().StartOfMonth().Date();
        periodname := periodtime.Format( "M2/D2/Y" );
        column := selectobject( table, FinancialProductionColumn, column, column.Name() = periodname and column.Period() = periodtime );
        if( not isnull( ccrow ) ){
          ccrow.Initialize( column, pispip.NewSupplyProductionQuantity() );
        }
        if( not isnull( dlrow ) ){
          dlrow.Initialize( column, pispip.NewSupplyProductionQuantity() );
        }
        allrow.Initialize( column, pispip.NewSupplyProductionQuantity() );
      }
    }
    rows := selectsortedset( table, FinancialProductionRow, row, row.Name() );
    i    := 0;
    traverse( rows, Elements, e ){
      e.RowNr( i );
      i := i + 1;
    }
    showtable.Generate( search, products );
  *]
}
_Main/BL/Type_FinancialProductionSource/StaticMethod_Upload.qbl
@@ -13,6 +13,7 @@
    source := owner.FinancialProductionSource( relnew, FileBinaryValue := binaryValue,
                                               Name                    := fileName,
                                               IsXLSX                  := fileName.EndsWith( "xlsx" ),
                                               IsImport                := true,
                                               UploadDateTime          := DateTime::ActualTime().Format( "Y-M2-D2 H:m:s" ),
                                               UploadUser              := guard( QuintiqUser::CurrentUser().Username(), "" ) );
    
_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl
ÎļþÃû´Ó _Main/BL/Type_ArchivePR/StaticMethod_Compared.qbl ÐÞ¸Ä
@@ -2,25 +2,25 @@
#parent: #root
StaticMethod Compared (
  RecycleBin recycleBin,
  const ArchivePR baseVersion,
  const ArchivePR compareVersion
  String baseVersionPath,
  String compareVersionPath
) as LocalTable
{
  TextBody:
  [*
    // rislai Jun-20-2024 (created)
    localTable := recycleBin.LocalTable( relnew,Name := baseVersion.Name() + "__" + compareVersion.Name());
    localTable := recycleBin.LocalTable( relnew,Name := baseVersionPath + "__" + compareVersionPath);
    
    baseVersionFile := OSFile::Construct();
    compareVersionFile := OSFile::Construct();
    
    try {
      baseVersionFile.Open( baseVersion.FilePath(), "Read", false );
      baseVersionDataSource := GeneralExcelImportAndExportDataSource::Upload( recycleBin, baseVersionFile.ReadBinary(), baseVersion.FilePath() );
      baseVersionFile.Open( baseVersionPath, "Read", false );
      baseVersionDataSource := GeneralExcelImportAndExportDataSource::Upload( recycleBin, baseVersionFile.ReadBinary(), baseVersionPath );
      baseVersionDataSource.ReadStructure();
      
      compareVersionFile.Open( compareVersion.FilePath(), "Read", false );
      compareVersionDataSource := GeneralExcelImportAndExportDataSource::Upload( recycleBin, compareVersionFile.ReadBinary(), compareVersion.FilePath() );
      compareVersionFile.Open( compareVersionPath, "Read", false );
      compareVersionDataSource := GeneralExcelImportAndExportDataSource::Upload( recycleBin, compareVersionFile.ReadBinary(), compareVersionPath );
      compareVersionDataSource.ReadStructure();
      
      baseVersionTable := select( baseVersionDataSource, GeneralExcelImportAndExportDataTable, tempGEIAEDT, true );
@@ -34,14 +34,14 @@
        baseVersionRows := construct( GeneralExcelImportAndExportDataRows ,constcontent);
        compareVersionRowTree := NamedValueTree::Create();
        compareVersionRows := construct( GeneralExcelImportAndExportDataRows ,constcontent);
        ArchivePR::FillRows( baseVersionTable,rowKeys,baseVersionRowTree,baseVersionRows );
        ArchivePR::FillRows( compareVersionTable,rowKeys,compareVersionRowTree,compareVersionRows );
        LocalCell_DemandComparison::FillRows( baseVersionTable,rowKeys,baseVersionRowTree,baseVersionRows );
        LocalCell_DemandComparison::FillRows( compareVersionTable,rowKeys,compareVersionRowTree,compareVersionRows );
        
        // ç”Ÿæˆåˆ—数据
        columnTree := NamedValueTree::Create();
        columns := construct( LocalColumns );
        ArchivePR::GenerateColumnIndex( baseVersionTable,localTable,columnTree,columns );
        ArchivePR::GenerateColumnIndex( compareVersionTable,localTable,columnTree,columns );
        LocalCell_DemandComparison::GenerateColumnIndex( baseVersionTable,localTable,columnTree,columns );
        LocalCell_DemandComparison::GenerateColumnIndex( compareVersionTable,localTable,columnTree,columns );
        columnNames := selectvalues( columns,Elements,column,true,column.Name() );
        
        // ç”Ÿæˆæ•°æ®
@@ -55,8 +55,8 @@
          compareVersionCellTree := NamedValueTree::Create();
          compareVersionCells := construct( GeneralExcelImportAndExportDataCells ,constcontent);
          
          ArchivePR::FillCells( rowKey,baseVersionRowTree,baseVersionRows,baseVersionCellTree,baseVersionCells );
          ArchivePR::FillCells( rowKey,compareVersionRowTree,compareVersionRows,compareVersionCellTree,compareVersionCells );
          LocalCell_DemandComparison::FillCells( rowKey,baseVersionRowTree,baseVersionRows,baseVersionCellTree,baseVersionCells );
          LocalCell_DemandComparison::FillCells( rowKey,compareVersionRowTree,compareVersionRows,compareVersionCellTree,compareVersionCells );
          
          row := localTable.LocalRow( relnew,Index := localTable.GetRowIndexCache()  );
          
_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_FillCells.qbl
_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_FillRows.qbl
_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GenerateColumnIndex.qbl
_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GetAttributeNames.qbl
@@ -7,10 +7,10 @@
    // rislai Jun-21-2024 (created)
    attributeNames := construct( Strings );
    
    attributeNames.Add( "BaseVersion" );
    attributeNames.Add( "CompareVersion" );
    attributeNames.Add( "BaseVersionValue" );
    attributeNames.Add( "CompareVersionValue" );
    attributeNames.Add( "BaseVersion" );
    attributeNames.Add( "CompareVersion" );
    attributeNames.Add( "Gap" );
    
    return &attributeNames;
_Main/BL/Type_Test/StaticMethod_Test.qbl
@@ -10,20 +10,9 @@
  TextBody:
  [*
    // rislai Jun-9-2024 (created)
    baseVersion := select( archive,ArchivePR,pr,true );
    baseVersionFile := OSFile::Construct();
    baseVersionFile.Open( baseVersion.FilePath(), "Read", false );
    baseVersionBinaryData := baseVersionFile.ReadBinary();
    baseVersionDataSource := GeneralExcelImportAndExportDataSource::Upload( recycleBin, baseVersionBinaryData, baseVersion.FilePath() );
    baseVersionDataSource.ReadStructure();
    archive.ArchivePR( relnew,Name := "PR72.SP_20240604_VWED.xlsx",FilePath := "C:\Excel\PR72.SP_20240604_VWED.xlsx");
    
    baseVersionTables := selectset( baseVersionDataSource, GeneralExcelImportAndExportDataTable, tempGEIAEDT, true );
    baseVersionTable := baseVersionTables.Element( 0 );
    baseVersionRow := select( baseVersionTable, GeneralExcelImportAndExportDataRow, tempGEIAEDR, tempGEIAEDR.RowNr() = 999 );
    info( isnull( baseVersionRow ));
    archive.ArchivePR( relnew,Name := "PR72.SP_20240605_VWED.xlsx",FilePath := "C:\Excel\PR72.SP_20240605_VWED.xlsx");
    
    
    //testTree := NamedValueTree::Create();
_Main/Sys/Repr/Global/LocalCell_DemandComparison.qrp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
Quintiq file version 2.0
#parent: #root
TypeRepresentation LocalCell_DemandComparison
{
  AttributeRepresentation BaseVersion
  {
    AttributeKey: '[412672.0.1087844728]'
    Conditional:
    [
      DataRepresentation.Conditional
      {
        ConditionBody: 'object.LocalColumn().IsAttrbuteColumn()'
        ConversionBody: ''
        DefaultTextColor: false
        InheritConversion: false
        TextColor: 'White'
      }
    ]
  }
  AttributeRepresentation CompareVersion
  {
    AttributeKey: '[412672.0.1087844725]'
    Conditional:
    [
      DataRepresentation.Conditional
      {
        ConditionBody: 'object.LocalColumn().IsAttrbuteColumn()'
        ConversionBody: ''
        DefaultTextColor: false
        InheritConversion: false
        TextColor: 'White'
      }
    ]
  }
  AttributeRepresentation Gap
  {
    AttributeKey: '[412672.0.1087844731]'
    Conditional:
    [
      DataRepresentation.Conditional
      {
        ConditionBody: 'object.LocalColumn().IsAttrbuteColumn()'
        ConversionBody: ''
        DefaultTextColor: false
        InheritConversion: false
        TextColor: 'White'
      }
    ]
  }
  RelationRepresentation LocalColumn { RelationKey: '[412672.0.1084249679]' Visibility: 'Normal' }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelDemandComparison294.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
Component PanelDemandComparison294
{
  #keys: '[412672.0.1111643045]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: PanelSelection
    #child: PanelOperation_568
  ]
  Properties:
  [
    FixedSize: true
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation#568.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,112 @@
Quintiq file version 2.0
Component PanelOperation id:PanelOperation_568
{
  #keys: '[412672.0.1111643154]'
  BaseType: 'WebPanel'
  Children:
  [
    Component ButtonCompare
    {
      #keys: '[412672.0.1111643161]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: '开始对比'
        Taborder: 4
      ]
    }
    Component efBaseVersion
    {
      #keys: '[412672.0.1111643258]'
      BaseType: 'WebEditField'
      Properties:
      [
        Label: '基准需求版本:'
        Taborder: 0
      ]
    }
    Component efCompareVersion
    {
      #keys: '[412672.0.1111643271]'
      BaseType: 'WebEditField'
      Properties:
      [
        Label: '对比需求版本:'
        Taborder: 2
      ]
    }
    Component dhCompareVersionPath
    {
      #keys: '[412672.0.1111643374]'
      BaseType: 'WebDataHolder'
      Databinding: 'String*'
      Properties:
      [
        Taborder: 3
      ]
    }
    Component dhBaseVersionPath
    {
      #keys: '[412672.0.1111643396]'
      BaseType: 'WebDataHolder'
      Databinding: 'String*'
      Properties:
      [
        Taborder: 1
      ]
    }
    Component dhXMLDataListener id:dhXMLDataListener_906
    {
      #keys: '[412672.0.1109203483]'
      BaseType: 'WebDataHolder'
      Databinding: 'ExportXMLManager'
      Children:
      [
        Component DataExtractor510 id:DataExtractor510_532
        {
          #keys: '[412672.0.1109203484]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'RecycleBin'
            FixedFilter: 'object.Name() = "LocalTableXML"'
            Source: 'RecycleBin'
            Taborder: 0
            Transformation: 'ExportXMLManager'
          ]
        }
      ]
      Properties:
      [
        Taborder: 7
      ]
    }
    Component bExport id:bExport_98
    {
      #keys: '[412672.0.1109203510]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'EXPORT1'
        Label: '导出'
        Taborder: 5
      ]
    }
    Component bDownload id:bDownload_352
    {
      #keys: '[412672.0.1109203542]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'DOWNLOAD'
        Label: '下载'
        Taborder: 6
      ]
    }
  ]
  Properties:
  [
    Orientation: 'horizontal'
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelSelection.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
Component PanelSelection
{
  #keys: '[412672.0.1111643222]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: pSelectionPR
    #child: pSelectionBudget
    #child: pSelectionPPA
    #child: pSelectionIDS
    #child: pSelectionCurve
    #child: pSelectionPP
    #child: PanelSelectionChecks
  ]
  Properties:
  [
    FixedSize: true
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelSelectionChecks.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
Quintiq file version 2.0
Component PanelSelectionChecks
{
  #keys: '[412672.0.1111602504]'
  BaseType: 'WebPanel'
  Children:
  [
    Component CheckboxPR
    {
      #keys: '[412672.0.1112207508]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'PR'
        Taborder: 0
      ]
    }
    Component CheckboxPP
    {
      #keys: '[412672.0.1112392614]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'PP'
        Taborder: 1
      ]
    }
    Component CheckboxBudget
    {
      #keys: '[412672.0.1112392620]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Budget'
        Taborder: 2
      ]
    }
    Component CheckboxPPA
    {
      #keys: '[412672.0.1112392625]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'PPA'
        Taborder: 3
      ]
    }
    Component CheckboxIDS
    {
      #keys: '[412672.0.1109206606]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'IDS'
        Taborder: 4
      ]
    }
    Component CheckboxCurve
    {
      #keys: '[412672.0.1109206611]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Curve'
        Taborder: 5
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pOperation#715.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionBudget.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
Quintiq file version 2.0
Component pSelectionBudget
{
  #keys: '[412672.0.1109211897]'
  BaseType: 'WebPanel'
  Children:
  [
    Component DropDownListBaseVersionBudget
    {
      #keys: '[412672.0.1109211898]'
      BaseType: 'WebDropDownList'
      Databinding: 'ArchiveBudget'
      Children:
      [
        Component DataExtractorOperation221
        {
          #keys: '[412672.0.1109211899]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'Archive'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchiveBudget'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '基准需求版本:'
        Taborder: 0
      ]
    }
    Component dhBaseVersionBudget
    {
      #keys: '[412672.0.1109211900]'
      BaseType: 'WebDataHolder'
      Databinding: 'ArchiveBudget'
      Properties:
      [
        Taborder: 1
      ]
    }
    Component DropDownListCompareVersionBudget
    {
      #keys: '[412672.0.1109211901]'
      BaseType: 'WebDropDownList'
      Databinding: 'ArchiveBudget'
      Children:
      [
        Component DataExtractorOperation655
        {
          #keys: '[412672.0.1109211902]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'Archive'
            FilterArguments: 'baseSelection:QMacroPlanner::FormDemandComparison.dhBaseVersionBudget'
            FixedFilter: 'object <> baseSelection'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchiveBudget'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '对比需求版本:'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 3
    Title: 'Budget'
    Visible: false
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionCurve.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
Quintiq file version 2.0
Component pSelectionCurve
{
  #keys: '[412672.0.1109211963]'
  BaseType: 'WebPanel'
  Children:
  [
    Component DropDownListBaseVersionCurve
    {
      #keys: '[412672.0.1109211964]'
      BaseType: 'WebDropDownList'
      Databinding: 'ArchiveCurve'
      Children:
      [
        Component DataExtractorOperation154
        {
          #keys: '[412672.0.1109211965]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'Archive'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchiveCurve'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '基准需求版本:'
        Taborder: 0
      ]
    }
    Component dhBaseVersionCurve
    {
      #keys: '[412672.0.1109211966]'
      BaseType: 'WebDataHolder'
      Databinding: 'ArchiveCurve'
      Properties:
      [
        Taborder: 1
      ]
    }
    Component DropDownListCompareVersionCurve
    {
      #keys: '[412672.0.1109211967]'
      BaseType: 'WebDropDownList'
      Databinding: 'ArchiveCurve'
      Children:
      [
        Component DataExtractorOperation687
        {
          #keys: '[412672.0.1109211968]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'Archive'
            FilterArguments: 'baseSelection:QMacroPlanner::FormDemandComparison.dhBaseVersionCurve'
            FixedFilter: 'object <> baseSelection'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchiveCurve'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '对比需求版本:'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 6
    Title: 'Curve'
    Visible: false
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionIDS.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
Quintiq file version 2.0
Component pSelectionIDS
{
  #keys: '[412672.0.1109211941]'
  BaseType: 'WebPanel'
  Children:
  [
    Component DropDownListBaseVersionIDS
    {
      #keys: '[412672.0.1109211942]'
      BaseType: 'WebDropDownList'
      Databinding: 'ArchiveIDS'
      Children:
      [
        Component DataExtractorOperation504
        {
          #keys: '[412672.0.1109211943]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'Archive'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchiveIDS'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '基准需求版本:'
        Taborder: 0
      ]
    }
    Component dhBaseVersionIDS
    {
      #keys: '[412672.0.1109211944]'
      BaseType: 'WebDataHolder'
      Databinding: 'ArchiveIDS'
      Properties:
      [
        Taborder: 1
      ]
    }
    Component DataExtractorOperationIDS
    {
      #keys: '[412672.0.1109211945]'
      BaseType: 'WebDropDownList'
      Databinding: 'ArchiveIDS'
      Children:
      [
        Component DataExtractorOperation493
        {
          #keys: '[412672.0.1109211946]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'Archive'
            FilterArguments: 'baseSelection:QMacroPlanner::FormDemandComparison.dhBaseVersionIDS'
            FixedFilter: 'object <> baseSelection'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchiveIDS'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '对比需求版本:'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 5
    Title: 'IDS'
    Visible: false
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionPP.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
Quintiq file version 2.0
Component pSelectionPP
{
  #keys: '[412672.0.1109211874]'
  BaseType: 'WebPanel'
  Children:
  [
    Component DropDownListBaseVersionPP
    {
      #keys: '[412672.0.1109211875]'
      BaseType: 'WebDropDownList'
      Databinding: 'ArchivePP'
      Children:
      [
        Component DataExtractorOperation267
        {
          #keys: '[412672.0.1109211876]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'Archive'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchivePP'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '基准需求版本:'
        Taborder: 0
      ]
    }
    Component dhBaseVersionPP
    {
      #keys: '[412672.0.1109211877]'
      BaseType: 'WebDataHolder'
      Databinding: 'ArchivePP'
      Properties:
      [
        Taborder: 1
      ]
    }
    Component DropDownListCompareVersionPP
    {
      #keys: '[412672.0.1109211878]'
      BaseType: 'WebDropDownList'
      Databinding: 'ArchivePP'
      Children:
      [
        Component DataExtractorOperation510
        {
          #keys: '[412672.0.1109211879]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'Archive'
            FilterArguments: 'baseSelection:QMacroPlanner::FormDemandComparison.dhBaseVersionPP'
            FixedFilter: 'object <> baseSelection'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchivePP'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '对比需求版本:'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 2
    Title: 'PP'
    Visible: false
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionPPA.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
Quintiq file version 2.0
Component pSelectionPPA
{
  #keys: '[412672.0.1109211919]'
  BaseType: 'WebPanel'
  Children:
  [
    Component DropDownListBaseVersionPPA
    {
      #keys: '[412672.0.1109211920]'
      BaseType: 'WebDropDownList'
      Databinding: 'ArchivePPA'
      Children:
      [
        Component DataExtractorOperation300
        {
          #keys: '[412672.0.1109211921]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'Archive'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchivePPA'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '基准需求版本:'
        Taborder: 0
      ]
    }
    Component dhBaseVersionPPA
    {
      #keys: '[412672.0.1109211922]'
      BaseType: 'WebDataHolder'
      Databinding: 'ArchivePPA'
      Properties:
      [
        Taborder: 1
      ]
    }
    Component DropDownListCompareVersionPPA
    {
      #keys: '[412672.0.1109211923]'
      BaseType: 'WebDropDownList'
      Databinding: 'ArchivePPA'
      Children:
      [
        Component DataExtractorOperation949
        {
          #keys: '[412672.0.1109211924]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'Archive'
            FilterArguments: 'baseSelection:QMacroPlanner::FormDemandComparison.dhBaseVersionPPA'
            FixedFilter: 'object <> baseSelection'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchivePPA'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '对比需求版本:'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 4
    Title: 'PPA'
    Visible: false
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pSelectionPR.def
ÎļþÃû´Ó _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation11.def ÐÞ¸Ä
@@ -1,59 +1,20 @@
Quintiq file version 2.0
Component PanelOperation11
Component pSelectionPR
{
  #keys: '[412672.0.1085801711]'
  #keys: '[412672.0.1109203593]'
  BaseType: 'WebPanel'
  Children:
  [
    Component DropDownListCompareVersion id:DropDownListCompareVersion_85
    Component DropDownListBaseVersionPR
    {
      #keys: '[412672.0.1085801792]'
      #keys: '[412672.0.1109203679]'
      BaseType: 'WebDropDownList'
      Databinding: 'ArchivePR'
      Children:
      [
        Component DataExtractorOperation876 id:DataExtractorOperation876_293
        Component DataExtractorOperation id:DataExtractorOperation_866
        {
          #keys: '[412672.0.1085801793]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'Archive'
            FilterArguments: 'baseSelection:QMacroPlanner::FormDemandComparison.dhBaseVersion'
            FixedFilter: 'object <> baseSelection'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchivePR'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '对比需求版本:'
        Taborder: 2
      ]
    }
    Component dhBaseVersion id:dhBaseVersion_357
    {
      #keys: '[412672.0.1085801820]'
      BaseType: 'WebDataHolder'
      Databinding: 'ArchivePR'
      Properties:
      [
        Taborder: 1
      ]
    }
    Component DropDownListBaseVersion id:DropDownListBaseVersion_668
    {
      #keys: '[412672.0.1085801851]'
      BaseType: 'WebDropDownList'
      Databinding: 'ArchivePR'
      Children:
      [
        Component DataExtractorOperation id:DataExtractorOperation_669
        {
          #keys: '[412672.0.1085801852]'
          #keys: '[412672.0.1109203680]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
@@ -71,11 +32,52 @@
        Taborder: 0
      ]
    }
    Component dhBaseVersionPR
    {
      #keys: '[412672.0.1109203707]'
      BaseType: 'WebDataHolder'
      Databinding: 'ArchivePR'
      Properties:
      [
        Taborder: 1
      ]
    }
    Component DropDownListCompareVersionPR
    {
      #keys: '[412672.0.1109203739]'
      BaseType: 'WebDropDownList'
      Databinding: 'ArchivePR'
      Children:
      [
        Component DataExtractorOperation876 id:DataExtractorOperation876_784
        {
          #keys: '[412672.0.1109203740]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'Archive'
            FilterArguments: 'baseSelection:QMacroPlanner::FormDemandComparison.dhBaseVersionPR'
            FixedFilter: 'object <> baseSelection'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchivePR'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '对比需求版本:'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
    Taborder: 1
    Title: 'PR'
    Visible: false
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation11_DropDownListBaseVersion_OnSelectionChanged#168.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation11_DropDownListCompareVersion_OnSelectionChanged.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_ButtonCompare_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: PanelOperation_568/ButtonCompare
Response OnClick () id:Response_PanelOperation_568_ButtonCompare_OnClick
{
  #keys: '[412672.0.1111643148]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      table := LocalCell_DemandComparison::Compared( RecycleBin,dhBaseVersionPath.Data(),dhCompareVersionPath.Data() );
      dhComparisonData.Data( table );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bDownload_OnClick#781.def
ÎļþÃû´Ó _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pOperation_715_bDownload_OnClick.def ÐÞ¸Ä
@@ -1,8 +1,8 @@
Quintiq file version 2.0
#parent: pOperation_715/bDownload
Response OnClick () id:Response_pOperation_715_bDownload_OnClick
#parent: PanelOperation_568/bDownload_352
Response OnClick () id:Response_pOperation_bDownload_OnClick_781
{
  #keys: '[412672.0.1092111926]'
  #keys: '[412672.0.1109203541]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bExport_OnClick#723.def
ÎļþÃû´Ó _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pOperation_715_bExport_OnClick.def ÐÞ¸Ä
@@ -1,8 +1,8 @@
Quintiq file version 2.0
#parent: pOperation_715/bExport
Response OnClick () id:Response_pOperation_715_bExport_OnClick
#parent: PanelOperation_568/bExport_98
Response OnClick () id:Response_pOperation_bExport_OnClick_723
{
  #keys: '[412672.0.1092111927]'
  #keys: '[412672.0.1109203509]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_ButtonCompare_OnClick.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelSelectionChecks_CheckboxBudget_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelSelectionChecks/CheckboxBudget
Response OnChanged () id:Response_PanelSelectionChecks_CheckboxBudget_OnChanged
{
  #keys: '[412672.0.1112392619]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      pSelectionBudget.Visible( this.Checked() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelSelectionChecks_CheckboxCurve_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelSelectionChecks/CheckboxCurve
Response OnChanged () id:Response_PanelSelectionChecks_CheckboxCurve_OnChanged
{
  #keys: '[412672.0.1109206610]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      pSelectionCurve.Visible( this.Checked() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelSelectionChecks_CheckboxIDS_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelSelectionChecks/CheckboxIDS
Response OnChanged () id:Response_PanelSelectionChecks_CheckboxIDS_OnChanged
{
  #keys: '[412672.0.1109206605]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      pSelectionIDS.Visible( this.Checked() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelSelectionChecks_CheckboxPPA_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelSelectionChecks/CheckboxPPA
Response OnChanged () id:Response_PanelSelectionChecks_CheckboxPPA_OnChanged
{
  #keys: '[412672.0.1112392624]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      pSelectionPPA.Visible( this.Checked() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelSelectionChecks_CheckboxPP_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelSelectionChecks/CheckboxPP
Response OnChanged () id:Response_PanelSelectionChecks_CheckboxPP_OnChanged
{
  #keys: '[412672.0.1112392613]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      pSelectionPP.Visible( this.Checked() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelSelectionChecks_CheckboxPR_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelSelectionChecks/CheckboxPR
Response OnChanged () id:Response_PanelSelectionChecks_CheckboxPR_OnChanged
{
  #keys: '[412672.0.1112326553]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      pSelectionPR.Visible( this.Checked() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionBudget_DropDownListBaseVersionBudget_OnSelectionChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: pSelectionBudget/DropDownListBaseVersionBudget
Response OnSelectionChanged (
  ArchivePR selection
) id:Response_pSelectionBudget_DropDownListBaseVersionBudget_OnSelectionChanged
{
  #keys: '[412672.0.1109211896]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownList_OnSelectionChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dhBaseVersionPR.Data( selection );
      this.Tooltip( selection.Name() );
      efBaseVersion.Text( selection.Name() );
      dhBaseVersionPath.Data( selection.FilePath() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionBudget_DropDownListCompareVersionBudget_OnSelectionChange.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: pSelectionBudget/DropDownListCompareVersionBudget
Response OnSelectionChanged (
  ArchivePR selection
) id:Response_pSelectionBudget_DropDownListCompareVersionBudget_OnSelectionChanged
{
  #keys: '[412672.0.1109211895]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownList_OnSelectionChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Tooltip( selection.Name() );
      efCompareVersion.Text( selection.Name() );
      dhCompareVersionPath.Data( selection.FilePath() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionCurve_DropDownListBaseVersionCurve_OnSelectionChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: pSelectionCurve/DropDownListBaseVersionCurve
Response OnSelectionChanged (
  ArchivePR selection
) id:Response_pSelectionCurve_DropDownListBaseVersionCurve_OnSelectionChanged
{
  #keys: '[412672.0.1109211962]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownList_OnSelectionChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dhBaseVersionPR.Data( selection );
      this.Tooltip( selection.Name() );
      efBaseVersion.Text( selection.Name() );
      dhBaseVersionPath.Data( selection.FilePath() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionCurve_DropDownListCompareVersionCurve_OnSelectionChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: pSelectionCurve/DropDownListCompareVersionCurve
Response OnSelectionChanged (
  ArchivePR selection
) id:Response_pSelectionCurve_DropDownListCompareVersionCurve_OnSelectionChanged
{
  #keys: '[412672.0.1109211961]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownList_OnSelectionChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Tooltip( selection.Name() );
      efCompareVersion.Text( selection.Name() );
      dhCompareVersionPath.Data( selection.FilePath() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionIDS_DataExtractorOperationIDS_OnSelectionChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: pSelectionIDS/DataExtractorOperationIDS
Response OnSelectionChanged (
  ArchivePR selection
) id:Response_pSelectionIDS_DataExtractorOperationIDS_OnSelectionChanged
{
  #keys: '[412672.0.1109211939]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownList_OnSelectionChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Tooltip( selection.Name() );
      efCompareVersion.Text( selection.Name() );
      dhCompareVersionPath.Data( selection.FilePath() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionIDS_DropDownListBaseVersionIDS_OnSelectionChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: pSelectionIDS/DropDownListBaseVersionIDS
Response OnSelectionChanged (
  ArchivePR selection
) id:Response_pSelectionIDS_DropDownListBaseVersionIDS_OnSelectionChanged
{
  #keys: '[412672.0.1109211940]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownList_OnSelectionChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dhBaseVersionPR.Data( selection );
      this.Tooltip( selection.Name() );
      efBaseVersion.Text( selection.Name() );
      dhBaseVersionPath.Data( selection.FilePath() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPPA_DropDownListBaseVersionPPA_OnSelectionChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: pSelectionPPA/DropDownListBaseVersionPPA
Response OnSelectionChanged (
  ArchivePR selection
) id:Response_pSelectionPPA_DropDownListBaseVersionPPA_OnSelectionChanged
{
  #keys: '[412672.0.1109211918]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownList_OnSelectionChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dhBaseVersionPR.Data( selection );
      this.Tooltip( selection.Name() );
      efBaseVersion.Text( selection.Name() );
      dhBaseVersionPath.Data( selection.FilePath() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPPA_DropDownListCompareVersionPPA_OnSelectionChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: pSelectionPPA/DropDownListCompareVersionPPA
Response OnSelectionChanged (
  ArchivePR selection
) id:Response_pSelectionPPA_DropDownListCompareVersionPPA_OnSelectionChanged
{
  #keys: '[412672.0.1109211917]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownList_OnSelectionChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Tooltip( selection.Name() );
      efCompareVersion.Text( selection.Name() );
      dhCompareVersionPath.Data( selection.FilePath() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPP_DropDownListBaseVersionPP_OnSelectionChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: pSelectionPP/DropDownListBaseVersionPP
Response OnSelectionChanged (
  ArchivePR selection
) id:Response_pSelectionPP_DropDownListBaseVersionPP_OnSelectionChanged
{
  #keys: '[412672.0.1109211873]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownList_OnSelectionChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dhBaseVersionPR.Data( selection );
      this.Tooltip( selection.Name() );
      efBaseVersion.Text( selection.Name() );
      dhBaseVersionPath.Data( selection.FilePath() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPP_DropDownListCompareVersionPP_OnSelectionChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: pSelectionPP/DropDownListCompareVersionPP
Response OnSelectionChanged (
  ArchivePR selection
) id:Response_pSelectionPP_DropDownListCompareVersionPP_OnSelectionChanged
{
  #keys: '[412672.0.1109211872]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownList_OnSelectionChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Tooltip( selection.Name() );
      efCompareVersion.Text( selection.Name() );
      dhCompareVersionPath.Data( selection.FilePath() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPR_DropDownListBaseVersionPR_OnSelectionChanged#98.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: pSelectionPR/DropDownListBaseVersionPR
Response OnSelectionChanged (
  ArchivePR selection
) id:Response_pSelectionPR_DropDownListBaseVersionPR_OnSelectionChanged_98
{
  #keys: '[412672.0.1109203677]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownList_OnSelectionChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dhBaseVersionPR.Data( selection );
      this.Tooltip( selection.Name() );
      efBaseVersion.Text( selection.Name() );
      dhBaseVersionPath.Data( selection.FilePath() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPR_DropDownListCompareVersionPR_OnSelectionChanged#599.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: pSelectionPR/DropDownListCompareVersionPR
Response OnSelectionChanged (
  ArchivePR selection
) id:Response_pSelectionPR_DropDownListCompareVersionPR_OnSelectionChanged_599
{
  #keys: '[412672.0.1109203737]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownList_OnSelectionChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Tooltip( selection.Name() );
      efCompareVersion.Text( selection.Name() );
      dhCompareVersionPath.Data( selection.FilePath() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/_ROOT_Component_FormDemandComparison.def
@@ -8,7 +8,7 @@
  Children:
  [
    #child: PanelDemandComparison
    #child: PanelOperation
    #child: PanelDemandComparison294
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_MatrixEditorTable.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
Quintiq file version 2.0
Component MatrixEditorTable
{
  #keys: '[415136.0.844701426]'
  BaseType: 'WebMatrixEditor'
  Children:
  [
    Component MatrixEditorCellTable
    {
      #keys: '[415136.0.844701427]'
      BaseType: 'WebMatrixEditorCell'
      Children:
      [
        Component DataExtractorCell
        {
          #keys: '[415136.0.844701428]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'FinancialProductionReport'
            Source: 'DataHolderTable'
            Taborder: 0
            Transformation: 'FinancialProductionColumn.FinancialProductionCell'
          ]
        }
      ]
      Properties:
      [
        Attributes: 'Value'
        Column: 'FinancialProductionColumn'
        Row: 'FinancialProductionRow'
        Taborder: 0
      ]
    }
    Component MatrixEditorRowsTable
    {
      #keys: '[415136.0.844701431]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractorRow
        {
          #keys: '[415136.0.844701432]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'FinancialProductionReport'
            Source: 'DataHolderTable'
            Taborder: 0
            Transformation: 'FinancialProductionRow'
          ]
        }
      ]
      Properties:
      [
        Legend: 'Name'
        SortCriteria: 'RowNr'
        Taborder: 1
      ]
    }
    Component MatrixEditorColumnsTable
    {
      #keys: '[415136.0.844701435]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractorColumn
        {
          #keys: '[415136.0.844701436]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'FinancialProductionReport'
            Source: 'DataHolderTable'
            Taborder: 0
            Transformation: 'FinancialProductionColumn'
          ]
        }
      ]
      Properties:
      [
        Legend: 'Name'
        SortCriteria: 'Index'
        Taborder: 2
      ]
    }
    #child: matrixEditorActionBarPageTable
    #child: matrixeditorContextMenuTable
  ]
  Properties:
  [
    Columns: 'MatrixEditorColumnsTable'
    ContextMenu: 'matrixeditorContextMenuTable'
    Rows: 'MatrixEditorRowsTable'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportHeader.def
@@ -10,6 +10,7 @@
  ]
  Properties:
  [
    Taborder: 0
    FixedSize: true
    Taborder: 2
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportTable.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelTable.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
Component PanelTable
{
  #keys: '[415136.0.834352365]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: MatrixEditorTable
  ]
  Properties:
  [
    Taborder: 3
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelUnit.def
@@ -12,7 +12,6 @@
      Properties:
      [
        Label: 'Unit'
        Strings: '<All>;长春;大连'
        Taborder: 0
      ]
    }
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixEditorActionBarPageTable.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component matrixEditorActionBarPageTable
{
  #keys: '[415136.0.844701439]'
  BaseType: 'matrixEditorActionBarPage'
  Properties:
  [
    Taborder: 3
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixeditorContextMenuTable.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component matrixeditorContextMenuTable
{
  #keys: '[415136.0.844701442]'
  BaseType: 'matrixeditorContextMenu'
  Properties:
  [
    Taborder: 4
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
Quintiq file version 2.0
#parent: #root
Response OnCreated () id:Response_FormFinancialProductionReport_OnCreated
{
  #keys: '[415136.0.842812649]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      //初始化
      if( not exists( MacroPlan, FinancialProductionSource, source, not source.IsImport() ) ){
        FinancialProductionSource::Initialize( MacroPlan );
      }
      //info( '------------------1----------------' );
      table := selectobject( MacroPlan, FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() and table.IsShow() );
      info( '------------------2----------------', table.IsImport(), table.IsShow() );
      DataHolderTable.Data( table );
      dhSearch.Data( table.FinancialProductionSource().FinancialProductionSearch() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionImport_OnCl.def
@@ -27,7 +27,16 @@
          source := FinancialProductionSource::Upload( MacroPlan, webFileBinaryData, fileName );
          source.ReadStructure();
          
          if( not source.IsExistFutureMonthData() or
              ( source.IsExistFutureMonthData() and WebMessageBox::Question( this, Translations::MP_FinancialProductionReport_Question(), 'Yes|No' ) = 0 ) ){
             source.AfterImport();
             DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
          }
          WebMessageBox::Success( Translations::A_VWED_Success() );
          traverse( MacroPlan, FinancialProductionSource, psource, psource.IsImport() and psource <> source ){
            psource.Delete();
          }
        }
      } onerror {
        WebMessageBox::Error( e.GeneralInformation() );
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: PanelGeneration/ddslGeneration
Response OnSelectionChanged () id:Response_PanelGeneration_ddslGeneration_OnSelectionChanged
{
  #keys: '[415136.0.840791771]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
  QuillAction
  {
    Body:
    [*
      if( dhSearch.Data().Generation() <> selection ){
        dhSearch.Data().Generation( selection );
        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: PanelMQBMLB/ddslMQBMLB
Response OnSelectionChanged () id:Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged
{
  #keys: '[415136.0.842090372]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
  QuillAction
  {
    Body:
    [*
      if( dhSearch.Data().MqbMlb() <> selection ){
        dhSearch.Data().MqbMlb( selection );
        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelPower_ddslPower_OnSelectionChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: PanelPower/ddslPower
Response OnSelectionChanged () id:Response_PanelPower_ddslPower_OnSelectionChanged
{
  #keys: '[415136.0.842090478]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
  QuillAction
  {
    Body:
    [*
      if( dhSearch.Data().Power() <> selection ){
        dhSearch.Data().Power( selection );
        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelUnit_ddslUnit_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: PanelUnit/ddslUnit
Response OnCreated () id:Response_PanelUnit_ddslUnit_OnCreated
{
  #keys: '[415136.0.848320822]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      valueString := "<All>;" + FinancialProductionReport::GetDefaultCCUnit() + ";" + FinancialProductionReport::GetDefaultDLUnit();
      this.Strings( valueString );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: PanelUnit/ddslUnit
Response OnSelectionChanged () id:Response_PanelUnit_ddslUnit_OnSelectionChanged
{
  #keys: '[415136.0.840791631]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
  QuillAction
  {
    Body:
    [*
      if( dhSearch.Data().Unit() <> selection ){
        dhSearch.Data().Unit( selection );
        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def
@@ -8,7 +8,27 @@
  Children:
  [
    #child: PanelFinancialProductionReportHeader
    #child: PanelFinancialProductionReportTable
    #child: PanelTable
    Component DataHolderTable
    {
      #keys: '[415136.0.840720309]'
      BaseType: 'WebDataHolder'
      Databinding: 'FinancialProductionReport'
      Properties:
      [
        Taborder: 0
      ]
    }
    Component dhSearch
    {
      #keys: '[415136.0.849431513]'
      BaseType: 'WebDataHolder'
      Databinding: 'FinancialProductionSearch'
      Properties:
      [
        Taborder: 1
      ]
    }
  ]
  Properties:
  [