Autor Tópico: Filtro por eventos não funciona (bug?)  (Lida 687 vezes)

soeletricavergani

  • Novato
  • *
  • Mensagens: 19
  • "[...] O serviço é alegria." Tagore
Filtro por eventos não funciona (bug?)
« Online: Janeiro 14, 2016, 03:35:34 pm »
Boa Tarde Srs.
Tenho uma tabela de consulta na qual fiz um filtro por eventos para o campo data, já utilizei o mesmo método aplicado nesta tabela para fazer o filtro em outras tabelas e funcionou, porém, nesta tabela ocorreu o seguinte erro:

Citar
Erro ao acessar o banco de dados
Incorrect syntax near the keyword 'and'.
select count(*) from (Select BatR.DataInicioBatelada, BatR.NumeroBatelada, (convert(varchar(5), BatR.NumeroBatelada)+ '/'+ convert(varchar(5), OPR.QuantBatPV)) as Batelada, CF.Descricao as Desc_Formula, CP.Descricao as Desc_ProdutoFormula, OPR.NumeroLotePA, (convert(varchar(5), BatR.TempoMistSeco)+' s') as TempoMistSeco, (convert(varchar(5), BatR.TempoMistUmido)+' s') as TempoMistUmido, (convert(varchar(5), BatR.TempoMistTotal)+' s') as TempoMistTotal, (Select sum(PesoDosado) from OPR_Producao_Reg_Bat_Item BatRI2 where BatRI2.NumeroProducao = OPR.NumeroProducao and BatRI2.NumeroBatelada = BatR.NumeroBatelada) as PesoDosado, OPR.Comentario, OPR.NumeroProducao, CL.Descricao as Desc_Linha, CPG.Descricao as Desc_ProdutoGrupo, OPR.Controle, CSE.Abreviatura as Desc_SiloExp, BatR.NumeroProducao as BatR_NumeroProducao From Opr_Producao_Reg OPR Inner Join Opr_Producao_Reg_Bat BatR on (OPR.NumeroProducao=BatR.NumeroProducao) Inner Join Opr_Producao_Reg_Bat_Item BatRI on (BatR.NumeroProducao=BatRI.NumeroProducao and BatR.NumeroBatelada=BatRI.NumeroBatelada) Left Join Cad_Formula CF on (OPR.CodFormula=CF.CodFormula) Left Join Cad_Linha CL on (OPR.CodLinha=CL.CodLinha) Left Join Cad_Produto CP on (CF.CodProd=CP.CodProd) Left Join Cad_Produto CPI on (BatRI.CodProd=CPI.CodProd) Left Join Cad_Produto_Grupo CPG on (CP.CodGrupoProd=CPG.CodGrupoProd) Left Join Cad_Balanca CB on (BatRI.CodBalanca=CB.CodBalanca) Left Join Cad_Silo CSE on (BatR.CodSiloDestino=CSE.CodSilo) Left Join Cad_Silo CS on (BatRI.CodSilo=CS.CodSilo) Left Join Sys_UCTabUsers on (Sys_UCTabUsers.UCIdUser=BatR.Usuario) Where 1=1 and BatRI.PesoSolicitado>0 Group By BatR.DataInicioBatelada, BatR.NumeroBatelada, (convert(varchar(5), BatR.NumeroBatelada)+ '/'+ convert(varchar(5), OPR.QuantBatPV)), CF.Descricao, CP.Descricao, OPR.NumeroLotePA, (convert(varchar(5), BatR.TempoMistSeco)+' s'), (convert(varchar(5), BatR.TempoMistUmido)+' s'), (convert(varchar(5), BatR.TempoMistTotal)+' s'), OPR.Comentario, OPR.NumeroProducao, CL.Descricao, CPG.Descricao, OPR.Controle, CSE.Abreviatura, BatR.NumeroProducao ) nm_sel_esp and convert(varchar(19), BatRI.DataInicioDosagem, 121) between convert(varchar(19), '2015-06-12 00:00:00', 121) and convert(varchar(19), '2015-06-12 23:59:59', 121)

Select da consulta:
Código: [Selecionar]
Select BatR.DataInicioBatelada, BatR.NumeroBatelada, (convert(varchar(5), BatR.NumeroBatelada)+ '/'+ convert(varchar(5), OPR.QuantBatPV)) as Batelada,
CF.Descricao as Desc_Formula, CP.Descricao as Desc_ProdutoFormula, OPR.NumeroLotePA, (convert(varchar(5), BatR.TempoMistSeco)+' s') as  TempoMistSeco,
(convert(varchar(5), BatR.TempoMistUmido)+' s') as TempoMistUmido, (convert(varchar(5), BatR.TempoMistTotal)+' s') as TempoMistTotal,
(Select sum(PesoDosado) from OPR_Producao_Reg_Bat_Item BatRI2 where BatRI2.NumeroProducao = OPR.NumeroProducao and BatRI2.NumeroBatelada = BatR.NumeroBatelada) as PesoDosado,
OPR.Comentario, OPR.NumeroProducao, CL.Descricao as Desc_Linha, CPG.Descricao as Desc_ProdutoGrupo, OPR.Controle, CSE.Abreviatura as Desc_SiloExp,
BatR.NumeroProducao as BatR_NumeroProducao
From Opr_Producao_Reg OPR
Inner Join Opr_Producao_Reg_Bat BatR on (OPR.NumeroProducao=BatR.NumeroProducao)
Inner Join Opr_Producao_Reg_Bat_Item BatRI on (BatR.NumeroProducao=BatRI.NumeroProducao and BatR.NumeroBatelada=BatRI.NumeroBatelada)
Left Join Cad_Formula CF on (OPR.CodFormula=CF.CodFormula)
Left Join Cad_Linha CL on (OPR.CodLinha=CL.CodLinha)
Left Join Cad_Produto CP on (CF.CodProd=CP.CodProd)
Left Join Cad_Produto CPI on (BatRI.CodProd=CPI.CodProd)
Left Join Cad_Produto_Grupo CPG on (CP.CodGrupoProd=CPG.CodGrupoProd)
Left Join Cad_Balanca CB on (BatRI.CodBalanca=CB.CodBalanca)
Left Join Cad_Silo CSE on (BatR.CodSiloDestino=CSE.CodSilo)
Left Join Cad_Silo CS on (BatRI.CodSilo=CS.CodSilo)
Left Join Sys_UCTabUsers on (Sys_UCTabUsers.UCIdUser=BatR.Usuario)
Where 1=1 and BatRI.PesoSolicitado>0
Group By BatR.DataInicioBatelada, BatR.NumeroBatelada, (convert(varchar(5), BatR.NumeroBatelada)+ '/'+ convert(varchar(5), OPR.QuantBatPV)),
CF.Descricao, CP.Descricao, OPR.NumeroLotePA, (convert(varchar(5), BatR.TempoMistSeco)+' s'),
(convert(varchar(5), BatR.TempoMistUmido)+' s'), (convert(varchar(5), BatR.TempoMistTotal)+' s'),
OPR.Comentario, OPR.NumeroProducao, CL.Descricao, CPG.Descricao, OPR.Controle, CSE.Abreviatura, BatR.NumeroProducao
Order By BatR.DataInicioBatelada

Código utilizado no evento onScriptIni do menu da consulta:
Código: [Selecionar]
if (!empty([cond_datainicial])){
sc_select_where(add) = " and [cond_datainicial]";
}

Código utilizado no evento onValidate do filtro avançado:
Código: [Selecionar]
sc_reset_global ([cond_datainicial]);

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;
}
}
}
}

Acredito que os códigos estão corretos, em tópicos mais antigos aqui do fórum vi que pode se tratar de um bug. Porém, não vi tópicos sobre este erro na versão 8 do scriptcase.
Como posso contornar esta situação?
Agradeço desde já,

Davi
« Última modificação: Janeiro 14, 2016, 03:38:10 pm por soeletricavergani »

Thyago Brasil

  • Expert
  • *****
  • Mensagens: 891
  • Crê no Senhor Jesus e será salvo tu e tua família
    • www.brasdesign.com.br
    • Email
Re:Filtro por eventos não funciona
« Responder #1 Online: Janeiro 14, 2016, 03:38:29 pm »
Boa tarde Davi, tenta contornar criando uma view com a sql que vc usou na consulta e na consulta vc chama essa view.
Thyago Brasil
Desenvolvedor Web
Site: http://www.brasdesign.com.br

SC 5.02/SC 8.1

soeletricavergani

  • Novato
  • *
  • Mensagens: 19
  • "[...] O serviço é alegria." Tagore
Re:Filtro por eventos não funciona
« Responder #2 Online: Janeiro 14, 2016, 04:02:50 pm »
Boa tarde Davi, tenta contornar criando uma view com a sql que vc usou na consulta e na consulta vc chama essa view.

Tentei, retornou o seguinte erro:
Citar
Erro ao acessar o banco de dados
Invalid column name 'DataInicioDosagem'.
select count(*) from VW_Bateladas_Expandido where 1=1 and PesoSolicitado>0 and convert(varchar(19), DataInicioDosagem, 121) between convert(varchar(19), '2015-06-12 00:00:00', 121) and convert(varchar(19), '2015-06-12 23:59:59', 121)

O filtro por eventos foi feito justamente para não precisar listar o campo 'BatRI.DataInicioDosagem' no select, para que o agrupamento funcionasse corretamente. No caso de usar view haveria a necessidade de listar este campo para poder chamá-lo no select da consulta do scriptcase.
Alguma outra sugestão Thyago?