Filtro SQL com dois parametros

Boa tarde pessoal, tudo bom?

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.

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

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.

Ola Daniel, muito obrigado pela ajuda deu certinho!