Usuário com melhor resposta
Variaveis into

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
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
- Sugerido como Resposta Junior Galvão - MVPMVP terça-feira, 12 de fevereiro de 2019 12:13
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
- Sugerido como Resposta Junior Galvão - MVPMVP terça-feira, 12 de fevereiro de 2019 12:13
-
-
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
-
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]
-
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 -
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]
-
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
-
-
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
-
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]
-
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
-
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]
-