Olá,
Sua lógica está incorreta.
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.