Consulta SQL - FWMsExcel

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
compartilhar
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags sql ou faça a sua própria pergunta.