Autor Tópico: [RESOLVIDO] Filtro por eventos - Problema ao utilizar mais de um filtro  (Lida 681 vezes)

soeletricavergani

  • Novato
  • *
  • Mensagens: 19
  • "[...] O serviço é alegria." Tagore
Boa Tarde Senhores,
Tenho um relatório no qual utilizo filtros tratados nos eventos, os filtros funcionam perfeitamente quando utilizo apenas um ou outro filtro.
Porém, quando utilizo dois ou mais filtros juntos, apenas um deles funciona.

Evento onScriptIni do menu consulta:
Código: [Selecionar]
if (!empty([cond_datainicial])){
sc_select_where(add) = " and [cond_datainicial]";
}
if (!empty([cond_codigo])){
sc_select_where(add) = " and [cond_codigo]";
}
if (!empty([cond_controle])){
sc_select_where(add) = " and [cond_controle]";
}
if (!empty([cond_grupoproduto])){
sc_select_where(add) = " and [cond_grupoproduto]";
}
if (!empty([cond_formula])){
sc_select_where(add) = " and [cond_formula]";
}

Evento onValidate no menu filtro avançado:
Código: [Selecionar]
sc_reset_global ([cond_datainicial], [cond_codigo], [cond_controle], [cond_grupoproduto], [cond_formula]);

if (!empty({datainicial}) and ({datainicial} != "0000-00-00 00:00:00")){
if (empty({datainicial_hor}) and empty({datainicial_min}) and empty({datainicial_seg})){
switch ({datainicial_cond}){
case "bw":{
if (empty({datainicial_input_2_hor}) and empty({datainicial_input_2_min}) and empty({datainicial_input_2_seg})){
[cond_datainicial] = " convert(varchar(10), BatRI.DataInicioDosagem, 121) between convert(varchar(10), '{datainicial}', 121) and convert(varchar(10), '{datainicial_2}', 121)";
} else{
[cond_datainicial] = " convert(varchar(10), BatRI.DataInicioDosagem, 121) between convert(varchar(10), '{datainicial}', 121) and convert(varchar(19), '{datainicial_2}', 121)";
}
break;
}
}
}
else {
switch ({datainicial_cond}){
case "bw":{
if (empty({datainicial_input_2_hor}) and empty({datainicial_input_2_min}) and empty({datainicial_input_2_seg})){
[cond_datainicial] = " convert(varchar(19), BatRI.DataInicioDosagem, 121) between convert(varchar(19), '{datainicial}', 121) and convert(varchar(10), '{datainicial_2}', 121)";
} else {
[cond_datainicial] = " convert(varchar(19), BatRI.DataInicioDosagem, 121) between convert(varchar(19), '{datainicial}', 121) and convert(varchar(19), '{datainicial_2}', 121)";
}
break;
}
}
}
}
if (!empty({codigo})){
switch ({codigo_cond}){
case "bw":{
[cond_codigo] = " OPR.NumeroProducao between '{codigo}' and '{codigo_2}'";
break;
}
}
}
if (!empty({controle})){
switch ({controle_cond}){
case "eq": {
[cond_controle] = " OPR.Controle = '{controle}'";
break;
}
}
}
if (!empty({grupoproduto})){
switch ({grupoproduto_cond}){
case "eq": {
[cond_grupoproduto] = " CPG.Descricao = '{grupoproduto}'";
break;
}
}
}
if (!empty({formula})){
[cond_formula] = " CF.Descricao = '{formula}'";
}

Como posso contornar esta situação?
Agradeço desde já,

Davi
« Última modificação: Janeiro 19, 2016, 04:12:47 pm por soeletricavergani »

Rodrigo Goulart Padovezzi

  • Expert
  • *****
  • Mensagens: 1045
    • Email
Re:Filtro por eventos - Problema ao utilizar mais de um filtro
« Responder #1 Online: Janeiro 19, 2016, 03:36:50 pm »
Faça o seguinte, no onScriptInit

altere seu código por

Código: [Selecionar]
$w_temp = "";
if (!empty([cond_datainicial])){
$w_temp .= " and [cond_datainicial]";
}
if (!empty([cond_codigo])){
$w_temp .= " and [cond_codigo]";
}
if (!empty([cond_controle])){
$w_temp .= " and [cond_controle]";
}
if (!empty([cond_grupoproduto])){
$w_temp .= " and [cond_grupoproduto]";
}
if (!empty([cond_formula])){
  $w_temp .= " and [cond_formula]";
}
sc_select_where(add) = $w_temp;

soeletricavergani

  • Novato
  • *
  • Mensagens: 19
  • "[...] O serviço é alegria." Tagore
Re:Filtro por eventos - Problema ao utilizar mais de um filtro
« Responder #2 Online: Janeiro 19, 2016, 04:12:14 pm »
Funcionou certinho Rodrigo!

Meus mais sinceros agradecimentos,
namastê!
_/\_