Pular para o conteúdo
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #92731
    edgf
    Participante

      Prezados membros do Fórum bom dia!

      Estou com um “pequeno”problema e não consegui encontrar solução.

      Tenho uma tabela que trabalha com dois campos:

      FATOPERACAO e FATOPERACAO_ORIGINAL

      Esses campos servem para definir quando uma mercadoria é devolvida.

      O processo funciona da seguinte forma:

      Sempre que uma compra é feita, e é gerado uma nota fiscal de saida, essa venda recebe um numero de FATOPERACAO, no entanto quando uma mercadoria é devolvida é feito uma nota de entrada com um outro tipo de transacao com o campo FATOPERACAO_ORIGINAL = FATOPERACAO da venda, dessa forma qdo verifico que o FATOPERACAO_ORIGINAL existe NA FATOPERACAO, eu sei que aquela nota da FATOPERACAO FOI DEVOLVIDA e não trago esse registro (pelo menos era assim que era para funcionar).

      Eu consegui montar a query tal qual abaixo que tras os devolvidos certinho.

      SELECT
      CNP.FAT_MOVIMENTO_CAPA.NUMERO_NOTA_FISCAL,
      CNP.FAT_MOVIMENTO_CAPA.TIPO_TRANSACAO,
      CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO,
      CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO_ORIGINAL

      FROM CNP.FAT_MOVIMENTO_CAPA

      WHERE
      CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO IN (SELECT CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO_ORIGINAL FROM CNP.FAT_MOVIMENTO_CAPA ) AND

      CNP.FAT_MOVIMENTO_CAPA.DTA_DOCUMENTO >= ’01-JAN-2010′ AND
      CNP.FAT_MOVIMENTO_CAPA.DTA_DOCUMENTO < '01-FEB-2010' AND --CNP.FAT_MOVIMENTO_CAPA.NUMERO_NOTA_FISCAL = '7772' AND CNP.FAT_MOVIMENTO_CAPA.SERIE_NOTA_FISCAL IN ('4', '900') AND CNP.FAT_MOVIMENTO_CAPA.TIPO_TRANSACAO IN ('P21', 'P23', 'P24', 'O21', 'O23','O24', 'G21', 'P07', 'O26' ) AND CNP.FAT_MOVIMENTO_CAPA.DTA_CANCELAMENTO_NOTA IS NULL Mas qdo tento fazer o inverso e trazer apenas os que não foram devolvidos eu troco o IN por NOT IN e todos os registros vem vazios. Espero que alguém possa me ajudar. Obrigado. Emerson

      #92737
      burga
      Participante

        Faça o seguinte, execute esta consulta e veja se traz os registros como deve:

        SELECT
        CNP.FAT_MOVIMENTO_CAPA.NUMERO_NOTA_FISCAL,
        CNP.FAT_MOVIMENTO_CAPA.TIPO_TRANSACAO,
        CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO,
        CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO_ORIGINAL
        FROM
        CNP.FAT_MOVIMENTO_CAPA
        WHERE
        CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO NOT IN (
        SELECT
        CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO_ORIGINAL
        FROM
        CNP.FAT_MOVIMENTO_CAPA );

        Depois você vai acrescentando o restante das condições uma a uma e verificando se está trazendo corretamente os registros. Pois o erro não parece estar na parte do NOT IN.

        Outra coisa, acho que você ja deve ter feito isto, é verificar se realmente deve retornal algum registro nesta consulta com o NOT IN… Se ainda assim não encontrar erros, é bom rever as regras de negócios do seu sistema, se é isto mesmo que você passou aqui no fórum.

        #92739
        edgf
        Participante

          Puxa eu fiz os testes solicitados mas infelizmente não me trouxe registros nenhum.

          Com relação a outra observação postada.., realmente existem registros para serem buscados.

          De qqer forma ainda penso que para esse caso tavez o NOT IN não seja a melhor função a utilizar.

          Bom eu consegui resolver meu problema na programação do sistema, (gambiarra – faz parte ‘rs’).

          Obrigado pela ajuda!

          #92743
          burga
          Participante

            Agora me veio à cabeça… Apesar de você já ter resolvido seu problema, o erro provavelmente está porque você não elimina CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO_ORIGINAL nulos em sua subquery…

            O correto seria na subquery do NOT IN você colocar a condição CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO_ORIGINAL IS NOT NULL:

            SELECT
            CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO_ORIGINAL
            FROM
            CNP.FAT_MOVIMENTO_CAPA
            WHERE
            CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO_ORIGINAL IS NOT NULL

            Desculpa não ter visto isso antes… rs!

            #92744
            edgf
            Participante

              Puxa valeu pela dica!

              Funcô mesmo…, obrigado!!!!!!

            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.