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:
@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:
No Registro 6 do SXB #U_FiltraSA1() No fonte: User Function FiltraSA1() Local cSQL cSQL := "@A1_COD IN ('000001','000002','000003')" Return cSQL