rislai
2024-07-25 3aa184a1b613952068af02e55960413b759e1701
添加产量对比报表
已修改5个文件
已添加43个文件
1274 ■■■■■ 文件已修改
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport#1.qbl 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GenerateColumnIndex.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Actual.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_BaseVersionValue.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_CompareVersionValue.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Gap.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Plan.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_BaseVersionValue.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_CompareVersionValue.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/Function_CalcGap.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/Method_GetAttributeByName.qbl 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_AsyncExport.qbl 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_Compared.qbl 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillCells.qbl 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillRows.qbl 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GenerateColumnIndex.qbl 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetAttributeNames.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetColumnXML.qbl 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/_ROOT_Type_LocalCell_ProductionComparison.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalColumn/Attribute_CustomIndex.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalColumn/DefaultValue_CustomIndex.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalColumn/Function_CalcIndex.qbl 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonOfflinePlanComparisonReport.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor#988.def 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelDemandComparison#634.def 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelFilter#119.def 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_matrixEditorActionBarPageDemandComparison#1.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_matrixeditorContextMenuDemandComparison#1.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhCheckedProduct_OnDataChanged.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhCheckedSalesSegment_OnDataChanged.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhComparisonData_OnDataChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhFinelProduct_OnCreated.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonFilter_OnClick.def 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslGeneration_OnCreated.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslMQBMLB_OnCreated.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslPower_OnCreated.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dhEndDate_OnCreated.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dhStartDate_OnCreated.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dsEndDate_OnChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dsStartDate_OnChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bComparison_OnClick#613.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/_ROOT_Component_FormOfflinePlanComparison.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/OfflinePlanComparisonReport.vw 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport#1.qbl
@@ -12,16 +12,16 @@
    // rislai Jul-9-2024 (created)
    table := owner.LocalTable( relnew,Name := "综合工时制报表");
    
    //column1  := table.LocalColumn( relnew,Name := "工厂" ,Index := 1);
    //column2  := table.LocalColumn( relnew,Name := "产线" ,Index := 2);
    //column1  := table.LocalColumn( relnew,Name := "工厂" ,CustomIndex := 1);
    //column2  := table.LocalColumn( relnew,Name := "产线" ,CustomIndex := 2);
    
    column3  := table.LocalColumn( relnew,Name := "生产天数" ,Index := 3);
    column3  := table.LocalColumn( relnew,Name := "生产天数" ,CustomIndex := 3);
    
    column4  := table.LocalColumn( relnew,Name := "加班/欠工时长" ,Index := 4);
    column5  := table.LocalColumn( relnew,Name := "节假日加班时长" ,Index := 6);
    column4  := table.LocalColumn( relnew,Name := "加班/欠工时长" ,CustomIndex := 4);
    column5  := table.LocalColumn( relnew,Name := "节假日加班时长" ,CustomIndex := 6);
    
    column6  := table.LocalColumn( relnew,Name := "加班/欠工费" ,Index := 8);
    column7 := table.LocalColumn( relnew,Name := "节假日加班费" ,Index := 10);
    column6  := table.LocalColumn( relnew,Name := "加班/欠工费" ,CustomIndex := 8);
    column7 := table.LocalColumn( relnew,Name := "节假日加班费" ,CustomIndex := 10);
    
    units := selectset( shiftPlans,Elements.UnitPeriodTime.Unit,unit,true );
    
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl
@@ -12,20 +12,20 @@
    // rislai Jul-4-2024 (created)
    table := owner.LocalTable( relnew,Name := "标准工时制报表");
    
    //column1  := table.LocalColumn( relnew,Name := "工厂" ,Index := 1);
    //column2  := table.LocalColumn( relnew,Name := "产线" ,Index := 2);
    //column1  := table.LocalColumn( relnew,Name := "工厂" ,CustomIndex := 1);
    //column2  := table.LocalColumn( relnew,Name := "产线" ,CustomIndex := 2);
    
    column3  := table.LocalColumn( relnew,Name := "生产天数" ,Index := 3);
    column3  := table.LocalColumn( relnew,Name := "生产天数" ,CustomIndex := 3);
    
    column4  := table.LocalColumn( relnew,Name := "平日加班时长" ,Index := 4);
    column5  := table.LocalColumn( relnew,Name := "休息日加班时长" ,Index := 5);
    column6  := table.LocalColumn( relnew,Name := "节假日加班时长" ,Index := 6);
    column7  := table.LocalColumn( relnew,Name := "欠工时长" ,Index := 7);
    column4  := table.LocalColumn( relnew,Name := "平日加班时长" ,CustomIndex := 4);
    column5  := table.LocalColumn( relnew,Name := "休息日加班时长" ,CustomIndex := 5);
    column6  := table.LocalColumn( relnew,Name := "节假日加班时长" ,CustomIndex := 6);
    column7  := table.LocalColumn( relnew,Name := "欠工时长" ,CustomIndex := 7);
    
    column8  := table.LocalColumn( relnew,Name := "平日加班费" ,Index := 8);
    column9  := table.LocalColumn( relnew,Name := "休息日加班费" ,Index := 9);
    column10 := table.LocalColumn( relnew,Name := "节假日加班费" ,Index := 10);
    column11 := table.LocalColumn( relnew,Name := "欠工费" ,Index := 11);
    column8  := table.LocalColumn( relnew,Name := "平日加班费" ,CustomIndex := 8);
    column9  := table.LocalColumn( relnew,Name := "休息日加班费" ,CustomIndex := 9);
    column10 := table.LocalColumn( relnew,Name := "节假日加班费" ,CustomIndex := 10);
    column11 := table.LocalColumn( relnew,Name := "欠工费" ,CustomIndex := 11);
    
    units := selectset( shiftPlans,Elements.UnitPeriodTime.Unit,unit,true );
    
_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GenerateColumnIndex.qbl
@@ -30,7 +30,7 @@
          // 2023/01/01
          index := [Number]generalColumn.Name().ReplaceAll( "/", "" );
        }
        column := localTable.LocalColumn( relnew, Name := generalColumn.Name(),Index := index );
        column := localTable.LocalColumn( relnew, Name := generalColumn.Name(),CustomIndex := index );
        columns.Add( column );
        columnTree.Root().AddChild( tempHandle,columns.Size() - 1 );
      }
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Actual.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Actual
{
  #keys: '3[412672.1.64753749][412672.1.64753748][412672.1.64753750]'
  ValueType: Real
}
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_BaseVersionValue.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute BaseVersionValue
{
  #keys: '3[412672.1.64753763][412672.1.64753762][412672.1.64753764]'
  ValueType: String
}
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_CompareVersionValue.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute CompareVersionValue
{
  #keys: '3[412672.1.64753752][412672.1.64753751][412672.1.64753753]'
  ValueType: String
}
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Gap.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Gap
{
  #keys: '3[412672.1.64753755][412672.1.64753754][412672.1.64753756]'
  ValueType: Real
}
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Plan.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Plan
{
  #keys: '3[412672.1.64753743][412672.1.64753742][412672.1.64753744]'
  ValueType: Real
}
_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_BaseVersionValue.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: BaseVersionValue
}
_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_CompareVersionValue.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: CompareVersionValue
}
_Main/BL/Type_LocalCell_ProductionComparison/Function_CalcGap.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
Function CalcGap
{
  TextBody:
  [*
    // rislai Jun-21-2024 (created)
    value := this.Plan() - this.Actual();
    this.Gap( value );
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/Method_GetAttributeByName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
Quintiq file version 2.0
#parent: #root
Method GetAttributeByName (
  String attributeName
) const declarative as String
{
  TextBody:
  [*
    // rislai Jun-21-2024 (created)
    value := "";
    if( attributeName = "BaseVersion" ){
       if( not this.LocalColumn().IsAttrbuteColumn() ){
         value := this.Plan().Format( "N(Dec)" );
       }
    }
    if( attributeName = "CompareVersion" ){
      if( not this.LocalColumn().IsAttrbuteColumn() ){
        value := this.Actual().Format( "N(Dec)" );
      }
    }
    if( attributeName = "Gap" ){
      if( not this.LocalColumn().IsAttrbuteColumn() ){
        value := this.Gap().Format( "N(Dec)" );
      }
    }
    if( attributeName = "BaseVersionValue" ){
      if( not this.LocalColumn().IsAttrbuteColumn() ){
        value := "0";
      }else{
        value := this.BaseVersionValue();
      }
    }
    if( attributeName = "CompareVersionValue" ){
      if( not this.LocalColumn().IsAttrbuteColumn() ){
        value := "0";
      }else{
        value := this.CompareVersionValue();
      }
    }
    return value;
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_AsyncExport.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
Quintiq file version 2.0
#parent: #root
StaticMethod AsyncExport (
  RecycleBin recycleBin,
  const constcontent LocalRows rows,
  const constcontent LocalColumns columns,
  const MacroPlan macroPlan
)
{
  TextBody:
  [*
    // rislai Jun-20-2024 (created)
    sortColumns := selectsortedset( columns,Elements,column,true,column.Index());
    attributeNames := LocalCell_DemandComparison::GetAttributeNames();
    columnstring := emit( "" );
    flag := true;
    traverse( sortColumns,Elements,sortColumn ){
      if( flag ){
        attributeXML := rows -> LocalCell_DemandComparison::GetColumnXML( sortColumn,attributeNames,"attribute",macroPlan );
        columnstring := columnstring.Merge( attributeXML )
        flag := false;
      }
      cellxml := rows -> LocalCell_DemandComparison::GetColumnXML( sortColumn,attributeNames ,"data",macroPlan );
      columnstring := columnstring.Merge( cellxml);
    }
    columnstring -> GroupAll() -> ExportXMLManager::AwaitLocalTableXMLData( recycleBin,guard( rows.Element(0).LocalTable().Name(),"Sheet1") );
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_Compared.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,118 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Compared (
  RecycleBin recycleBin,
  String baseVersionPath,
  String compareVersionPath,
  String baseVersionName,
  String compareVersionName
) as LocalTable
{
  TextBody:
  [*
    // rislai Jun-20-2024 (created)
    localTable := recycleBin.LocalTable( relnew,Name := baseVersionName + "__" + compareVersionName );
    baseVersionFile := OSFile::Construct();
    compareVersionFile := OSFile::Construct();
    try {
      baseVersionFile.Open( baseVersionPath, "Read", false );
      baseVersionDataSource := GeneralExcelImportAndExportDataSource::Upload( recycleBin, baseVersionFile.ReadBinary(), baseVersionPath );
      baseVersionDataSource.ReadStructure();
      compareVersionFile.Open( compareVersionPath, "Read", false );
      compareVersionDataSource := GeneralExcelImportAndExportDataSource::Upload( recycleBin, compareVersionFile.ReadBinary(), compareVersionPath );
      compareVersionDataSource.ReadStructure();
      baseVersionTable := select( baseVersionDataSource, GeneralExcelImportAndExportDataTable, tempGEIAEDT, true );
      compareVersionTable := select( compareVersionDataSource, GeneralExcelImportAndExportDataTable, tempGEIAEDT, true );
      if( not isnull( baseVersionTable ) and not isnull( compareVersionTable )){
        //生成行数据
        rowKeys := construct( Strings );
        baseVersionRowTree := NamedValueTree::Create();
        baseVersionRows := construct( GeneralExcelImportAndExportDataRows ,constcontent);
        compareVersionRowTree := NamedValueTree::Create();
        compareVersionRows := construct( GeneralExcelImportAndExportDataRows ,constcontent);
        LocalCell_DemandComparison::FillRows( baseVersionTable,rowKeys,baseVersionRowTree,baseVersionRows );
        LocalCell_DemandComparison::FillRows( compareVersionTable,rowKeys,compareVersionRowTree,compareVersionRows );
        // ç”Ÿæˆåˆ—数据
        columnTree := NamedValueTree::Create();
        columns := construct( LocalColumns );
        LocalCell_DemandComparison::GenerateColumnIndex( baseVersionTable,localTable,columnTree,columns );
        LocalCell_DemandComparison::GenerateColumnIndex( compareVersionTable,localTable,columnTree,columns );
        columnNames := selectvalues( columns,Elements,column,true,column.Name() );
        // ç”Ÿæˆæ•°æ®
        for ( rowIndex := 0; rowIndex < rowKeys.Size(); rowIndex++ ) {
          rowKey := rowKeys.Element( rowIndex );
          baseVersionCellTree := NamedValueTree::Create();
          baseVersionCells := construct( GeneralExcelImportAndExportDataCells ,constcontent);
          compareVersionCellTree := NamedValueTree::Create();
          compareVersionCells := construct( GeneralExcelImportAndExportDataCells ,constcontent);
          LocalCell_DemandComparison::FillCells( rowKey,baseVersionRowTree,baseVersionRows,baseVersionCellTree,baseVersionCells );
          LocalCell_DemandComparison::FillCells( rowKey,compareVersionRowTree,compareVersionRows,compareVersionCellTree,compareVersionCells );
          row := localTable.LocalRow( relnew,Index := localTable.GetRowIndexCache()  );
          traverse( columnNames,Elements,columnName ){
            columnHandle := columnTree.GetHandle( columnName );
            columnIndex := columnTree.Root().Child( columnHandle ).GetValueAsNumber();
            column := columns.Element( columnIndex );
            baseVersionCell := constnull( GeneralExcelImportAndExportDataCell );
            baseVersionCellHandle := baseVersionCellTree.GetHandle( columnName );
            try{
              baseVersionCellIndex := baseVersionCellTree.Root().Child( baseVersionCellHandle ).GetValueAsNumber();
              baseVersionCell := baseVersionCells.Element( baseVersionCellIndex );
            }onerror{}
            compareVersionCell := constnull( GeneralExcelImportAndExportDataCell );
            compareVersionCellHandle := compareVersionCellTree.GetHandle( columnName );
            try{
              compareVersionCellIndex := compareVersionCellTree.Root().Child( compareVersionCellHandle ).GetValueAsNumber();
              compareVersionCell := compareVersionCells.Element( compareVersionCellIndex );
            }onerror{}
            if( columnName = "产地" or columnName = "车型" or columnName = "发动机零件号" or columnName = "发动机四位码" ){
              row.LocalCell( relnew,LocalCell_DemandComparison,LocalColumn := column,
                             BaseVersionValue := ifexpr( isnull( baseVersionCell ), "空", baseVersionCell.Value()),
                             CompareVersionValue := ifexpr( isnull( compareVersionCell ),"空",compareVersionCell.Value()));
              column.IsAttrbuteColumn( true );
              if( columnName = "发动机零件号" ){
                row.CustomName( ifexpr( isnull( baseVersionCell ), ifexpr( isnull( compareVersionCell ),"空",compareVersionCell.Value()), baseVersionCell.Value()) );
              }
            }else{
              row.LocalCell( relnew,LocalCell_DemandComparison,LocalColumn := column,
                             BaseVersion := ifexpr( isnull( baseVersionCell ),0,[Real]baseVersionCell.Value()),
                             CompareVersion := ifexpr( isnull( compareVersionCell ), 0 ,[Real]compareVersionCell.Value() ));
            }
          }
        }
      }
      // åŽç»­åˆ é™¤
      baseVersionDataSource.Delete();
      compareVersionDataSource.Delete();
      baseVersionFile.Close();
      compareVersionFile.Close();
    } onerror {
      if( not isnull( baseVersionFile )){
        baseVersionFile.Close();
      }
      if( not isnull( compareVersionFile )){
        compareVersionFile.Close();
      }
      error( e );
    }
    return localTable;
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillCells.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
Quintiq file version 2.0
#parent: #root
StaticMethod FillCells (
  String rowName,
  NamedValueTree rowTree,
  constcontent GeneralExcelImportAndExportDataRows rows,
  NamedValueTree cellTree,
  constcontent GeneralExcelImportAndExportDataCells cells
)
{
  TextBody:
  [*
    // rislai Jun-22-2024 (created)
    rowHandel := rowTree.GetHandle( rowName );
    try{
      rowIndex := rowTree.Root().Child( rowHandel ).GetValueAsNumber();
      row := rows.Element( rowIndex );
      temp_cells := selectsortedset( row,GeneralExcelImportAndExportDataCell,cell,true,cell.GeneralExcelImportAndExportDataColumn().ColumnIndex() );
      for( i := 0 ; i<temp_cells.Size();i++ ){
        cell := temp_cells.Element( i );
        tempHandle := cellTree.GetHandle( cell.GeneralExcelImportAndExportDataColumn().Name() );
        cells.Add( cell );
        cellTree.Root().AddChild( tempHandle,cells.Size() - 1 );
      }
    }onerror{}
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillRows.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
Quintiq file version 2.0
#parent: #root
StaticMethod FillRows (
  const GeneralExcelImportAndExportDataTable general,
  Strings rowKeys,
  NamedValueTree rowTree,
  constcontent GeneralExcelImportAndExportDataRows rows
)
{
  TextBody:
  [*
    // rislai Jun-22-2024 (created)
    rowKeyColumn1 := select( general, GeneralExcelImportAndExportDataColumn, column, column.Name() = "产地" );
    rowKeyColumn2 := select( general, GeneralExcelImportAndExportDataColumn, column, column.Name() = "车型" );
    rowKeyColumn3 := select( general, GeneralExcelImportAndExportDataColumn, column, column.Name() = "发动机零件号" );
    rowKeyColumn4 := select( general, GeneralExcelImportAndExportDataColumn, column, column.Name() = "发动机四位码" );
    tempRowKeyCells1 := selectset( rowKeyColumn1,GeneralExcelImportAndExportDataCell,cell,true );
    tempRowKeyCells2 := selectset( rowKeyColumn2,GeneralExcelImportAndExportDataCell,cell,true );
    tempRowKeyCells3 := selectset( rowKeyColumn3,GeneralExcelImportAndExportDataCell,cell,true );
    tempRowKeyCells4 := selectset( rowKeyColumn4,GeneralExcelImportAndExportDataCell,cell,true );
    for( i := 0; i< tempRowKeyCells1.Size(); i++ ){
      tempRowKeyCell1 := tempRowKeyCells1.Element( i );
      tempRowKeyCell2 := tempRowKeyCells2.Element( i );
      tempRowKeyCell3 := tempRowKeyCells3.Element( i );
      tempRowKeyCell4 := tempRowKeyCells4.Element( i );
      rowKey := tempRowKeyCell1.Value() + tempRowKeyCell2.Value() + tempRowKeyCell3.Value() + tempRowKeyCell4.Value();
      tempHandle := rowTree.GetHandle( rowKey );
      rowTree.Root().AddChild( tempHandle ,i);
      rows.Add( tempRowKeyCell1.GeneralExcelImportAndExportDataRow());
      rowKeys.Add( rowKey );
    }
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GenerateColumnIndex.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GenerateColumnIndex (
  const GeneralExcelImportAndExportDataTable table,
  LocalTable localTable,
  NamedValueTree columnTree,
  LocalColumns columns
)
{
  TextBody:
  [*
    // rislai Jun-22-2024 (created)
    tableColumns := selectset( table,GeneralExcelImportAndExportDataColumn,column,true );
    for( i := 0; i< tableColumns.Size(); i++ ){
      generalColumn := tableColumns.Element( i );
      tempHandle := columnTree.GetHandle( generalColumn.Name() );
      nameValue := guard( columnTree.Root().Child( tempHandle ),null( NamedValue ));
      if( isnull( nameValue )){
        index := 999;
        if( generalColumn.Name() = "产地" ){
          index := 1;
        }else if( generalColumn.Name() = "车型" ){
          index := 2;
        }else if( generalColumn.Name() = "发动机零件号" ){
          index := 3;
        }else if( generalColumn.Name() = "发动机四位码" ){
          index := 4;
        }else{
          // 2023/01/01
          index := [Number]generalColumn.Name().ReplaceAll( "/", "" );
        }
        column := localTable.LocalColumn( relnew, Name := generalColumn.Name(),CustomIndex := index );
        columns.Add( column );
        columnTree.Root().AddChild( tempHandle,columns.Size() - 1 );
      }
    }
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetAttributeNames.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetAttributeNames () const declarative as owning Strings
{
  TextBody:
  [*
    // rislai Jun-21-2024 (created)
    attributeNames := construct( Strings );
    attributeNames.Add( "BaseVersion" );
    attributeNames.Add( "CompareVersion" );
    attributeNames.Add( "Gap" );
    return &attributeNames;
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetColumnXML.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetColumnXML (
  const constcontent LocalRows rows,
  const LocalColumn column,
  const Strings attributeNames,
  String type,
  const MacroPlan macroPlan
) const as String
{
  TextBody:
  [*
    // rislai Jun-21-2024 (created)
    // rislai Jun-20-2024 (created)
    columnXML := "";
    cells := selectsortedset( column, LocalCell.astype( LocalCell_DemandComparison ), cell,
                                  exists( rows,Elements,element,element = cell.LocalRow()), cell.LocalRow().Index());
    if( type = "data" ){
      columnXML := "";
      if( column.IsAttrbuteColumn() ){
        columnXML := "<column><name>" + column.Name() + "</name><type>String</type>";
      }else{
        columnXML := "<column><name>" + column.Name() + "</name><type>Number</type>";
      }
      traverse ( cells, Elements, cell ) {
        traverse( attributeNames ,Elements,e ){
          cellXML := '<cell value="' + cell.GetAttributeByName( e ) + '"/>'
          columnXML := columnXML + cellXML;
        }
      }
      columnXML := columnXML + "</column>";
    }
    if( type = "attribute" ){
      columnXML0_1 := "<column><name>Sales Segment</name><type>String</type>";
      columnXML0_2 := "<column><name>Generation</name><type>String</type>";
      columnXML0_3 := "<column><name>MQB/MLB</name><type>String</type>";
      columnXML0_4 := "<column><name>功率</name><type>String</type>";
      columnXML1 := "<column><name>Product ID</name><type>String</type>";
      columnXML2 := "<column><name>Attribute</name><type>String</type>";
      traverse ( cells, Elements, cell ) {
        flag := true;
        traverse( attributeNames ,Elements,e ){
          if( flag ){
            cellXML := '<cell value="' + cell.LocalRow().Name() + '"/>'
            columnXML1 := columnXML1 + cellXML;
            salesSegment := select( cell.LocalRow().LocalTable(),LocalColumn.LocalCell.astype( LocalCell_DemandComparison ),temp_cell,temp_cell.LocalRow() = cell.LocalRow() and temp_cell.LocalColumn().Name() = "产地");
            if( not isnull( salesSegment )){
              cellXML0_1 := '<cell value="' + ifexpr( salesSegment.BaseVersionValue() <> "空",salesSegment.BaseVersionValue(),salesSegment.CompareVersionValue()) + '"/>';
              columnXML0_1 := columnXML0_1 + cellXML0_1;
            }else{
              cellXML0_1 := '<cell value="  "/>'
              columnXML0_1 := columnXML0_1 + cellXML0_1;
            }
            product := select( macroPlan,Product_MP,product,product.ID() = cell.LocalRow().Name() );
            if( not isnull( product )){
              cellXML0_2 := '<cell value="' + product.Generation() + '"/>';
              cellXML0_3 := '<cell value="' + product.MQBMLB() + '"/>';
              cellXML0_4 := '<cell value="' + product.Power() + '"/>';
              columnXML0_2 := columnXML0_2 + cellXML0_2;
              columnXML0_3 := columnXML0_3 + cellXML0_3;
              columnXML0_4 := columnXML0_4 + cellXML0_4;
            }else{
              cellXML0_2 := '<cell value="  "/>';
              cellXML0_3 := '<cell value="  "/>';
              cellXML0_4 := '<cell value="  "/>';
              columnXML0_2 := columnXML0_2 + cellXML0_2;
              columnXML0_3 := columnXML0_3 + cellXML0_3;
              columnXML0_4 := columnXML0_4 + cellXML0_4;
            }
            flag := false;
          }else{
            cellXML := '<cell value="  "/>'
            columnXML1 := columnXML1 + cellXML;
            cellXML0_1 := '<cell value="  "/>'
            cellXML0_2 := '<cell value="  "/>';
            cellXML0_3 := '<cell value="  "/>';
            cellXML0_4 := '<cell value="  "/>';
            columnXML0_1 := columnXML0_1 + cellXML0_1;
            columnXML0_2 := columnXML0_2 + cellXML0_2;
            columnXML0_3 := columnXML0_3 + cellXML0_3;
            columnXML0_4 := columnXML0_4 + cellXML0_4;
          }
          cellXML := '<cell value="' + e + '"/>'
          columnXML2 := columnXML2 + cellXML;
        }
      }
      columnXML := columnXML0_1 + "</column>" + columnXML0_2 + "</column>" + columnXML0_3 + "</column>" + columnXML0_4 + "</column>" + columnXML1 + "</column>" + columnXML2 + "</column>";
    }
    return columnXML;
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/_ROOT_Type_LocalCell_ProductionComparison.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
TypeSpecialization LocalCell_ProductionComparison
{
  #keys: '2[412672.1.64753741][412672.1.64753740]'
  Parent: LocalCell
  StructuredName: 'LocalCell_ProductionComparisons'
}
_Main/BL/Type_LocalColumn/Attribute_CustomIndex.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute CustomIndex
{
  #keys: '3[412672.1.64721865][412672.1.64721864][412672.1.64721866]'
  ValueType: Number
}
_Main/BL/Type_LocalColumn/DefaultValue_CustomIndex.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  ISOValue: '-999'
  TargetAttribute: CustomIndex
}
_Main/BL/Type_LocalColumn/Function_CalcIndex.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
Quintiq file version 2.0
#parent: #root
Function CalcIndex
{
  TextBody:
  [*
    // rislai Jul-24-2024 (created)
    year := this.Date().Year();
    month := this.Date().Month();
    day := this.Date().Day();
    index := [String]year;
    if( month < 10 ){
      index := index + "0" + [String]month;
    }
    if( day < 10 ){
      index := index + "0" + [String]day;
    }
    value := ifexpr( this.CustomIndex() = -999,[Number]index,this.CustomIndex() );
    this.Index( value );
  *]
}
_Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl
@@ -8,7 +8,16 @@
  [*
    // rislai Jul-17-2024 (created)
    macroPlan := this.MacroPlan();
    table := recycleBin.LocalTable( relnew,Name := "");
    table := recycleBin.LocalTable( relnew,Name := "产量对比报表");
    actualDailyProductionDatas := selectset( macroPlan,ActualDailyProductionData,data,true );
    actualDailyProductionDataIndexTree := NamedValueTree::Create();
    for( i := 0; i< actualDailyProductionDatas.Size(); i++ ){
      actualDailyProductionData := actualDailyProductionDatas.Element( i );
      actualDailyProductionDataKey := actualDailyProductionData.Product() + actualDailyProductionData.Date().AsQUILL();
      actualDailyProductionDataHandle := actualDailyProductionDataIndexTree.GetHandle( actualDailyProductionDataKey );
      actualDailyProductionDataIndexTree.Root().AddChild( actualDailyProductionDataHandle,i );
    }
    
    localColumns := construct( LocalColumns );
    localColumnIndexTree := NamedValueTree::Create();
@@ -18,20 +27,36 @@
      localColumns.Add( localColumn );
      localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
    }
    traverse( this,OfflinePlanRow,row,row.Type() = "1" ){
      productID := row.ProductID();
      productLine := row.ProductionLine();
      localRow := table.LocalRow( relnew,Index := table.GetRowIndexCache(),CustomName := productID );
      traverse( row,OfflinePlanCell,cell,cell.OfflinePlanColumn().ColumnDate() >= macroPlan.StartOfPlanning().Date() ){
        localColumnHandle := localColumnIndexTree.GetHandle( cell.OfflinePlanColumn().ColumnDate().AsQUILL() );
        localColumnIndex := guard( localColumnIndexTree.Root().Child( localColumnHandle ),null( NamedValue ));
        if( not isnull( localColumnIndex )){
          actualDailyProductionDataKey := productID + cell.OfflinePlanColumn().ColumnDate().AsQUILL();
          actualDailyProductionDataHandle := actualDailyProductionDataIndexTree.GetHandle( actualDailyProductionDataKey );
          actualDailyProductionDataIndex := guard( actualDailyProductionDataIndexTree.Root().Child( actualDailyProductionDataHandle ),null( NamedValue ));
          actualDailyProductionVolume := 0.0;
          if( not isnull( actualDailyProductionDataIndex )){
            actualDailyProductionData := actualDailyProductionDatas.Element( actualDailyProductionDataIndex.GetValueAsNumber() );
            actualDailyProductionVolume := actualDailyProductionData.ProductionVolume();
          }
          localColumn := localColumns.Element( localColumnIndex.GetValueAsNumber() );
          localCell := localRow.LocalCell( relnew,LocalCell_DemandComparison ,LocalColumn := localColumn,
                                           BaseVersion := cell.Quantity(),CompareVersion := 0.0);
          localRow.LocalCell( relnew,LocalCell_ProductionComparison ,LocalColumn := localColumn,
                                           Plan := cell.Quantity(),Actual := actualDailyProductionVolume );
        }
      }
    }
    traverse( table,LocalColumn,column ){
      if( column.LocalCell( relsize ) = 0 ){
        column.Delete();
      }
    }
    return table;
  *]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
@@ -71,6 +71,17 @@
        Taborder: 5
      ]
    }
    Component ButtonOfflinePlanComparisonReport
    {
      #keys: '[412672.1.66051424]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'DOCUMENT_INFO'
        Label: '产量对比报表'
        Taborder: 6
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonOfflinePlanComparisonReport.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: ActionBarGroupReport/ButtonOfflinePlanComparisonReport
Response OnClick () id:Response_MacroPlanner_ActionBarGroupReport_ButtonOfflinePlanComparisonReport_OnClick
{
  #keys: '[412672.1.66051682]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      // Open view
      ApplicationMacroPlanner.OpenView( 'OfflinePlanComparisonReport', this );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor#988.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,102 @@
Quintiq file version 2.0
Component MatrixEditor id:MatrixEditor_988
{
  #keys: '[412672.1.61940674]'
  BaseType: 'WebMatrixEditor'
  Children:
  [
    Component MatrixEditorCell
    {
      #keys: '[412672.1.61940675]'
      BaseType: 'WebMatrixEditorCell'
      Children:
      [
        Component DataExtractorCells
        {
          #keys: '[412672.1.61940676]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'LocalTable'
            Source: 'dhComparisonData'
            Taborder: 0
            Transformation: 'LocalRow.LocalCell.astype(LocalCell_ProductionComparison)'
          ]
        }
      ]
      Properties:
      [
        Attributes: 'Plan;Actual;Gap'
        Column: 'LocalColumn'
        Row: 'LocalRow'
        Taborder: 0
      ]
    }
    Component MatrixEditorRows
    {
      #keys: '[412672.1.61940677]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractorRows
        {
          #keys: '[412672.1.61940678]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'LocalTable'
            FilterArguments: 'checkedProduct:QMacroPlanner::FormOfflinePlanComparison.dhFinelProduct'
            FixedFilter: 'exists( checkedProduct,Elements,product,product.ID() = object.Name() )'
            Source: 'dhComparisonData'
            Taborder: 0
            Transformation: 'LocalRow'
          ]
        }
      ]
      Properties:
      [
        Legend: 'Name'
        SortCriteria: 'Index'
        Taborder: 1
      ]
    }
    Component MatrixEditorColumns
    {
      #keys: '[412672.1.61940679]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractorColumns
        {
          #keys: '[412672.1.61940680]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'LocalTable'
            FilterArguments: 'startDate:QMacroPlanner::FormOfflinePlanComparison.dhStartDate;endDate:QMacroPlanner::FormOfflinePlanComparison.dhEndDate'
            FixedFilter: 'not object.IsAttrbuteColumn() and startDate <= object.Date() and endDate > object.Date()'
            Source: 'dhComparisonData'
            Taborder: 0
            Transformation: 'LocalColumn'
          ]
        }
      ]
      Properties:
      [
        Legend: 'Date'
        SortCriteria: 'Index'
        Taborder: 2
      ]
    }
    #child: matrixEditorActionBarPageDemandComparison_1
    #child: matrixeditorContextMenuDemandComparison_1
  ]
  Properties:
  [
    AllowMultipleAttributes: true
    Columns: 'MatrixEditorColumns'
    ContextMenu: 'matrixeditorContextMenuDemandComparison'
    Rows: 'MatrixEditorRows'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelDemandComparison#634.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
Quintiq file version 2.0
Component PanelDemandComparison id:PanelDemandComparison_634
{
  #keys: '[412672.1.61940673]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: MatrixEditor_988
    Component dhComparisonData
    {
      #keys: '[412672.1.61940683]'
      BaseType: 'WebDataHolder'
      Databinding: 'LocalTable'
      Properties:
      [
        Taborder: 1
      ]
    }
    Component dhCheckedProduct
    {
      #keys: '[412672.1.61940684]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[Product_MP]*'
      Children:
      [
        Component deCheckedProduct
        {
          #keys: '[412672.1.61940685]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[Product_MP]'
            Source: 'ApplicationMacroPlanner.DataHolderCheckedProduct'
            Taborder: 0
            Transformation: 'Elements'
          ]
        }
      ]
      Properties:
      [
        Taborder: 3
      ]
    }
    Component dhFinelProduct
    {
      #keys: '[412672.1.61940686]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[Product_MP]*'
      Properties:
      [
        Taborder: 2
      ]
    }
    Component dhCheckedSalesSegment
    {
      #keys: '[412672.1.61940687]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[SalesSegment_MP]*'
      Children:
      [
        Component deCheckedSalesSegment
        {
          #keys: '[412672.1.61940688]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[SalesSegment_MP]'
            Source: 'ApplicationMacroPlanner.DataHolderCheckedSalesSegment'
            Taborder: 0
            Transformation: 'Elements'
          ]
        }
      ]
      Properties:
      [
        Taborder: 4
      ]
    }
  ]
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelFilter#119.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
Quintiq file version 2.0
Component PanelFilter id:PanelFilter_119
{
  #keys: '[412672.1.61991354]'
  BaseType: 'WebPanel'
  Children:
  [
    Component ddslGeneration
    {
      #keys: '[412672.1.61991355]'
      BaseType: 'WebDropDownStringList'
      Properties:
      [
        Label: 'Generation'
        Taborder: 0
      ]
    }
    Component ddslMQBMLB
    {
      #keys: '[412672.1.61991356]'
      BaseType: 'WebDropDownStringList'
      Properties:
      [
        Label: 'MQB/MLB'
        Taborder: 1
      ]
    }
    Component ddslPower
    {
      #keys: '[412672.1.61991357]'
      BaseType: 'WebDropDownStringList'
      Properties:
      [
        Label: '功率'
        Taborder: 2
      ]
    }
    Component dsStartDate
    {
      #keys: '[412672.1.61991358]'
      BaseType: 'WebDateSelector'
      Properties:
      [
        Label: 'Start Date'
        Taborder: 3
      ]
    }
    Component dsEndDate
    {
      #keys: '[412672.1.61991359]'
      BaseType: 'WebDateSelector'
      Properties:
      [
        Date: 9999-12-31
        Label: 'End Date'
        Taborder: 5
      ]
    }
    Component ButtonFilter
    {
      #keys: '[412672.1.61991360]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: '过滤'
        Taborder: 7
      ]
    }
    Component dhStartDate
    {
      #keys: '[412672.1.61991361]'
      BaseType: 'WebDataHolder'
      Databinding: 'Date*'
      Properties:
      [
        Taborder: 4
      ]
    }
    Component dhEndDate
    {
      #keys: '[412672.1.61991362]'
      BaseType: 'WebDataHolder'
      Databinding: 'Date*'
      Properties:
      [
        Taborder: 6
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
Component PanelRibbon
{
  #keys: '[412672.1.64210439]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: PanelFilter_119
    #child: PanelRibbon504
  ]
  Properties:
  [
    FixedSize: true
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
Quintiq file version 2.0
Component PanelRibbon504
{
  #keys: '[412672.1.64850929]'
  BaseType: 'WebPanel'
  Children:
  [
    Component ddlOfflinePlanTable
    {
      #keys: '[412672.1.64850982]'
      BaseType: 'WebDropDownList'
      Databinding: 'OfflinePlanTable'
      Children:
      [
        Component DataExtractorRibbon
        {
          #keys: '[412672.1.64850983]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'MacroPlan'
            Source: 'MacroPlan'
            Taborder: 0
            Transformation: 'OfflinePlanTable'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'SaveDateTime'
        Label: '下线计划:'
        Taborder: 0
      ]
    }
    Component bComparison
    {
      #keys: '[412672.1.64851009]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: '开始对比'
        Taborder: 1
      ]
    }
    Component LabelRibbon
    {
      #keys: '[412672.1.66018113]'
      BaseType: 'WebLabel'
      Properties:
      [
        DataBinding: 'ddlOfflinePlanTable.Data.SaveDateTime'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_matrixEditorActionBarPageDemandComparison#1.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component matrixEditorActionBarPageDemandComparison id:matrixEditorActionBarPageDemandComparison_1
{
  #keys: '[412672.1.61940681]'
  BaseType: 'matrixEditorActionBarPage'
  Properties:
  [
    Taborder: 3
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_matrixeditorContextMenuDemandComparison#1.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component matrixeditorContextMenuDemandComparison id:matrixeditorContextMenuDemandComparison_1
{
  #keys: '[412672.1.61940682]'
  BaseType: 'matrixeditorContextMenu'
  Properties:
  [
    Taborder: 4
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhCheckedProduct_OnDataChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: PanelDemandComparison_634/dhCheckedProduct
Response OnDataChanged () id:Response_PanelDemandComparison_634_dhCheckedProduct_OnDataChanged
{
  #keys: '[412672.1.61940669]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      if( this.Data().Size() <> 0 ){
        dhFinelProduct.Data( this.Data().Copy() );
      }else{
        dhFinelProduct.Data( DataHolderProduct.Data().Copy() );
      }
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhCheckedSalesSegment_OnDataChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: PanelDemandComparison_634/dhCheckedSalesSegment
Response OnDataChanged () id:Response_PanelDemandComparison_634_dhCheckedSalesSegment_OnDataChanged
{
  #keys: '[412672.1.61940667]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      if( this.Data().Size() <> 0 ){
        prods := selectset( dhFinelProduct.Data(),Elements,element,exists( this.Data(),Elements.SalesDemand.Product_MP,prod,element = prod ));
        dhFinelProduct.Data( &prods );
      }else{
        dhFinelProduct.Data( DataHolderProduct.Data().Copy() );
      }
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhComparisonData_OnDataChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelDemandComparison_634/dhComparisonData
Response OnDataChanged () id:Response_PanelDemandComparison_634_dhComparisonData_OnDataChanged
{
  #keys: '[412672.1.61940670]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      PanelDemandComparison.Title( this.Data().Name() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhFinelProduct_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelDemandComparison_634/dhFinelProduct
Response OnCreated () id:Response_PanelDemandComparison_634_dhFinelProduct_OnCreated
{
  #keys: '[412672.1.61940668]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Data( DataHolderProduct.Data().Copy() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonFilter_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
#parent: PanelFilter_119/ButtonFilter
Response OnClick () id:Response_PanelFilter_119_ButtonFilter_OnClick
{
  #keys: '[412672.1.61991348]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      products := dhCheckedProduct.Data().Copy();
      if( ddslGeneration.Text() <> "<All>" ){
        products := selectset( products,Elements,element,element.Generation() <> ddslGeneration.Text());
      }
      if( ddslMQBMLB.Text() <> "<All>" ){
        products := selectset( products,Elements,element,element.MQBMLB() <> ddslMQBMLB.Text());
      }
      if( ddslPower.Text() <> "<All>" ){
        products := selectset( products,Elements,element,element.Power() <> ddslPower.Text());
      }
      dhFinelProduct.Data( &products );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslGeneration_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: PanelFilter_119/ddslGeneration
Response OnCreated () id:Response_PanelFilter_119_ddslGeneration_OnCreated
{
  #keys: '[412672.1.61991353]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      strings := selectuniquevalues( MacroPlan,Product_MP,product,not product.IsSystem(),product.Generation() );
      res := strings.Concatenate( ";" );
      this.Strings( "<All>;" + res );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslMQBMLB_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: PanelFilter_119/ddslMQBMLB
Response OnCreated () id:Response_PanelFilter_119_ddslMQBMLB_OnCreated
{
  #keys: '[412672.1.61991352]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      strings := selectuniquevalues( MacroPlan,Product_MP,product,not product.IsSystem(),product.MQBMLB() );
      res := strings.Concatenate( ";" );
      this.Strings( "<All>;" + res );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslPower_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: PanelFilter_119/ddslPower
Response OnCreated () id:Response_PanelFilter_119_ddslPower_OnCreated
{
  #keys: '[412672.1.61991351]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      strings := selectuniquevalues( MacroPlan,Product_MP,product,not product.IsSystem(),product.Power() );
      res := strings.Concatenate( ";" );
      this.Strings( "<All>;" + res );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dhEndDate_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelFilter_119/dhEndDate
Response OnCreated () id:Response_PanelFilter_119_dhEndDate_OnCreated
{
  #keys: '[412672.1.61991346]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Data( Date::MaxDate() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dhStartDate_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelFilter_119/dhStartDate
Response OnCreated () id:Response_PanelFilter_119_dhStartDate_OnCreated
{
  #keys: '[412672.1.61991347]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Data( Date::MinDate() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dsEndDate_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelFilter_119/dsEndDate
Response OnChanged () id:Response_PanelFilter_119_dsEndDate_OnChanged
{
  #keys: '[412672.1.61991349]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dhEndDate.Data( this.Date() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dsStartDate_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelFilter_119/dsStartDate
Response OnChanged () id:Response_PanelFilter_119_dsStartDate_OnChanged
{
  #keys: '[412672.1.61991350]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dhStartDate.Data( this.Date() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bComparison_OnClick#613.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: PanelRibbon504/bComparison
Response OnClick () id:Response_PanelRibbon504_bComparison_OnClick_613
{
  #keys: '[412672.1.64851008]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      opt := ddlOfflinePlanTable.Data();
      dhComparisonData.Data( opt.Comparison( RecycleBin ));
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/_ROOT_Component_FormOfflinePlanComparison.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent FormOfflinePlanComparison
{
  #keys: '[412672.1.61921213]'
  BaseType: 'WebForm'
  Children:
  [
    #child: PanelRibbon
    #child: PanelDemandComparison_634
  ]
  Properties:
  [
    Image: 'DOCUMENT_INFO'
    Title: '产量对比报表'
  ]
}
_Main/UI/MacroPlannerWebApp/Views/OfflinePlanComparisonReport.vw
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
{
  viewcontents
  {
    page: ''
    group: ''
    index: 0
    image: 'DOCUMENT_INFO'
    description: ''
  }
  formatversion: 2
  id: 'OfflinePlanComparisonReport'
  name: 'OfflinePlanComparisonReport'
  isglobal: false
  isroot: true
}