Fetch Method in Ax Reports of Microsoft Dynamics axapta x++

This is example of Fetch Method in Ax Reports of Microsoft Dynamics axapta x++ language. By this example you can get Idea that how to declare variables to use querybuilddatasource at run time.

You can see how to add query range in querybuilddatasource  object. Here report programmable section used to execute.
 public boolean fetch()  
 {  
 QueryBuildRange rangeStatus;  
 Query q = new Query();  
 QueryBuildDataSource qbds;  
 ;  
 q = this.query();  
 qbds = q.dataSourceTable(tablenum(Table1));  
 if (groupByClosed1 == 1)  
 {  
 qbds.addRange(fieldnum(Table1,Closed)).value(enum2Value(groupByClosed1));  
 }  
 if (groupByImplemented1 == 1)  
 {  
 qbds.addRange(fieldnum(Table1,Implemented)).value(enum2Value(groupByImplemented1));  
 }  
 if (groupByPending1 == 1)  
 {  
 groupByPending1 = 0;  
 qbds.addRange(fieldnum(Table1,Closed)).value(enum2Value(groupByPending1));  
 }  
 qbds.addSortField(fieldnum(Table1,TicketNo));  
 queryRun = new QueryRun(q);  
 while(queryRun.next())  
 {  
 status1 ='';  
 call1 = queryRun.get(tablenum(Table1));  
 Table2 = queryRun.get(tablenum(CallEngineers));  
 TicketNo = call1.TicketNo;  
 SalesOrder = call1.SalesOrderNo;  
 OfficeName= call1.OfficeName;  
 Address2 = call1.Address;  
 City = call1.City;  
 District = call1.District;  
 if (call1.Closed == 1)  
 {  
 status1 = 'Closed';  
 }  
 if (call1.Implemented == 1)  
 {  
 status1 = 'Implemented';  
 }  
 if (call1.Closed == 1 && call1.Implemented == 1)  
 {  
 status1 = 'Closed';  
 }  
 if (call1.Closed == 0 && call1.Implemented == 0)  
 {  
 status1 = 'pending';  
 }  
 Engineer = EmplTable::find(Table2.Engineer).Name;  
 Time1 = Table2.TimeTo;  
 Time2 = Table2.TimeFrom;  
 Dateofcall = Table2.DateOfCall;  
 Table1_1.executeSection();  
 }  
 return true;  
 }