[firebase-br] Ajuda com Procedure - Calculo + Atualização.
Diego Maccari
diegomaccari em ig.com.br
Ter Jun 21 09:30:12 -03 2011
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;
Mais detalhes sobre a lista de discussão lista