Uma dúvida tenho um relatório com Parambox de datas de emissao do pedido de venda, porém queria criar um filtro na query onde seja permitido extrair o relatorio com esses campos em branco e que seja possível apenas filtrar pelos parametros de data de faturamento.
Porém está retornando o erro em anexo, alguem pode me dar um help?
Em anexo seguem o erro, a forma que eu gostaria de extrair o relatório e a query desenvolvida.
Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.
Você tem condições que podem não inserir o filtro de data de emissão:
If ! Empty(MV_PAR01) .And. ! Empty(MV_PAR02)
cQryDad += "C5_EMISSAO BETWEEN '"+DtoS(MV_PAR01)+"' AND '"+DtoS(MV_PAR02)+"' " + CRLF
EndIf
Porém caso essa condição não seja atendida, você concatena o WHERE diretamente com o AND:
cQryDad += "WHERE " + CRLF
If ! Empty(MV_PAR01) .And. ! Empty(MV_PAR02)
cQryDad += "C5_EMISSAO BETWEEN '"+DtoS(MV_PAR01)+"' AND '"+DtoS(MV_PAR02)+"' " + CRLF
EndIf
cQryDad += "AND C6_DATFAT BETWEEN '"+DtoS(MV_PAR04)+"' AND '"+DtoS(MV_PAR05)+"' " + CRLF
Corrigindo a query:
Existem diversas formas de corrigir isso, uma delas, seria colocar o AND junto a expressão de filtro de data de emissão, ficando da seguinte forma:
cQryDad += "WHERE " + CRLF
If ! Empty(MV_PAR01) .And. ! Empty(MV_PAR02)
cQryDad += "C5_EMISSAO BETWEEN '"+DtoS(MV_PAR01)+"' AND '"+DtoS(MV_PAR02)+"' AND " + CRLF
EndIf
cQryDad += " C6_DATFAT BETWEEN '"+DtoS(MV_PAR04)+"' AND '"+DtoS(MV_PAR05)+"' " + CRLF
Dessa forma, caso a condição seja atendida, ela vai criar o WHERE de filtro de data de emissão e também já adicionar o AND para as demais condições do WHERE, e caso a condição seja falsa, o WHERE será concatenado corretamente ao filtro de data de faturamento.
Obs.: Esse foi o principal erro que vi, porém é claro, podem existir outros.