[firebase-br] RES: ENC: Ajuda com Procedure - Calculo + Atualização.

Oliveira, José Augusto Siqueira de contabil em sivolc.ind.br
Ter Jun 21 11:03:06 -03 2011


Acredito que se você usar o campo ID para efetuar o where do update, pode
ser que corrija o seu erro. 


Oliveira, José Augusto Siqueira de
Sivolc  Móveis e Complementos
(32) 3531-4677 
contabil em sivolc.ind.br

"Aviso de confidencialidade profissional" - Esta mensagem eletrônica e seus
anexos são destinados exclusivamente ao(s) destinatário(s) acima e podem
conter informações confidenciais sujeitas a restrição legal de comunicação
entre as partes. Caso tenha recebido esta mensagem por engano, fica V.Sa.
ciente de que a distribuição, divulgação ou disseminação das informações
aqui contidas ou anexadas é terminantemente proibida, sujeitando o
responsável às penalidades aplicáveis. Assim, solicitamos a gentileza de
retorná-la de imediato ao remetente, eliminando-a definitivamente de seu
sistema. Em caso de dúvida, queira por favor entrar em contato conosco." 

"Confidentiality notice" - This message and its attachments are addressed
solely to the persons above and may contain privileged and confidential
communication. If you have received the message in error, the distribution
or dissemination of the content hereof is prohibited. Please return it
immediately to the sender and please delete the message from your system on
a permanent basis. Should you have any questions, please contact."

-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Fasystem - Listas
Enviada em: terça-feira, 21 de junho de 2011 10:47
Para: 'FireBase'
Assunto: [firebase-br] ENC: Ajuda com Procedure - Calculo + Atualização.

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




______________________________________________
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

__________ Informação do ESET NOD32 Antivirus, versão da vacina 6225
(20110621) __________

A mensagem foi verificada pelo  ESET NOD32 Antivirus.

http://www.eset.com



 

__________ Informação do ESET NOD32 Antivirus, versão da vacina 6225
(20110621) __________

A mensagem foi verificada pelo  ESET NOD32 Antivirus.

http://www.eset.com
 
 

__________ Informação do ESET NOD32 Antivirus, versão da vacina 6226
(20110621) __________

A mensagem foi verificada pelo  ESET NOD32 Antivirus.

http://www.eset.com
 





Mais detalhes sobre a lista de discussão lista