[firebase-br] ENC: Ajuda com Procedure - Calculo + Atualização.
Fasystem - Listas
listas em fasystem.com.br
Ter Jun 21 10:46:43 -03 2011
Creio que você já descobriu o que está errado.
Você atualiza a tabela com as mesmas informações do where do select.
Creio que você precisa de um where baseado no id da linha a ser atualizada.
Outra coisa: muito cuidado com valores null nos teus cálculos. Pois se isso
acontecer não será calculado nada.
Eu sempre uso o coalesce para garantir que haverá o cálculo.
[ ]'s
Jose
-----Mensagem original-----
De: Diego Maccari [mailto:diegomaccari em ig.com.br]
Enviada em: terça-feira, 21 de junho de 2011 10:36
Para: Fasystem - Listas
Assunto: Re: [firebase-br] Ajuda com Procedure - Calculo + Atualização.
JOSÉ bom dia
Muito Obrigado por ter respondido.
retirei o Suspend mas mesmo assim não deu o resultado desejado a ideia é
atualizar os valores dos créditos de cada um dos registros com base no
calculo da SP
o que está acontecendo é que no momento em que a SP atualiza os rgistros ela
atualiza o valor calculado no ultimo registro para todos os demais, onde
deveria ser individualizado
acredito que o erro esta no UPDATE mas ainda não entendi por que, o WHERE do
UPDATE é o mesmo que uso pra selecionar os dados no SELECT do FOR talvez
seja por isso
a atualização esta sendo feito em todos os registro quando deveria ser feito
um de cada vez.
Alguma DICA ??
-----Mensagem Original-----
From: Fasystem - Listas
Sent: Tuesday, June 21, 2011 10:00 AM
To: 'Diego Maccari' ; 'FireBase'
Subject: RES: [firebase-br] Ajuda com Procedure - Calculo + Atualização.
Se não vai retornar nada não precisa do suspend;
Voce não informou o erro. Pelo menos eu não entendi.
Jose
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Diego Maccari
Enviada em: terça-feira, 21 de junho de 2011 09:30
Para: FireBase
Assunto: [firebase-br] Ajuda com Procedure - Calculo + Atualização.
Bom dia Pessoal
Ainda sou novato em SQL e FB estou tentando criar uma SP para atualizar
alguns compos de uma tabela esta atualização requer um calculo de
proporcionalização de creditos de PIS/COFINS
Quando executo a SP ela calcula o valor do creditos e atualiza todos os
registros com base no calculo realizado na 1º linha. Alguém poderia me dar
uma dica de onde estou errando.
Segue DDL.
SET TERM ^ ;
CREATE OR ALTER PROCEDURE PROPORCIONA_PISCOFINS_4105 (
PCNPJ VARCHAR(18),
PMES VARCHAR(10),
PANO INTEGER,
PCST_PIS VARCHAR(2),
PCST_COFINS VARCHAR(2),
PPERCENT_EX DECIMAL(18,4) = 0.0000,
PPERCENT_MI DECIMAL(18,4) = 0.0000,
PPERCENT_NT DECIMAL(18,4) = 0.0000)
AS
DECLARE VARIABLE PIS DECIMAL(18,2);
DECLARE VARIABLE PIS_EX DECIMAL(18,2);
DECLARE VARIABLE PIS_MI DECIMAL(18,2);
DECLARE VARIABLE PIS_NT DECIMAL(18,2);
DECLARE VARIABLE COFINS DECIMAL(18,2);
DECLARE VARIABLE COFINS_EX DECIMAL(18,2);
DECLARE VARIABLE COFINS_MI DECIMAL(18,2);
DECLARE VARIABLE COFINS_NT DECIMAL(18,2);
DECLARE VARIABLE ID INTEGER;
DECLARE VARIABLE BASE_CALCULO_PIS DECIMAL(18,3);
DECLARE VARIABLE ALIQUOTA_PIS DECIMAL(18,4);
DECLARE VARIABLE VALOR_PIS DECIMAL(18,2);
DECLARE VARIABLE VALOR_PIS_EXPORTACAO DECIMAL(18,2);
DECLARE VARIABLE VALOR_PIS_MERC_INTERNO DECIMAL(18,2);
DECLARE VARIABLE VALOR_PIS_N_TRIB_INTERNO DECIMAL(18,2);
DECLARE VARIABLE BASE_CALCULO_COFINS DECIMAL(18,3);
DECLARE VARIABLE ALIQUOTA_COFINS DECIMAL(18,4);
DECLARE VARIABLE VALOR_COFINS DECIMAL(18,2);
DECLARE VARIABLE VALOR_COFINS_EXPORTACAO DECIMAL(18,2);
DECLARE VARIABLE VALOR_COFINS_MERC_INTERNO DECIMAL(18,2);
DECLARE VARIABLE VALOR_COFINS_N_TRIB_INTERNO DECIMAL(18,2);
begin
FOR
SELECT
ID, BASE_CALCULO_PIS, ALIQUOTA_PIS, VALOR_PIS, VALOR_PIS_EXPORTACAO,
VALOR_PIS_MERC_INTERNO, VALOR_PIS_N_TRIB_INTERNO, BASE_CALCULO_COFINS,
ALIQUOTA_COFINS, VALOR_COFINS, VALOR_COFINS_EXPORTACAO,
VALOR_COFINS_MERC_INTERNO,
VALOR_COFINS_N_TRIB_INTERNO
FROM
TB_IN_981_4105
WHERE
CNPJ = :PCNPJ AND MES = :PMES AND ANO = :PANO AND
CODIGO_SIT_TRIBUTARIA_PIS = :PCST_PIS AND CODIGO_SIT_TRIBUTARIA_COFINS =
:PCST_COFINS
INTO
:ID, :BASE_CALCULO_PIS, :ALIQUOTA_PIS, :VALOR_PIS, :VALOR_PIS_EXPORTACAO,
:VALOR_PIS_MERC_INTERNO, :VALOR_PIS_N_TRIB_INTERNO, :BASE_CALCULO_COFINS,
:ALIQUOTA_COFINS, :VALOR_COFINS, :VALOR_COFINS_EXPORTACAO,
:VALOR_COFINS_MERC_INTERNO,
:VALOR_COFINS_N_TRIB_INTERNO
DO
PIS = (BASE_CALCULO_PIS / 100) * ALIQUOTA_PIS;
PIS_EX = (PIS / 100) * :PPERCENT_EX;
PIS_MI = (PIS / 100) * :PPERCENT_MI;
PIS_NT = (PIS / 100) * :PPERCENT_NT;
COFINS = (BASE_CALCULO_COFINS / 100) * ALIQUOTA_COFINS;
COFINS_EX = (COFINS / 100) * :PPERCENT_EX;
COFINS_MI = (COFINS / 100) * :PPERCENT_MI;
COFINS_NT = (COFINS / 100) * :PPERCENT_NT;
IF (PIS_EX > 0.0000 AND PIS_EX < 0.0100) THEN
PIS_EX = 0.0100;
IF (PIS_MI > 0.0000 AND PIS_MI < 0.0100) THEN
PIS_MI = 0.0100;
IF (PIS_NT > 0.0000 AND PIS_NT < 0.0100) THEN
PIS_NT = 0.0100;
IF (COFINS_EX > 0.0000 AND COFINS_EX < 0.0100) THEN
COFINS_EX = 0.0100;
IF (COFINS_MI > 0.0000 AND COFINS_MI < 0.0100) THEN
COFINS_MI = 0.0100;
IF (COFINS_NT > 0.0000 AND COFINS_NT < 0.0100) THEN
COFINS_NT = 0.0100;
UPDATE TB_IN_981_4105
SET
VALOR_PIS = :PIS,
VALOR_PIS_EXPORTACAO = :PIS_EX,
VALOR_PIS_MERC_INTERNO = :PIS_MI,
VALOR_PIS_N_TRIB_INTERNO = :PIS_NT,
VALOR_COFINS = :COFINS,
VALOR_COFINS_EXPORTACAO = :COFINS_EX,
VALOR_COFINS_MERC_INTERNO = :COFINS_MI,
VALOR_COFINS_N_TRIB_INTERNO = :COFINS_NT
WHERE
CNPJ = :PCNPJ AND MES = :PMES AND ANO = :PANO AND
CODIGO_SIT_TRIBUTARIA_PIS = :PCST_PIS AND CODIGO_SIT_TRIBUTARIA_COFINS
= :PCST_COFINS;
SUSPEND;
end^
SET TERM ; ^
GRANT SELECT,UPDATE ON TB_IN_981_4105 TO PROCEDURE
PROPORCIONA_PISCOFINS_4105;
GRANT EXECUTE ON PROCEDURE PROPORCIONA_PISCOFINS_4105 TO SYSDBA;
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista