Erro filtrar por data SQL SERVER

Boa noite,
após aplicar o filtro (opção especial -> mês) num campo do tipo data (smalldatetime no banco de dados), verifiquei erro no resultado.
Ex:

filtro_data

O resultado retornava registros do mês 07, sendo que o intervalo era até o final do mês 06.

Ao debugar, verifiquei que o scriptcase não estava tratando o campo data de forma correta.
Forma errada:
"and ( AgendaRemarcado.dtAgenda between ‘2019-06-01 00:00:00’ and ‘2019-06-30 23:59:59’ ) "
Forma correta em uma aplicação calendar, com o mesmo campo:
“(mssqlnative): SELECT idAgendaPaciente, idCliente, idProfissional, convert(char(23),dtAgenda,121),”

O problema é que não consigo pegar o valor do campo selecionado no filtro e aplicar a correção antes de gerar a consulta.

Quem puder me ajudar nisso, já resolve antes da Netmake corrigir o problema

Olá Fabrício,

Uma pergunta: essa grid começa com esse filtro? Se sim, para contornar essa questão, eu faria uma app controle e colocaria 2 campos data (data Inicial e data Final) e no OnValidate desse controle usaria o sc_link para a grid, passando as datas (e os demais campos) como parâmetros para a grid.
Na grid, lá no campo SQL, eu colocaria um WHERE e usaria os campos e os parâmetros vindos da app controle.

Creio que isso resolva seu problema, caso (como perguntei no início) essa grid comece pelo filtro.

Fala Kleyber, …

pois é, o problema que são mais de 10 aplicações de consulta aonde eu preciso utilizar o filtro.

Independente se ela iniciar pelo filtro eu precisaria utilizar o botão pesquisa.

Agradeço pela sugestão, mas não irá resolver meu problema.

Eu pensei ate em pegar o valor do campo no OnValidate do filtro, mas se eu selecionar a opção Mês por exemplo o resultado seria -> 01/06/2019 até 30/06/2019, ao pegar a variavel e utilizar no scriptInit da consulta só consigo obter o valor -> "var_date 2019-06-01 00:00:00 "

Recebendo o valor correto já me ajudaria bem, fazendo inclusive o que você mensionou.

crie um campo manual no filtro.
Na consulta aplique manualmente o WHERE com sc_select_where(add).usando o campo virtual

essa filtragem não está errada:
"and ( AgendaRemarcado.dtAgenda between ‘2019-06-01 00:00:00’ and ‘2019-06-30 23:59:59’ ) "

Haroldo, criando o campo manual, pegando no Scriptinit da consulta o resultado é apenas a 1a data

"var_date 2019-06-01 "

com o filtro citado, está retornando dados do mês 07.
no SQL a forma certa seria utilizar o Covert, ai sim o resultado fica correto.

data2

Você não esta sabendo pegar os dados.

no evento on_scriptInit

se seu campo virtual se chamar : dataagenda

use na macro sc_select_where(add): {dataagenda} e {dataagenda_2}

muito bem Haroldo, iria utilizar essa macro mesmo, mas não sabia do detalhe do campo “nomedocampo_2”.

eu havia achado essa forma de pegar o valor numa resposta sua em outro tópico, lá você setava o valor numa variavel global, pensei que ela receberia o valor inteiro do campo.

Muito obrigado, vou sair desse desafogo momentâneo até que a Netmake resolva esse bug.

Vlw Pessoal

1 Curtida