Add range to different fields on the same data source

How could I rewrite the code so as not to add data sources twice? Can I use qbds2 to declare multiple ranges for different fields?

public void lookupSalesId(FormStringControl _control)
{
    Query query= new Query();
    Query query1= new Query();
    SysTableLookup sysTablelookup;
    QueryBuildDataSource    qbds1,qbds2,qbds3;
     SalesTable salesTable;  
    contract = this.dataContractObject();
     
    sysTablelookup =SysTableLookup::newParameters(tableNum(CustInvoiceJour),_control);
    sysTablelookup.addLookupfield(fieldNum(CustInvoiceJour,SalesId));

    //qbds1=query.dataSourceTable(tableNum(CustInvoiceJour)).addDataSource(salesTable);

    qbds1 = query.addDataSource(tableNum(CustInvoiceJour));
    qbds1.addRange(fieldNum(CustInvoiceJour, InvoiceAccount)).value(dialogInvoiceAccount.value());

    qbds2=qbds1.addDataSource(tableNum(SalesTable));
    //qbds2.relations(true);
    qbds2.joinMode(JoinMode::InnerJoin);
    qbds2.addLink(fieldNum(CustInvoiceJour, SalesId), fieldNum(SalesTable, SalesId));
    qbds2.addRange(fieldNum(SalesTable, WorkerSalesResponsible)).value(queryValue(dialogSalesResponsible.value()));  
   
    
    qbds3 = query1.addDataSource(tableNum(CustInvoiceJour)).addDataSource(salesTable);
    qbds3.joinMode(JoinMode::InnerJoin);
    qbds3.addLink(fieldNum(CustInvoiceJour, SalesId), fieldNum(SalesTable, SalesId));
    qbds3.addRange(fieldNum(SalesTable, WorkerSalesTaker)).value(queryValue(dialogSalesTaker.value()));  
    
    //se poate si altfel?
    sysTablelookup.parmQuery(query);
    sysTablelookup.parmQuery(query1);
    sysTablelookup.performFormLookup();
}

In order to avoid adding data sources twice, you can declare the data sources once and then reuse them as needed throughout the code. In this specific case, you can declare qbds1 and qbds2 only once and then use them to define the query for the lookup.

Regarding the use of qbds2 to declare multiple ranges for different fields, yes, you can do that. Here’s an example of how you can modify the code to declare qbds2 only once and add multiple ranges for different fields:

public void lookupSalesId(FormStringControl _control)
{
Query query = new Query();
SysTableLookup sysTablelookup;
QueryBuildDataSource qbds1, qbds2;
SalesTable salesTable;
contract = this.dataContractObject();

sysTablelookup = SysTableLookup::newParameters(tableNum(CustInvoiceJour), _control);
sysTablelookup.addLookupfield(fieldNum(CustInvoiceJour, SalesId));

qbds1 = query.addDataSource(tableNum(CustInvoiceJour));
qbds1.addRange(fieldNum(CustInvoiceJour, InvoiceAccount)).value(dialogInvoiceAccount.value());

qbds2 = qbds1.addDataSource(tableNum(SalesTable));
qbds2.joinMode(JoinMode::InnerJoin);
qbds2.addLink(fieldNum(CustInvoiceJour, SalesId), fieldNum(SalesTable, SalesId));
qbds2.addRange(fieldNum(SalesTable, WorkerSalesResponsible)).value(queryValue(dialogSalesResponsible.value()));
qbds2.addRange(fieldNum(SalesTable, WorkerSalesTaker)).value(queryValue(dialogSalesTaker.value()));  

sysTablelookup.parmQuery(query);
sysTablelookup.performFormLookup();

}

By declaring qbds2 only once and then adding multiple ranges for different fields, you can simplify the code and avoid adding the data source twice.