none
Variaveis into RRS feed

  • Pergunta

  • Boa tarde

    Amigos do Forum, gostaria de uma ajuda, ao executar minha procedure obtenho a mensagem de erro abaixo:

    Mensagem 16924, Nível 16, Estado 1, Procedimento uspComissaoPorRecebimento, Linha 131
    Cursorfetch: The number of variables declared in the INTO list must match that of selected columns.

    Procedure abaixo:

     
    ALTER PROCEDURE [dbo].uspComissaoPorRecebimento @vDataInicial   DATETIME,   @vDataFinal DATETIME  
    
    
    AS  
    BEGIN  
      
    	DECLARE		@vCodigoVendedor   VARCHAR(7), 
    	            @vNomeVendNome     VARCHAR(40), 
    	            @vNumeroNF         VARCHAR(10), 
    	            @vDataEmissao      DATETIME,  
    	            @vCodigoEmpresa    VARCHAR(20), 
    	            @vNomeEmpresa      VARCHAR(100),
    	            @vVendedorPrincipal  VARCHAR(5),
    	            @vFaixaComissao    NUMERIC(24,9),  
    				@vCodigoProduto    VARCHAR(30),  
    	            @vCodigoModelo    VARCHAR(5),  
    				@vCodigoSerie    VARCHAR(3),  
    				@vCodigoNumero    VARCHAR(10), 		        
            
    				@vQuantidade    NUMERIC(24,9),  
    				@vValor      NUMERIC(24,9),  
    				@vValorComST    NUMERIC(24,9),  
    				@vValorComIPI    NUMERIC(24,9),  
    				@vValorTotal    NUMERIC(24,9),  
         
    				@vExisteDescontoZFM   INT,  
    				@vPercentualDescontoZFM  NUMERIC(24,9),  
    				@vPercentualDescontoICMS NUMERIC(24,9),  
    				@vPercentualDescontoPIS  NUMERIC(24,9),  
    				@vPercentualDescontoCOFINS NUMERIC(24,9),  
            
    			    @vExisteVendas    INT,  
         
    			    @vExisteDevParcial   INT,  
    			    @vValorDevParcial   NUMERIC(24,9),  
    			    @vQuantidadeDevParcial  NUMERIC(24,9)  
    			   
      
    	DECLARE   @vTabelaDados TABLE (CodigoVendedor   VARCHAR(7), 
    	                               NomeVendNome     VARCHAR(40),  	                               
    	                               NumeroNF         VARCHAR(10),	                                 
    	                               DataEmissao      DATETIME,	                               
    	                               CodigoEmpresa    VARCHAR(20),	                                
    	                               NomeEmpresa      VARCHAR(100),
    	                               VendedorPrincipal  VARCHAR(5),	                               
    	                               FaixaComissao    NUMERIC(24,9),  
    	                               CodigoProduto    VARCHAR(30),	                               	                               
    	                               CodigoModelo  VARCHAR(5),  
    								   CodigoSerie   VARCHAR(3),  
    								   CodigoNumero  VARCHAR(10),  								   					                 	                               	              	                               	  																	
    							   	   
    							   	   Quantidade   NUMERIC(24,9),  
    								   Valor    NUMERIC(24,9),  
    								   ValorComST   NUMERIC(24,9),  
    								   ValorComIPI   NUMERIC(24,9),  
    								   ValorTotal   NUMERIC(24,9))  
    									
    									
      
    	 SELECT   @vQuantidade    = NULL,  
    			  @vValor      = NULL,  
                  @vValorComST    = NULL,  
                  @vValorComIPI    = NULL,  
                  @vValorTotal    = NULL,  
                  @vExisteDescontoZFM   = NULL,  
                  @vPercentualDescontoZFM  = NULL,  
                  @vPercentualDescontoICMS = NULL,  
                  @vPercentualDescontoPIS  = NULL,  
                  @vPercentualDescontoCOFINS = NULL,  
                  @vExisteVendas    = 0,  
                  @vExisteDevParcial   = 0,  
                  @vValorDevParcial   = NULL,  
                  @vQuantidadeDevParcial  = NULL  
       
    	 DECLARE CURSOR_DOCUMENTO_NOTAS CURSOR STATIC LOCAL FOR  
    	 	 		 
    			 SELECT	
    					 V.VENDCOD, 
    					 V.VENDNOME, 
    					 NF.NFNUM, 
    					 NF.NFDATAEMIS, 
    					 E.ENTCOD, 
    					 E.ENTNOME,
    				CAST(FN.FXANIVPERCCOMISA AS NUMERIC(15,2)) PERCENTUALCOMISSAO,
    				SUM(INF.ITNFVALTOT) AS BASECOMISSAO, 
    				SUM((INF.ITNFVALTOT) * (FN.FXANIVPERCCOMISA / 100)) AS VALORCOMISSAO, VE.VENDENTPRINC
    			 FROM	
    					ITEM_NF INF WITH(NOLOCK),
    					NOTA_FISCAL NF WITH(NOLOCK),
    					VENDEDOR V WITH(NOLOCK),
    					NAT_OPERACAO NOP WITH(NOLOCK),
    					ENTIDADE E WITH(NOLOCK),
    					CIDADE C WITH(NOLOCK),
    					NIVEL N WITH(NOLOCK),
    					FAIXA_NIVEL FN WITH(NOLOCK),
    					FAIXA F WITH(NOLOCK),
    					PRODUTO P WITH(NOLOCK),
    					VEND_ENT VE WITH(NOLOCK)
    			 WHERE	
    				   NF.NFDATAEMIS >= @vDataInicial
    			 AND   NF.NFDATAEMIS <= @vDataFinal
    			 AND   P.MARCAPRODCOD = '1'
    			 AND   NF.NFCANCELADA = 'Não'
    			 AND   NOP.NATOPENTRARELVENDA = 'Sim'
    			 AND   INF.EMPCOD = NF.EMPCOD
    			 AND   INF.CTRLDFMODFORM = NF.CTRLDFMODFORM
    			 AND   INF.CTRLDFSERIE = NF.CTRLDFSERIE
    			 AND   INF.NFNUM = NF.NFNUM
    			 AND   NF.NFNATOPPROD = NOP.NATOPCODESTR
    			 AND   NF.ENTCOD = E.ENTCOD
    			 AND   E.CIDCOD = C.CIDCOD
    			 AND   E.NIVCOD = N.NIVCOD
    			 AND   N.NIVCOD = FN.NIVCOD
    			 AND   FN.FXACOD = F.FXACOD
    			 AND   F.FXACOD = V.FXACOD
    			 AND   E.ENTCOD = VE.ENTCOD
    			 AND   V.VENDCOD = VE.VENDCOD
    			 AND   P.PRODCODESTR = INF.PRODCODESTR
    			 AND   NF.NFNum = '0000155269'
    
    			GROUP BY V.VENDCOD, V.VENDNOME, NF.NFNUM, NF.NFDATAEMIS, E.ENTCOD, E.ENTNOME, FN.FXANIVPERCCOMISA,VE.VENDENTPRINC
    	 		 	 	 		 	 	 	 	 
       
    	OPEN CURSOR_DOCUMENTO_NOTAS  
    	FETCH CURSOR_DOCUMENTO_NOTAS  
    		
    		INTO @vCodigoVendedor,@vNomeVendNome, @vNumeroNF, @vDataEmissao, @vCodigoEmpresa,@vCodigoEmpresa, @vNomeEmpresa,
    		     @vVendedorPrincipal, @vFaixaComissao, @vCodigoProduto,@vCodigoModelo, @vCodigoSerie, @vCodigoNumero,			  
    			 @vQuantidade, @vValor, @vValorComST, @vValorComIPI, @vValorTotal
                 
       
    	WHILE (@@FETCH_STATUS = 0)  
    			BEGIN  
       
    			/* Tratamento referente às devoluções parciais */  
      
    			SELECT  @vExisteDevParcial = COUNT(1)  
    			  FROM  ITEM_MOV_ESTQ IME WITH(NOLOCK),  
                        MOV_ESTQ ME WITH(NOLOCK)  
                 WHERE  IME.TipoLancCod IN ('E0000489', 'E0000211', 'E0000561')  
                   AND  IME.EmpCod = @vCodigoEmpresa  
                   AND  IME.ItMovEstqDevDocEspec = @vCodigoModelo  
                   AND  IME.ItMovEstqDevDocSerie = @vCodigoSerie  
                   AND  IME.ItMovEstqDevDocNum = @vCodigoNumero  
                   AND  IME.ProdCodEstr = @vCodigoProduto  
                   AND  ME.MovEstq = 'Não'  
    			   AND  IME.EmpCod = ME.EmpCod  
    			   AND  IME.MovEstqChv = ME.MovEstqChv  
      
    		IF (@vExisteDevParcial > 0)  
    			BEGIN  
      
    			SELECT @vValorDevParcial = SUM(IME.ItMovEstqValProd),  
    				   @vQuantidadeDevParcial = SUM(IME.ItMovEstqQtdCalcProd)  
    			  FROM ITEM_MOV_ESTQ IME WITH(NOLOCK),  
                       MOV_ESTQ ME WITH(NOLOCK)  
                 WHERE IME.TipoLancCod IN ('E0000489', 'E0000211', 'E0000561')  
    			   AND IME.EmpCod = @vCodigoEmpresa  
    			   AND IME.ItMovEstqDevDocEspec = @vCodigoModelo  
    	           AND IME.ItMovEstqDevDocSerie = @vCodigoSerie  
                   AND IME.ItMovEstqDevDocNum = @vCodigoNumero  
                   AND IME.ProdCodEstr = @vCodigoProduto  
                   AND ME.MovEstq = 'Não'  
                   AND IME.EmpCod = ME.EmpCod  
                   AND IME.MovEstqChv = ME.MovEstqChv  
      
    		SELECT @vValor = @vValor - @vValorDevParcial  
    		SELECT @vValorComST = @vValorComST - @vValorDevParcial  
    		SELECT @vValorComIPI = @vValorComIPI - @vValorDevParcial  
    		SELECT @vValorTotal = @vValorTotal - @vValorDevParcial  
    		SELECT @vQuantidade = @vQuantidade - @vQuantidadeDevParcial  
      
    		END  
        
    			/* Tratamento referente aos descontos da ZFM */  
    		IF (@vExisteDescontoZFM > 0)  
    			BEGIN  
      
    			SELECT @vPercentualDescontoZFM = @vPercentualDescontoICMS + @vPercentualDescontoPIS + @vPercentualDescontoCOFINS  
      			SELECT @vValor = ROUND(@vValor - (@vValor * @vPercentualDescontoZFM), 2)  
    			SELECT @vValorComST = ROUND(@vValorComST - (@vValorComST * @vPercentualDescontoZFM), 2)  
    			SELECT @vValorComIPI = ROUND(@vValorComIPI - (@vValorComIPI * @vPercentualDescontoZFM), 2)  
    			SELECT @vValorTotal = ROUND(@vValorTotal - (@vValorTotal * @vPercentualDescontoZFM), 2)  
      
    		END  
        
    			SELECT @vExisteVendas = COUNT(1)  
    			  FROM @vTabelaDados  
                 WHERE CodigoEmpresa = @vCodigoEmpresa  
                   AND  CodigoModelo = @vCodigoModelo  
                   AND  CodigoSerie = @vCodigoSerie  
                   AND  CodigoNumero = @vCodigoNumero  
        
    		IF (@vExisteVendas = 0)  
    			BEGIN  
        
    		INSERT  INTO @vTabelaDados (CodigoVendedor,NomeVendNome, NumeroNF, DataEmissao, CodigoEmpresa, NomeEmpresa, VendedorPrincipal, FaixaComissao, CodigoProduto,CodigoModelo, CodigoSerie, CodigoNumero,Quantidade, Valor, ValorComST, ValorComIPI, ValorTotal)		
    			  VALUES (@vCodigoVendedor,@vNomeVendNome, @vNumeroNF, @vDataEmissao, @vCodigoEmpresa, @vNomeEmpresa, @vVendedorPrincipal, @vFaixaComissao, @vCodigoProduto,@vCodigoModelo, @vCodigoSerie, @vCodigoNumero,@vQuantidade,@vValor, @vValorComST, @vValorComIPI, @vValorTotal)  
      
    		END  
    			ELSE  
    		BEGIN  
        
    			UPDATE @vTabelaDados  
    			  SET  Quantidade = Quantidade + @vQuantidade,   
    				   Valor = Valor + @vValor,   
                       ValorComST = ValorComST + @vValorComST,   
    				   ValorComIPI = ValorComIPI + @vValorComIPI,   
                       ValorTotal = ValorTotal + @vValorTotal  
    			WHERE CodigoEmpresa = @vCodigoEmpresa  
    			  AND CodigoModelo = @vCodigoModelo  
    			  AND CodigoSerie = @vCodigoSerie  
    			  AND CodigoNumero = @vCodigoNumero  
    		END  
         
    		SELECT @vQuantidade    = NULL,  
    			   @vValor      = NULL,  
                   @vValorComST    = NULL,  
                   @vValorComIPI    = NULL,  
                   @vValorTotal    = NULL,  
                   @vExisteDescontoZFM   = NULL,  
                   @vPercentualDescontoZFM  = NULL,  
                   @vPercentualDescontoICMS = NULL,  
                   @vPercentualDescontoPIS  = NULL,  
                   @vPercentualDescontoCOFINS = NULL,  
                   @vExisteVendas    = 0,  
                   @vExisteDevParcial   = 0,  
                   @vValorDevParcial   = NULL,  
                   @vQuantidadeDevParcial  = NULL  
       
    		FETCH CURSOR_DOCUMENTO_NOTAS  
    		 INTO @vCodigoVendedor,@vNomeVendNome, @vNumeroNF, @vDataEmissao, @vCodigoEmpresa, @vNomeEmpresa, @vVendedorPrincipal,  @vFaixaComissao, @vCodigoProduto,@vCodigoModelo, @vCodigoSerie, 
    		      @vCodigoNumero, @vQuantidade, @vValor, @vValorComST, @vValorComIPI, @vValorTotal,  
                  @vExisteDescontoZFM,@vPercentualDescontoZFM, @vPercentualDescontoICMS, @vPercentualDescontoPIS, @vPercentualDescontoCOFINS      
                  
     
                            
                                                                                           
    		END  
       
    	CLOSE  CURSOR_DOCUMENTO_NOTAS  
    	DEALLOCATE CURSOR_DOCUMENTO_NOTAS  
       
    		SELECT 
    			   CodigoVendedor, 
    		       NomeVendNome, 
    		       NumeroNF,
    		       DataEmissao,
    		       CodigoEmpresa,
    		       NomeEmpresa,
    		       VendedorPrincipal,
    		       FaixaComissao
    		       
    		FROM @vTabelaDados  
     
     
    
      
    END

    segunda-feira, 11 de fevereiro de 2019 13:40

Respostas

  • Olá, boa tarde..

    Veja, você está decalrando um CURSOR com nove elementos:

    		 SELECT	
    					 V.VENDCOD, 
    					 V.VENDNOME, 
    					 NF.NFNUM, 
    					 NF.NFDATAEMIS, 
    					 E.ENTCOD, 
    					 E.ENTNOME,
    				CAST(FN.FXANIVPERCCOMISA AS NUMERIC(15,2)) PERCENTUALCOMISSAO,
    				SUM(INF.ITNFVALTOT) AS BASECOMISSAO, 
    				SUM((INF.ITNFVALTOT) * (FN.FXANIVPERCCOMISA / 100)) AS VALORCOMISSAO, VE.VENDENTPRINC

    E, está utilizando mais de 20 elementos na cláusula INTO:

    FETCH CURSOR_DOCUMENTO_NOTAS  
    		 INTO @vCodigoVendedor,@vNomeVendNome, @vNumeroNF, @vDataEmissao, @vCodigoEmpresa, @vNomeEmpresa, @vVendedorPrincipal,  @vFaixaComissao, @vCodigoProduto,@vCodigoModelo, @vCodigoSerie, 
    		      @vCodigoNumero, @vQuantidade, @vValor, @vValorComST, @vValorComIPI, @vValorTotal,  
                  @vExisteDescontoZFM,@vPercentualDescontoZFM, @vPercentualDescontoICMS, @vPercentualDescontoPIS, @vPercentualDescontoCOFINS      
                  

    Você deve utilizar o mesmo número no SELECT e no INTO,, este é o problema.

    Qualquer coisa, estamos por aqui.

    Se solucionou, não esqueça de marcar como resposta obrigadio.

    Abs

    segunda-feira, 11 de fevereiro de 2019 15:51

Todas as Respostas

  • Olá, boa tarde..

    Veja, você está decalrando um CURSOR com nove elementos:

    		 SELECT	
    					 V.VENDCOD, 
    					 V.VENDNOME, 
    					 NF.NFNUM, 
    					 NF.NFDATAEMIS, 
    					 E.ENTCOD, 
    					 E.ENTNOME,
    				CAST(FN.FXANIVPERCCOMISA AS NUMERIC(15,2)) PERCENTUALCOMISSAO,
    				SUM(INF.ITNFVALTOT) AS BASECOMISSAO, 
    				SUM((INF.ITNFVALTOT) * (FN.FXANIVPERCCOMISA / 100)) AS VALORCOMISSAO, VE.VENDENTPRINC

    E, está utilizando mais de 20 elementos na cláusula INTO:

    FETCH CURSOR_DOCUMENTO_NOTAS  
    		 INTO @vCodigoVendedor,@vNomeVendNome, @vNumeroNF, @vDataEmissao, @vCodigoEmpresa, @vNomeEmpresa, @vVendedorPrincipal,  @vFaixaComissao, @vCodigoProduto,@vCodigoModelo, @vCodigoSerie, 
    		      @vCodigoNumero, @vQuantidade, @vValor, @vValorComST, @vValorComIPI, @vValorTotal,  
                  @vExisteDescontoZFM,@vPercentualDescontoZFM, @vPercentualDescontoICMS, @vPercentualDescontoPIS, @vPercentualDescontoCOFINS      
                  

    Você deve utilizar o mesmo número no SELECT e no INTO,, este é o problema.

    Qualquer coisa, estamos por aqui.

    Se solucionou, não esqueça de marcar como resposta obrigadio.

    Abs

    segunda-feira, 11 de fevereiro de 2019 15:51
  • Bom dia

    Herbert!

    Você poderia fazer um exemplo de como deveria ficar, eu tentei deixando menos campos mesmo assim ao executar é apresentado a mensagem de erro.

    terça-feira, 12 de fevereiro de 2019 09:14
  • Bom dia

    Fiz algumas alterações e retornou os dados sem erro porém não foi deduzido do campo baseComissão e valorComissão o Tratamento referente às devoluções parciais, consegue ajudar? abaixo proedure 

     
    ALTER PROCEDURE [dbo].[uspComissaoPorRecebimento] @vDataInicial   DATETIME,   @vDataFinal DATETIME  
    
    
    AS  
    BEGIN  
      
    	DECLARE		@vCodigoVendedor   VARCHAR(7), 
    	            @vNomeVendNome     VARCHAR(40), 
    	            @vNumeroNF         VARCHAR(10), 
    	            @vDataEmissao      DATETIME,  
    	            @vCodigoEmpresa    VARCHAR(20), 
    	            @vNomeEmpresa      VARCHAR(100),	            
    	            @vFaixaComissao    NUMERIC(24,9),
    	            @vValorTotal   NUMERIC(24,9),
    	            @vVendedorPrincipal  VARCHAR(5),
    	              
    				@vCodigoProduto    VARCHAR(30),  
    				 
    	            @vCodigoModelo    VARCHAR(5),  
    				@vCodigoSerie    VARCHAR(3),  
    				@vCodigoNumero    VARCHAR(10), 		        
            
    				@vQuantidade    NUMERIC(24,9),  
    				@vValor      NUMERIC(24,9),  
    				@vValorComST    NUMERIC(24,9),  
    				@vValorComIPI    NUMERIC(24,9),  				
         
    				@vExisteDescontoZFM   INT,  
    				@vPercentualDescontoZFM  NUMERIC(24,9),  
    				@vPercentualDescontoICMS NUMERIC(24,9),  
    				@vPercentualDescontoPIS  NUMERIC(24,9),  
    				@vPercentualDescontoCOFINS NUMERIC(24,9),  
            
    			    @vExisteVendas    INT,  
         
    			    @vExisteDevParcial   INT,  
    			    @vValorDevParcial   NUMERIC(24,9),  
    			    @vQuantidadeDevParcial  NUMERIC(24,9)  
    			   
      
    	DECLARE   @vTabelaDados TABLE (CodigoVendedor   VARCHAR(7), 
    	                               NomeVendNome     VARCHAR(40),  	                               
    	                               NumeroNF         VARCHAR(10),	                                 
    	                               DataEmissao      DATETIME,	                               
    	                               CodigoEmpresa    VARCHAR(20),	                                
    	                               NomeEmpresa      VARCHAR(100),
    	                               FaixaComissao    NUMERIC(24,9),  
    	                               ValorTotal       NUMERIC(24,9),
    	                               Valor            NUMERIC(24,9),  
    	                               VendedorPrincipal  VARCHAR(5),	                               
    	                               
    	                               CodigoProduto    VARCHAR(30),	                               	                               
    	                               CodigoModelo  VARCHAR(5),  
    								   CodigoSerie   VARCHAR(3),  
    								   CodigoNumero  VARCHAR(10),  								   					                 	                               	              	                               	  																	
    							   	   
    							   	   Quantidade   NUMERIC(24,9),  								 
    								   ValorComST   NUMERIC(24,9),  
    								   ValorComIPI   NUMERIC(24,9))  
    									
    
    									
      
    	 SELECT   @vQuantidade    = NULL,  
    			  @vValor      = NULL,  
                  @vValorComST    = NULL,  
                  @vValorComIPI    = NULL,  
                  @vValorTotal    = NULL,  
                  @vExisteDescontoZFM   = NULL,  
                  @vPercentualDescontoZFM  = NULL,  
                  @vPercentualDescontoICMS = NULL,  
                  @vPercentualDescontoPIS  = NULL,  
                  @vPercentualDescontoCOFINS = NULL,  
                  @vExisteVendas    = 0,  
                  @vExisteDevParcial   = 0,  
                  @vValorDevParcial   = NULL,  
                  @vQuantidadeDevParcial  = NULL  
       
    	 DECLARE CURSOR_DOCUMENTO_NOTAS CURSOR STATIC LOCAL FOR  	 	 	
    	 
    			 SELECT	
    					 V.VENDCOD, 
    					 V.VENDNOME, 
    					 NF.NFNUM, 
    					 NF.NFDATAEMIS, 
    					 E.ENTCOD, 
    					 E.ENTNOME,
    					 CAST(FN.FXANIVPERCCOMISA AS NUMERIC(15,2)),
    					 SUM(INF.ITNFVALTOT) AS BaseComissao,					
    					 SUM((INF.ITNFVALTOT) * (FN.FXANIVPERCCOMISA / 100)),
    					  VE.VENDENTPRINC
    				
    			 FROM	
    					ITEM_NF INF WITH(NOLOCK),
    					NOTA_FISCAL NF WITH(NOLOCK),
    					VENDEDOR V WITH(NOLOCK),
    					NAT_OPERACAO NOP WITH(NOLOCK),
    					ENTIDADE E WITH(NOLOCK),
    					CIDADE C WITH(NOLOCK),
    					NIVEL N WITH(NOLOCK),
    					FAIXA_NIVEL FN WITH(NOLOCK),
    					FAIXA F WITH(NOLOCK),
    					PRODUTO P WITH(NOLOCK),
    					VEND_ENT VE WITH(NOLOCK)
    			 WHERE	
    				   NF.NFDATAEMIS >= @vDataInicial
    			 AND   NF.NFDATAEMIS <= @vDataFinal
    			 AND   P.MARCAPRODCOD = '1'
    			 AND   NF.NFCANCELADA = 'Não'
    			 AND   NOP.NATOPENTRARELVENDA = 'Sim'
    			 AND   INF.EMPCOD = NF.EMPCOD
    			 AND   INF.CTRLDFMODFORM = NF.CTRLDFMODFORM
    			 AND   INF.CTRLDFSERIE = NF.CTRLDFSERIE
    			 AND   INF.NFNUM = NF.NFNUM
    			 AND   NF.NFNATOPPROD = NOP.NATOPCODESTR
    			 AND   NF.ENTCOD = E.ENTCOD
    			 AND   E.CIDCOD = C.CIDCOD
    			 AND   E.NIVCOD = N.NIVCOD
    			 AND   N.NIVCOD = FN.NIVCOD
    			 AND   FN.FXACOD = F.FXACOD
    			 AND   F.FXACOD = V.FXACOD
    			 AND   E.ENTCOD = VE.ENTCOD
    			 AND   V.VENDCOD = VE.VENDCOD
    			 AND   P.PRODCODESTR = INF.PRODCODESTR
    			 AND   NF.NFNum = '0000155269'
    
    			GROUP BY V.VENDCOD, V.VENDNOME, NF.NFNUM, NF.NFDATAEMIS, E.ENTCOD, E.ENTNOME, FN.FXANIVPERCCOMISA,VE.VENDENTPRINC
    	 		 	 	 		 	 	 	 	 
       
    	OPEN CURSOR_DOCUMENTO_NOTAS  
    	FETCH CURSOR_DOCUMENTO_NOTAS  
    		
    		INTO @vCodigoVendedor,@vNomeVendNome, @vNumeroNF, @vDataEmissao, @vCodigoEmpresa, @vNomeEmpresa, @vFaixaComissao, @vValorTotal,@vValor, @vVendedorPrincipal 
    		     
       
    	WHILE (@@FETCH_STATUS = 0)  
    			BEGIN  
       
    			/* Tratamento referente às devoluções parciais */  
      
    			SELECT  @vExisteDevParcial = COUNT(1)  
    			  FROM  ITEM_MOV_ESTQ IME WITH(NOLOCK),  
                        MOV_ESTQ ME WITH(NOLOCK)  
                 WHERE  IME.TipoLancCod IN ('E0000489', 'E0000211', 'E0000561')  
                   AND  IME.EmpCod = @vCodigoEmpresa  
                   AND  IME.ItMovEstqDevDocEspec = @vCodigoModelo  
                   AND  IME.ItMovEstqDevDocSerie = @vCodigoSerie  
                   AND  IME.ItMovEstqDevDocNum = @vCodigoNumero  
                   AND  IME.ProdCodEstr = @vCodigoProduto  
                   AND  ME.MovEstq = 'Não'  
    			   AND  IME.EmpCod = ME.EmpCod  
    			   AND  IME.MovEstqChv = ME.MovEstqChv  
      
    		IF (@vExisteDevParcial > 0)  
    			BEGIN  
      
    			SELECT @vValorDevParcial = SUM(IME.ItMovEstqValProd),  
    				   @vQuantidadeDevParcial = SUM(IME.ItMovEstqQtdCalcProd)  
    			  FROM ITEM_MOV_ESTQ IME WITH(NOLOCK),  
                       MOV_ESTQ ME WITH(NOLOCK)  
                 WHERE IME.TipoLancCod IN ('E0000489', 'E0000211', 'E0000561')  
    			   AND IME.EmpCod = @vCodigoEmpresa  
    			   AND IME.ItMovEstqDevDocEspec = @vCodigoModelo  
    	           AND IME.ItMovEstqDevDocSerie = @vCodigoSerie  
                   AND IME.ItMovEstqDevDocNum = @vCodigoNumero  
                   AND IME.ProdCodEstr = @vCodigoProduto  
                   AND ME.MovEstq = 'Não'  
                   AND IME.EmpCod = ME.EmpCod  
                   AND IME.MovEstqChv = ME.MovEstqChv  
      
    		SELECT @vValor = @vValor - @vValorDevParcial  
    		SELECT @vValorComST = @vValorComST - @vValorDevParcial  
    		SELECT @vValorComIPI = @vValorComIPI - @vValorDevParcial  
    		SELECT @vValorTotal = @vValorTotal - @vValorDevParcial  
    		SELECT @vQuantidade = @vQuantidade - @vQuantidadeDevParcial  
      
    		END  
        
    			/* Tratamento referente aos descontos da ZFM */  
    		IF (@vExisteDescontoZFM > 0)  
    			BEGIN  
      
    			SELECT @vPercentualDescontoZFM = @vPercentualDescontoICMS + @vPercentualDescontoPIS + @vPercentualDescontoCOFINS  
      			SELECT @vValor = ROUND(@vValor - (@vValor * @vPercentualDescontoZFM), 2)  
    			SELECT @vValorComST = ROUND(@vValorComST - (@vValorComST * @vPercentualDescontoZFM), 2)  
    			SELECT @vValorComIPI = ROUND(@vValorComIPI - (@vValorComIPI * @vPercentualDescontoZFM), 2)  
    			SELECT @vValorTotal = ROUND(@vValorTotal - (@vValorTotal * @vPercentualDescontoZFM), 2)  
      
    		END  
        
    			SELECT @vExisteVendas = COUNT(1)  
    			  FROM @vTabelaDados  
                 WHERE CodigoEmpresa = @vCodigoEmpresa  
                   AND  CodigoModelo = @vCodigoModelo  
                   AND  CodigoSerie = @vCodigoSerie  
                   AND  CodigoNumero = @vCodigoNumero  
        
    		IF (@vExisteVendas = 0)  
    			BEGIN  
        
    		INSERT  INTO @vTabelaDados (CodigoVendedor,NomeVendNome, NumeroNF, DataEmissao, CodigoEmpresa, NomeEmpresa,FaixaComissao,ValorTotal, Valor, VendedorPrincipal )		
    			  VALUES (@vCodigoVendedor,@vNomeVendNome, @vNumeroNF, @vDataEmissao, @vCodigoEmpresa, @vNomeEmpresa, @vFaixaComissao, @vValorTotal,@vValor, @vVendedorPrincipal )  
    			                     
      
    		END  
    			ELSE  
    		BEGIN  
        
    			UPDATE @vTabelaDados  
    			  SET  Quantidade = Quantidade + @vQuantidade,   
    				   Valor = Valor + @vValor,   
                       ValorComST = ValorComST + @vValorComST,   
    				   ValorComIPI = ValorComIPI + @vValorComIPI,   
                       ValorTotal = ValorTotal + @vValorTotal  
    			WHERE CodigoEmpresa = @vCodigoEmpresa  
    			  AND CodigoModelo = @vCodigoModelo  
    			  AND CodigoSerie = @vCodigoSerie  
    			  AND CodigoNumero = @vCodigoNumero  
    		END  
         
    		SELECT @vQuantidade    = NULL,  
    			   @vValor      = NULL,  
                   @vValorComST    = NULL,  
                   @vValorComIPI    = NULL,  
                   @vValorTotal    = NULL,  
                   @vExisteDescontoZFM   = NULL,  
                   @vPercentualDescontoZFM  = NULL,  
                   @vPercentualDescontoICMS = NULL,  
                   @vPercentualDescontoPIS  = NULL,  
                   @vPercentualDescontoCOFINS = NULL,  
                   @vExisteVendas    = 0,  
                   @vExisteDevParcial   = 0,  
                   @vValorDevParcial   = NULL,  
                   @vQuantidadeDevParcial  = NULL  
       
    		FETCH CURSOR_DOCUMENTO_NOTAS  
    		 INTO @vCodigoVendedor,@vNomeVendNome, @vNumeroNF, @vDataEmissao, @vCodigoEmpresa, @vNomeEmpresa, @vFaixaComissao,@vValorTotal, @vValor, @vVendedorPrincipal
                            
                                                                                           
    		 END  
       
    	CLOSE  CURSOR_DOCUMENTO_NOTAS  
    	DEALLOCATE CURSOR_DOCUMENTO_NOTAS 
    	 
       
    		SELECT 
    			   CodigoVendedor, 
    		       NomeVendNome, 
    		       NumeroNF,
    		       DataEmissao,
    		       CodigoEmpresa,
    		       NomeEmpresa,		  
    		       CAST(FaixaComissao AS NUMERIC(15,2)) FaixaComissao,
    		       CAST(ValorTotal AS NUMERIC(15,2)) BaseComissao,
    		       Valor As ValorComissao,
    		       VendedorPrincipal
    		       
    		FROM @vTabelaDados  
     
        ORDER BY DataEmissao,  
                 CodigoVendedor, 
                 NumeroNF
      
    END

     
    terça-feira, 12 de fevereiro de 2019 11:17
  • Leandro,

    Você se referi a este tratamento:

       SELECT
    V
    .VENDCOD,
    V
    .VENDNOME,
    NF
    .NFNUM,
    NF
    .NFDATAEMIS,
    E
    .ENTCOD,
    E
    .ENTNOME,
    CAST
    (FN.FXANIVPERCCOMISA AS NUMERIC(15,2)),
    SUM
    (INF.ITNFVALTOT)AS BaseComissao,
    SUM
    ((INF.ITNFVALTOT) * (FN.FXANIVPERCCOMISA / 100))


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 12 de fevereiro de 2019 12:16
  • Bom dia

    Junior!

    Eu preciso que caso existe uma devolução seja feito o calculo das colunas BaseComissao e ValorComissao subtraindo o valor devolvido, o tratamento referente a devolução é este abaixo porém não sei o que estou fazendo de errado pois não está subtraindo o valor.

    /* Tratamento referente às devoluções parciais */  
      
    SELECT  @vExisteDevParcial = COUNT(1)  
      FROM  ITEM_MOV_ESTQ IME WITH(NOLOCK),  
                        MOV_ESTQ ME WITH(NOLOCK)  
                 WHERE  IME.TipoLancCod IN ('E0000489', 'E0000211', 'E0000561')  
                   AND  IME.EmpCod = @vCodigoEmpresa  
                   AND  IME.ItMovEstqDevDocEspec = @vCodigoModelo  
                   AND  IME.ItMovEstqDevDocSerie = @vCodigoSerie  
                   AND  IME.ItMovEstqDevDocNum = @vCodigoNumero  
                   AND  IME.ProdCodEstr = @vCodigoProduto  
                   AND  ME.MovEstq = 'Não'  
       AND  IME.EmpCod = ME.EmpCod  
       AND  IME.MovEstqChv = ME.MovEstqChv  
      
    IF (@vExisteDevParcial > 0)  
    BEGIN  
      
    SELECT @vValorDevParcial = SUM(IME.ItMovEstqValProd),  
       @vQuantidadeDevParcial = SUM(IME.ItMovEstqQtdCalcProd)  
      FROM ITEM_MOV_ESTQ IME WITH(NOLOCK),  
                       MOV_ESTQ ME WITH(NOLOCK)  
                 WHERE IME.TipoLancCod IN ('E0000489', 'E0000211', 'E0000561')  
       AND IME.EmpCod = @vCodigoEmpresa  
       AND IME.ItMovEstqDevDocEspec = @vCodigoModelo  
               AND IME.ItMovEstqDevDocSerie = @vCodigoSerie  
                   AND IME.ItMovEstqDevDocNum = @vCodigoNumero  
                   AND IME.ProdCodEstr = @vCodigoProduto  
                   AND ME.MovEstq = 'Não'  
                   AND IME.EmpCod = ME.EmpCod  
                   AND IME.MovEstqChv = ME.MovEstqChv  
      
    SELECT @vValor = @vValor - @vValorDevParcial  
    SELECT @vValorComST = @vValorComST - @vValorDevParcial  
    SELECT @vValorComIPI = @vValorComIPI - @vValorDevParcial  
    SELECT @vValorTotal = @vValorTotal - @vValorDevParcial  
    SELECT @vQuantidade = @vQuantidade - @vQuantidadeDevParcial  
      
    END  

    terça-feira, 12 de fevereiro de 2019 12:21
  • Leandro,

    Mas esta condição IF (@vExisteDevParcial > 0) estão sendo atendida? Ou seja, no processamento desta procedure a condição esta sendo verdadeira? 


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 12 de fevereiro de 2019 12:28
  • Leandro,

    Mas esta condição IF (@vExisteDevParcial > 0) estão sendo atendida? Ou seja, no processamento desta procedure a condição esta sendo verdadeira? 


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    Se a condição @vExisteDevParcial > 0 não estiver sendo verdadeira, não vai retornar da maneira que vc. quer realmente !

    Abs

    terça-feira, 12 de fevereiro de 2019 12:49
  • A condição @vExisteDevParcial > 0 é verdadeira não sei porque não está subtraindo o valor 
    terça-feira, 12 de fevereiro de 2019 15:46
  • A condição @vExisteDevParcial > 0 é verdadeira não sei porque não está subtraindo o valor 

    Olha, desculpa a pergunta, mas é que eu não sei qual é o seu nível de conhecimento..  você sabe executar diretamente no SQL Management ?    Se sim, executa passando os parâmetros, e põe uns comandos para mostrar os valores que você está querendo, aí fica mais fácil .. Tem certos códigos, que é necessário debugar para chegar a uma solução..

    Qq. coisa, estamos aqui.

    Abs

    terça-feira, 12 de fevereiro de 2019 16:10
  • Leandro,

    O SQL Server possui um comportamento bem diferente dos demais ambientes de desenvolvimento, bem como, o linguagem Transact-SQL também, eu tive uma situação muito parecida com a sua, no qual a condição estava correta, mas no processamento da minha query a variável necessitava receber novamente um valor inicial.

    Provavelmente no loop de processamento do seu cursor, esta variável @vExisteDevParcial esta recebendo outro valor, o qual faz com que a condição seja falsa.

    Verifique!!!!


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 12 de fevereiro de 2019 17:36
  • Leandro,

    O SQL Server possui um comportamento bem diferente dos demais ambientes de desenvolvimento, bem como, o linguagem Transact-SQL também, eu tive uma situação muito parecida com a sua, no qual a condição estava correta, mas no processamento da minha query a variável necessitava receber novamente um valor inicial.

    Provavelmente no loop de processamento do seu cursor, esta variável @vExisteDevParcial esta recebendo outro valor, o qual faz com que a condição seja falsa.

    Verifique!!!!


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    Olá, ..

    Como eu havia citado, é necessário que seja feito um DEBUG para checar os valores das variáveis...

    Obgd.

    Abs

    terça-feira, 12 de fevereiro de 2019 17:41
  • Leandro,

    O SQL Server possui um comportamento bem diferente dos demais ambientes de desenvolvimento, bem como, o linguagem Transact-SQL também, eu tive uma situação muito parecida com a sua, no qual a condição estava correta, mas no processamento da minha query a variável necessitava receber novamente um valor inicial.

    Provavelmente no loop de processamento do seu cursor, esta variável @vExisteDevParcial esta recebendo outro valor, o qual faz com que a condição seja falsa.

    Verifique!!!!


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    Olá, ..

    Como eu havia citado, é necessário que seja feito um DEBUG para checar os valores das variáveis...

    Obgd.

    Abs


    Concordo.

    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 12 de fevereiro de 2019 17:55
  • Obrigado, 

    A rotina tinha muitas oportunidades de melhoria (não só no cursor),  fiz os ajustes necessários.

    terça-feira, 19 de fevereiro de 2019 10:50