Comportamento referente a utilização de campos virtuais que utilizam um Posicione para apresentar informações:

Ao utilizar um campo virtual com um Posicione para ter seu conteúdo preenchido,  o browse permite habilitar esse campo para ser utilizado na pesquisa do browse através da opção de pesquisa padrão, além de preencher seu conteúdo normalmente de acordo com as informações enviadas.

Acessando a configuração da tabela e acionando a opção Pesquisa e filtros será visualizado a opção "Habilitar pesquisa com campo virtual" (Browse - Configuração da tabela). 


Ao selecionar e salvar a configuração, a pesquisa do browse passará a apresentar os campos virtuais disponíveis para a pesquisa


Para a que esse campo possa ser apresentado na pesquisa e não somente preencher seu conteúdo com o retorno da função Posicione, algumas considerações devem ser observadas na criação desse Posicione:

O número de chaves enviadas em comparação com o índice utilizado no Posicione deve seguir as seguintes condições:

  • Um campo que possua todas as informações do índice: Posicione('SA1',1,C5_CAMPO,'A1_NOME') - Nesse exemplo o campo C5_CAMPO possui a Filial, Código e Loja do cliente que será apresentado.
  • A combinação de um campo de filial mais outro campo que possua o restante das informações: Posicione('SA1',1,xFilial('SA1') + C5_CAMPO,'A1_NOME') - Nesse exemplo o campo C5_CAMPO possui somente o Codigo e Loja desse cliente.
  • A chave completa do índice: Posicione('SA1',1,xFilial('SA1') + C5_CAMPO1 + C5_CAMPO2,'A1_NOME') - Nesse exemplo o campo C5_CAMPO1 possui o Código do cliente e C5_CAMPO2 possui a Loja, além da Filial que é recuperada através da função xFilial.
  • Ao utilizar a função xFilial a mesma deve possuir somente o primeiro parâmetro.
  • Não utilizar a função FwXFilial.

Caso o Posicione não atenda esse resquisitos, seu funcionamento em relação a apresentar o conteúdo na coluna indicada irá ocorrer normalmente, porém sem a adição dessa coluna na pesquisa do browse, onde, para ser utilizada, deve-se adequar o uso do Posicione às condições já descritas.

Ao habilitar a opção de pesquisa com campo virtual o browse pode apresentar lentidão em seu uso.

Para que a pesquisa possa ser realizada um novo alias é criado no processo, composto com os campos da tabela principal mais os campos utilizados no posicione, através de um left join. Para um melhor aproveitamento desta melhoria é necessário que os índices das tabelas
envolvidas sejam verificados.

Posicione('SA1',1,xFilial('SA1') + C5_CAMPO,'A1_NOME')

No exemplo acima será criado um JOIN entre as tabelas SC5 e SA1, restringidos pelos valores de C5_FILIAL e A1_FILIAL e C5_CAMPO e A1_NOME.  Dessa forma deve existir um índice que satisfaça essa condição.

Melhoria disponível a partir da versão de lib 20200908