[RESOLVIDO] Adicionar campo virtual no filtro da grid

Pessoal,

Tenho uma grid de consulta e adicionei um campo virtual que não faz parte da tabela na qual a grid é baseada. Coloquei esse campo virtual no filtro avançado do sc, só que quando filtro por ele, ele simplesmente não filtra.

o campo é “estado”

image

essa é a tela de filtro e o campo que adicionei para refinar as informações, porém não funciona.

image

Na opção de campo na área de filtro, estou usando essa query

SELECT distinct c.estado
FROM cliente c
inner join pedido p on c.id_cliente = p.cliente_id_cliente_fk
where estado <> ‘’
ORDER BY estado;

Enfim, o que preciso é que quando eu filtre o estado de PE, a grid só apresente quem é de PE.

Alguém pode me ajudar?

Evento onvalidate do filtro mova o valor desse campo para uma global.
Evento onscriptinit da consulta aplique o where utilizando esse campo se não for vazio através da macro sc_select_where(add)

Rapaz, vou tentar aqui. Como sou iniciante, talvez minha limitações não permitam eu atingir esse raciocínio, mas vou tentar de qualquer jeito. Muito obrigado.

@InfinitusWeb Eu entendi o que você sugeriu, só que essa macro passa uma cláusura where dinamicamente para um campo da tabela, só que esse campo “estado”, ele não faz parte da minha tabela principal da consulta. O campo que tenho lá que é chave pra tabela onde tem o estado, é o campo cliente_id_cliente_fk.

Então crie inner Join no sql principal com a tabela ligada
Aí nem precisaria do campo virtual no filtro

Seria a melhor opção, mas se eu tivesse criando a aplicação agora. Já tentei fazer isso outro dia. Quebrei a aplicação, perdi os campos por causa dos alias.

Não deveria perder os campos.
Então usa a macro sc_select_where com um subselec

cliente_id_cliente_fk in (select id_cliente from cliente where estado = ‘[var_edtado]’)

1 Curtida

É exatamente aqui onde estou. Vlww

Vc não é tão iniciante assim.
Que bom que achou o caminho.

Você é muito generoso. Sou grato pela sua disponibilidade em nos ajudar aqui.

@InfinitusWeb

O resultado foi este abaixo porque tem mais de um cliente de PE.

image

Utilize o in em vez de =

1 Curtida

Funcionou… Valeu, professor.

@InfinitusWeb

Estamos quase lá…

Como a macro está no onScriptInit, a aplicação está iniciando sem carregar os registros da tabela. Pra eu poder ver os registros tenho que entrar em filtro e selecionar o estado. O filtro só é para funcionar quando eu realmente entrar na tela de e escolher a opção do estado. Tem como fazer isso e a grid iniciar normalmente com todos os registros?

você tem que testar os filtros e s campo essa global se estiverem vazios aí você aplica o a macro tá na então você tem que testar né tem uma macro que verifica-se se o filtra vazio ou não é ser será que filtra alguma coisa assim não lembro de cabeça

if ([var_estado]) {
if (empty({sc_where_atual})){
       sc_select_where(add) = "where campoX = '[variavel_global]'";
}else{
     sc_select_where(add) = "AND campoX = '[variavel_global]'";
}
}
1 Curtida

Resolvi refazendo a grid e o sql principal pelo sql builder. Fiz uma junção das tabelas adicionando o campo que precisava que não faz parte da minha tabela principal. Assim funcionou.

É a melhor solução @Alesson (não sei eu nome).

1 Curtida

Vlw @InfinitusWeb. Adicionei o meu nome.

1 Curtida