sexta-feira, 30 de janeiro de 2009

Query com range de valores

Olá!
Antes de mais nada, Feliz 2009 a todos!!!

Em posts anteriores, nos foi mostrado como se pode negar valores utilizando o objeto Query, hoje vamos ver como podemos fazer um range de valores com este objeto.

Do mesmo jeito que existe uma função queryValue(AnyType A), também existe a função queryRange(anyType _From, AnyType _To), que faz uma chamada a função SysQuery::range(_From,_To), que por sua vez, trata os valores passados como parâmetro. Por exemplo:


queryRange(1,10); //Retorna “1..10”


Com isso em mente podemos fazer um pequeno código que busca as NFs faturadas em um determinado range de datas:



static void RangeTest(Date _from, Date _to)
{
Query query = new query();
QueryRun queryRun;
QueryBuildDataSource qbds;
CustInvoiceJour custInvoiceJour;
;
qbds = query.addDataSource(TableNum(CustInvoiceJour));
qbds.addRange(FieldNum(CustInvoiceJour,InvoiceDate)).value(queryRange(_from,_to);
queryRun = new queryRun(query);

while(queryRun.next())
{
custInvoiceJour = queryRun.get(TableNum(CustInvoiceJour));
print (CustInvoiceJour.InvoiceDate);
}
pause;
}


Mas, num caso em que precisarmos buscar NFs faturadas a partir de/até uma determinada data, fazemos a chamada a queryRange utilizando outra função estática de SysQuery, a valueUnlimited(). No exemplo abaixo buscamos por NFs geradas a partir da data X passada como parâmetro.


static void RangeTest(Date X)
{
Query query = new query();
QueryRun queryRun;
QueryBuildDataSource qbds;
CustInvoiceJour custInvoiceJour;
;
qbds = query.addDataSource(TableNum(CustInvoiceJour));
qbds.addRange(FieldNum(CustInvoiceJour,InvoiceDate)).value(queryRange(X,SysQuery::valueUnlimited()));
queryRun = new queryRun(query);

while(queryRun.next())
{
custInvoiceJour = queryRun.get(TableNum(CustInvoiceJour));
print (CustInvoiceJour.InvoiceDate);
}
pause;
}



A classe SysQuery possui outras funções estáticas muito interessantes que ajudam, e muito, o desenvolvedor a montar suas Queries, como por exemplo:
- valueEmptyString();
- valueNot(AnyType A);
- valueNotEmptyString();

Espero que tenha ajudado!
Abs