| Quintiq file version 2.0 | 
| #parent: #root | 
| Method Comparison ( | 
|   RecycleBin recycleBin | 
| ) as LocalTable | 
| { | 
|   TextBody: | 
|   [* | 
|     // rislai Jul-17-2024 (created) | 
|     macroPlan := this.MacroPlan(); | 
|     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(); | 
|     traverse( this,OfflinePlanColumn,column,column.ColumnDate() >=  macroPlan.StartOfPlanning().Date()){ | 
|       localColumn := table.LocalColumn( relnew,CustomDate := column.ColumnDate()); | 
|       localColumnHandle := localColumnIndexTree.GetHandle( column.ColumnDate().AsQUILL() ); | 
|       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() ); | 
|           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; | 
|   *] | 
| } |