Páginas filhas
  • Registro tipo 6 - Filtro - Padrão

O Registro do tipo 6 define um filtro para a tabela.

XB_ALIAS

XB_TIPO

XB_SEQ

XB_COLUNA

XB_DESCRI

XB_CONTEM

SA1

6

01

 

 

If(cGrupoCli=='',.T.,SA1->A1_GRPVEN = cGrupoCli)

No registro de filtro(e podemos ter apenas 1) o XB_CONTEM deverá conter uma expressão Advpl que retorna um valor lógico.

XB_CONTEM neste caso tambem possui "coringas" para o Filtro, eles são:

Sustenido(#)

XB_CONTEM  ->  #HS_FILZVR

Quando temos o filtro começado por #, o filtro será determina na verdade pela macro execução do resto da expressão, útil quando temos um filtro dinâmico que não conseguimos determinar antes da execução da rotina.

Arroba+Sustenido (@#)

XB_CONTEM  ->  CCG->CCG_TIPO$@#FT501FILT(Substr(ReadVar(),4,10))

Esse Operador permite que seja executado a função após dele apenas 1 vez. Se vamos filtrar 1000 registros, ele permite que um trecho do filtro seja executado apenas a primeira vez, tornando o filtro mais rápido.

Filtro SQL na consulta

A partir da versão 12, é possível efetuar um filtro em sintaxe SQL utilizando o próprio registro 6. Para isso basta construir a expressão em SQL ANSI (Se utilizado sintaxe especifica de algum banco não será compatível com os demais) e adicionar o carácter @ na frente da mesma.

Por exemplo:

Expressão SQL
@A1_COD IN ('000001','000002','000003')

Caso a expressão seja muito longa e o tamanho do campo não comportar, é possível utilizar a funcionalidade (#) explicada acima para retornar uma expressão SQL valida. Por exemplo:

Exemplo utilizando Função e SQL
No Registro 6 do SXB
#U_FiltraSA1()
 
No fonte:
 
User Function FiltraSA1()
Local cSQL 
 
cSQL := "@A1_COD IN ('000001','000002','000003')"
 
Return cSQL

 


  • Sem rótulos