[RESOLVIDO] Consulta Grid Recuperar Valor do Campo em Filtro e Aplicar na Query

Scriptcase 9.4 ; Banco Firebird 3
Aplicação: CONSULTA
Subject:
Como Recuperar Valor do Campo criado no Filtro Avançado e Redefinir (alterar, substituir) o Where da SQL da consulta?


1) O SQL da consulta:
SELECT
Extract(Year From DATA_MOVIMENTO) ||’/’||
Extract(Month From DATA_MOVIMENTO) As ANO_MES,
DATA_MOVIMENTO,
SALDO_ANTERIOR,
RECEITAS,
COMPENSACAO_RECEITAS,
DESPESAS,
COMPENSACAO_DESPESAS,
SALDO_ATUAL,
ANO
FROM
SALDO
WHERE ANO >= ‘[GLO_ANOINICIAL]’
ORDER BY
ANO_MES Desc, DATA_MOVIMENTO DESC

===> Aqui temos uma variável global: GLO_ANOINICIAL

===> No Filtro Avançado criei o campo ANO_MINIMO -> preciso recuperar o seu valor quando informado pelo usuário

===>INicializei a variável global para o SQL principal nesse evento OnApplicationInit:

===> Até aqui tudo funcionando conforme esperado. Agora preciso que quando usuário atualizar o CAMPO ANO_MINIMO do Filtro Avançado a Consulta reflita de acordo.

Cria a global recebendo o valor do campo do filtro no evento onvalidate do filtro.

Haroldo, obrigado pela atenção.

Estou atualizando a variável GLO_ANOINICIAL no ONVALIDATE com o valor do campo ANO_MINIMO, mas não é refletido nada na consulta. Creio que está faltando repassar para a WHERE do SQL.
IMG
Atentem que estou usando aplicação CONSULTA e o módulo inicial é o GRID e não o FILTRO.
Outra coisa é, de posse do ANO_MINIMO do Filtro como substituir na WHERE do SQL, pois apenas conheço as MACROS que não fazem isso:

#sc_select_where) (add) Esta macro adiciona dinamicamente uma condição à cláusula WHERE da consulta.
#sc_where_current Esta macro disponibiliza o conteúdo do select original mais o filtro.
#sc_where_orig Esta macro disponibiliza o conteúdo da cláusula where do select original da aplicação.|

Antecipadamente Grato.

Pessoas importantes,

De acordo com as sugestões dos colegas realizei as seguintes alterações na aplicação:

a) Retirei a cláusula WHERE do SQL:
SELECT
Extract(Year From DATA_MOVIMENTO) ||’/’||
Extract(Month From DATA_MOVIMENTO) As ANO_MES,
DATA_MOVIMENTO,
SALDO_ANTERIOR,
RECEITAS,
COMPENSACAO_RECEITAS,
DESPESAS,
COMPENSACAO_DESPESAS,
SALDO_ATUAL,
ANO
FROM
SALDO
ORDER BY
ANO_MES Desc, DATA_MOVIMENTO DESC

b) No OnApplicattionInit da Grid está o código:
[GLO_ANOINICIAL] = date(“Y”);
{ANO_MINIMO} = [GLO_ANOINICIAL];

c) No OnScriptInit da grid está o código:
[GLO_ANOINICIAL] = {ANO_MINIMO};
if (empty({sc_where_atual})){
sc_select_where(add) = “where ANO >= [GLO_ANOINICIAL]”;
}
else{
sc_select_where(add) = “AND ANO >= [GLO_ANOINICIAL]”;
}

d) No OnValidate do Filtro Avançado está o código:
[GLO_ANOINICIAL] = {ANO_MINIMO};

e) Está ocorrendo esse erro na execução da aplicação:
IMG

image

remove isso.

Pessoal, retornando para o feedback final. Acho que todos deveriam fazer isso quando resolvessem ou não suas questões aqui.

A aplicação está funcionando à contento, conforme o esperado. Acima imagem daquela com a ativação de dois filtros: ANO MÍNIMO = 2015 and SALDO ATUAL maior que 30.000,00.

Como ficou o código:
a) SQL QUERY inicial sem a cláusula WHERE e a variável global.
SELECT
Extract(Year From DATA_MOVIMENTO) ||’/’||
Extract(Month From DATA_MOVIMENTO) As ANO_MES,
DATA_MOVIMENTO,
SALDO_ANTERIOR,
RECEITAS,
COMPENSACAO_RECEITAS,
DESPESAS,
COMPENSACAO_DESPESAS,
SALDO_ATUAL,
ANO
FROM
SALDO
ORDER BY
ANO_MES Desc, DATA_MOVIMENTO DESC

b) EVENTOS OnApplicationInit: Inicialização da variável Global e do campo do Filtro Avançado.
[GLO_ANOINICIAL] = date(“Y”);
{ANO_MINIMO} = date(“Y”);
===> Dúvidas: Poderia ser variável local? O valor do campo ANO_MINIMO não reflete quando chamamos o Filtro Avançado, fica vazio. Por quê?

c) EVENTOS OnScriptInit: atualiza a WHERE da SQL
if (empty({sc_where_atual})){
sc_select_where(add) = “where ANO >= [GLO_ANOINICIAL]”;
}
else{
sc_select_where(add) = “AND ANO >= [GLO_ANOINICIAL]”;
}

d) FILTRO Avançado ONVALIDATE: Ocorria erro quando fechado condições de Filtro. Resolvi com o código abaixo:
if(empty({ANO_MINIMO})){
[GLO_ANOINICIAL] = date(“Y”);
} else {
[GLO_ANOINICIAL] = {ANO_MINIMO};
}

Obrigado ao nobre e prestativo Haroldo. Estamos melhorando no conhecimento com Scriptcase. Mais na frente estarei contribuindo muito mais com a comunidade.

1 Curtida

São atitudes como a sua e do Haroldo que enriquecem o fórum.
Obrigado por compartilhar.