Ola pessoal, tudo bom?
Estou desenvolvendo um relatorio com a classe FWMsExcel, nele preciso ao não selecionar nenhuma das 5 opções do parametro no Where ele traga todos os registros, porém quando insiro essas 5 opções na consulta ele traz apenas os registros que possuem o C6_NUMOP e C6_ITEMOP preenchido porém também preciso que os campos que estão vazios apareçam caso nenhum parametro seja atendido, poderiam me ajudar?
SELECT DISTINCT
C6_NUM,
C6_ITEM,
C6_PRODUTO,
C6_DESCRI,
C6_QTDVEN,
C6_PRCVEN,
C6_VALOR,
C6_ZZGRUPO,
C6_ZZDSCG,
C6_LOCAL,
C5_CLIENTE,
A1_NOME,
A1_LOJA,
C5_EMISSAO,
C6_ZZMAT,
C6_ENTREG,
C6_ZZPRZ,
C6_ZZDT1,
C6_ZZDT2,
C6_ZZDT3,
C6_ZZOBSV,
C5_ZZLIBEN,
C5_ZZUENG,
C6_CF,
C2_NUM,
C2_ITEM
FROM SC6010 SC6
INNER JOIN SC5010 SC5 ON
C5_FILIAL = C6_FILIAL
AND C5_NUM = C6_NUM
AND SC5.D_E_L_E_T_ = ' '
LEFT JOIN SC2010 SC2
ON C6_FILIAL = C2_FILIAL
AND C6_PRODUTO = C2_PRODUTO
AND C6_NUMOP = C2_NUM
AND C6_ITEMOP = C2_ITEM
AND SC2.D_E_L_E_T_ = ' '
LEFT JOIN SA1010 SA1 ON
C5_CLIENTE = A1_COD
AND C5_LOJACLI = A1_LOJA
AND C5_TIPO = 'N'
AND SC5.D_E_L_E_T_ = ' '
AND SA1.D_E_L_E_T_ = ' '
LEFT JOIN SA2010 SA2 ON
C5_CLIENTE = A2_COD
AND C5_LOJACLI = A2_LOJA
AND C5_TIPO <> 'N'
AND SC5.D_E_L_E_T_ = ' '
AND SA2.D_E_L_E_T_ = ' '
LEFT JOIN SH6010 SH6 ON
SH6.H6_FILIAL = C6_FILIAL
AND SH6.H6_PRODUTO = C6_PRODUTO
AND SUBSTRING(SH6.H6_OP, 1, 6) = C6_NUMOP
AND SUBSTRING(SH6.H6_OP, 7, 2) = C6_ITEMOP
WHERE
C6_CF IN ('6101','5101','6102','5102','6107','6117','5117','5933','6933','5124','6108','6118','5401','6404','7101','5551','6551','6109','6401')
AND C5_TIPO = 'N'
AND C6_NOTA = ' '
AND C6_BLQ = ' '
AND C6_LOCAL IN ('01','03','05','06','07')
AND SC6.D_E_L_E_T_ = ' '
//**Quando este filtro e inserido mesmo nao selecionando nenhuma das opções so traz os registros que possuem o C6_NUMOP e C6_ITEMOP preenchido e neste caso precisaria que trouxesse todos os registros.**
If nOpcFiltr == 5
AND H6_RECURSO = '000058'
Else
//Extrai os registros baseado pelos campos C6_ENTREG,C6_ZZDT1,C6_ZZDT2 e C6_ZZDT3.
AND ((C6_ENTREG BETWEEN'+DtoS(MV_PAR01)+'AND '+DtoS(MV_PAR02)+') OR
(C6_ZZDT1 BETWEEN'+DtoS(MV_PAR01)+' AND '+DtoS(MV_PAR02)+') OR
(C6_ZZDT2 BETWEEN'+DtoS(MV_PAR01)+' AND '+DtoS(MV_PAR02)+') OR
(C6_ZZDT3 BETWEEN'+DtoS(MV_PAR01)+' AND '+DtoS(MV_PAR02)+'))
AND H6_RECURSO <> '000058'
If nOpcFiltr == 1
//**Produção sem Atraso**
//Verifica se a data de entrega prevista pelo Ccomerial e menor que a data atual.
//Valida se houve reprogramação pela produção pelos campos C6_ZZDT1,C6_ZZDT2 e C6_ZZDT3
//E verifica se a matéria prima está disponível ou não.
AND C6_ENTREG >= GETDATE()
AND C6_ZZDT1 = ' '
AND C6_ZZDT2 = ' '
AND C6_ZZDT3 = ' '
AND C6_ZZMAT = 'S'
AND H6_RECURSO <> '000058'
ElseIf nOpcFiltr == 2
//Verifica se a data de entrega prevista pelo Ccomerial e menor que a data atual.
//Valida se houve reprogramação pela produção pelos campos C6_ZZDT1,C6_ZZDT2 e C6_ZZDT3 e se a mesma menor que a data atual.
//E verifica se a matéria prima está disponível ou não.
AND ((C6_ENTREG <= GETDATE() )
AND (C6_ZZDT1 <= GETDATE() )
AND (C6_ZZDT2 <= GETDATE() )
AND (C6_ZZDT3 <= GETDATE() ))
AND C6_ZZMAT = 'S'
AND H6_RECURSO <> '000058'
ElseIf nOpcFiltr == 3
//Verifica se as datas de reprogramação são maiores que a data atual e materia prima está como Sim.
AND ((C6_ZZDT1 > GETDATE() )
OR (C6_ZZDT2 > GETDATE() )
OR (C6_ZZDT3 > GETDATE() ))
AND C6_ZZMAT = 'S'
AND H6_RECURSO <> '000058'
ElseIf nOpcFiltr == 4
//Verifica se a materia prima está como Não
AND C6_ZZMAT = 'N'
AND H6_RECURSO <> '000058'
EndIf
EndIf
GROUP BY C6_NUM,C6_ITEM,C6_PRODUTO,C6_DESCRI,C6_QTDVEN,C6_PRCVEN,C6_VALOR,C6_ZZGRUPO,C6_ZZDSCG,C5_CLIENTE,A1_NOME,A1_LOJA,C5_EMISSAO,C6_ZZMAT,C6_ENTREG,C6_ZZPRZ,C6_ZZDT1,C6_ZZDT2,C6_ZZDT3,C6_ZZOBSV,C5_ZZLIBEN,C5_ZZUENG,C6_CF, C2_NUM,C2_ITEM,H6_RECURSO,C6_LOCAL