| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod Download ( | 
|   MacroPlan macroPlan | 
| ) as BinaryValue | 
| { | 
|   TextBody: | 
|   [* | 
|     xmlDOMI      := XMLDOMImplementation::Create(); | 
|     xmlDOM       := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>Sheet1</name></table>' ); | 
|      | 
|     tableElement := xmlDOM.GetElementByTagName( "table", 0 ); | 
|      | 
|     opt  := maxselect( macroPlan, OfflinePlanTable, tempOPT, true, tempOPT.SaveDateTime() ); | 
|     opcs := selectsortedset( opt, OfflinePlanColumn, tempOPC, true, tempOPC.ColumnDate() ); | 
|     oprs := selectsortedset( opt, OfflinePlanRow, tempOPR, true, tempOPR.ProductionLine(), tempOPR.ProductID(), tempOPR.Type() ); | 
|     traverse ( opcs, Elements, opc ) { | 
|       column := xmlDOM.CreateElement( "column" ); | 
|       name   := xmlDOM.CreateElement( "name" ); | 
|       type   := xmlDOM.CreateElement( "type" ); | 
|       name.TextContent( ifexpr( opc.ColumnDate() < macroPlan.StartOfPlanning().Date(), "", opc.ColumnDate().Format( "Y/M2/D2" ) ) ); | 
|       type.TextContent( "String" ); | 
|       column.AppendChild( name ); | 
|       column.AppendChild( type ); | 
|        | 
|       traverse ( oprs, Elements, opr ) { | 
|         c    := select( opc, OfflinePlanCell, tempOPC, tempOPC.OfflinePlanRow() = opr ); | 
|         cell := xmlDOM.CreateElement( "cell" ); | 
|         cell.SetAttribute( "value", guard( c.Value(), "" ) ); | 
|         column.AppendChild( cell ); | 
|       } | 
|        | 
|       tableElement.AppendChild( column ); | 
|     } | 
|      | 
|     xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM ) | 
|      | 
|     //info( xmlString ); | 
|      | 
|     tableGroupHandle := TableGroupHandle::Create( "Sheet1" ); | 
|     tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) ); | 
|     tableGroupHandle.Add( tableHandle ); | 
|      | 
|     binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true ); | 
|      | 
|     return binaryData.AsBinaryValue(); | 
|   *] | 
| } |