USE [teste]
GO
/****** Object: UserDefinedFunction [dbo].[VALIDA_CHAVEACESSONFE] Script Date: 06/01/2012 14:15:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[VALIDA_CHAVEACESSONFE] (@IDMOV INT,@CODCOLIGADA INT)
--CRIADO POR GUILHERME
RETURNS INT
AS
BEGIN
DECLARE @TOTAL int, @RESTO int, @RETORNO INT
SELECT @TOTAL = (select SUM (
(substring(chaveacessonfe,43,1) * 2) +
(substring(chaveacessonfe,42,1) * 3) +
(substring(chaveacessonfe,41,1) * 4) +
(substring(chaveacessonfe,40,1) * 5) +
(substring(chaveacessonfe,39,1) * 6) +
(substring(chaveacessonfe,38,1) * 7) +
(substring(chaveacessonfe,37,1) * 8) +
(substring(chaveacessonfe,36,1) * 9) +
(substring(chaveacessonfe,35,1) * 2) +
(substring(chaveacessonfe,34,1) * 3) +
(substring(chaveacessonfe,33,1) * 4) +
(substring(chaveacessonfe,32,1) * 5) +
(substring(chaveacessonfe,31,1) * 6) +
(substring(chaveacessonfe,30,1) * 7) +
(substring(chaveacessonfe,29,1) * 8) +
(substring(chaveacessonfe,28,1) * 9) +
(substring(chaveacessonfe,27,1) * 2) +
(substring(chaveacessonfe,26,1) * 3) +
(substring(chaveacessonfe,25,1) * 4) +
(substring(chaveacessonfe,24,1) * 5) +
(substring(chaveacessonfe,23,1) * 6) +
(substring(chaveacessonfe,22,1) * 7) +
(substring(chaveacessonfe,21,1) * 8) +
(substring(chaveacessonfe,20,1) * 9) +
(substring(chaveacessonfe,19,1) * 2) +
(substring(chaveacessonfe,18,1) * 3) +
(substring(chaveacessonfe,17,1) * 4) +
(substring(chaveacessonfe,16,1) * 5) +
(substring(chaveacessonfe,15,1) * 6) +
(substring(chaveacessonfe,14,1) * 7) +
(substring(chaveacessonfe,13,1) * 8) +
(substring(chaveacessonfe,12,1) * 9) +
(substring(chaveacessonfe,11,1) * 2) +
(substring(chaveacessonfe,10,1) * 3) +
(substring(chaveacessonfe,9,1) * 4) +
(substring(chaveacessonfe,8,1) * 5) +
(substring(chaveacessonfe,7,1) * 6) +
(substring(chaveacessonfe,6,1) * 7) +
(substring(chaveacessonfe,5,1) * 8) +
(substring(chaveacessonfe,4,1) * 9) +
(substring(chaveacessonfe,3,1) * 2) +
(substring(chaveacessonfe,2,1) * 3) +
(substring(chaveacessonfe,1,1) * 4) )
from
TMOV
where
CODCOLIGADA = @CODCOLIGADA and
IDMOV = @IDMOV
GROUP BY TMOV.CHAVEACESSONFE)
--VALIDAÇÃO CÁCULO MÓDULO 11
SELECT @RESTO = @TOTAL%11
SELECT @RETORNO = 11 - @RESTO
IF (@RESTO = 0 OR @RESTO = 1)
SET @RETORNO = 0
ELSE
SET @RETORNO = @RETORNO
RETURN(@RETORNO)
END
Essa acima é a function.. e esta abaixo a trigger de insert da tabela TMOV que faz a validação no momento do lançamento das notas.
Se quiserem a trigger de update é só mudar ali o tipo de insert pra update nesta trigger mesmo!
Funciona 100%!
USE [teste]
GO
/****** Object: Trigger [dbo].[Tabela_TMOV_Insert_Filial_CC] Script Date: 06/01/2012 14:17:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Tabela_TMOV_Insert_Filial_CC] ON [dbo].[TMOV]
FOR INSERT As
DECLARE @CdColigada INT,
@CdFilial INT,
@CdCC VARCHAR(10),
@chaveacesso varchar(44),
@idmov INT,
@CdTmv varchar(10)
BEGIN
--Buscando dados sendo inseridos
SELECT
@CdColigada = codcoligada,
@CdFilial = codfilial,
@CdCC = codccusto,
@chaveacesso = CHAVEACESSONFE,
@idmov = IDMOV,
@CdTmv = CODTMV
FROM inserted
IF (@CdTmv like '1.2%')
BEGIN
IF DBO.VALIDA_CHAVEACESSONFE(@idmov,@CdColigada) <> substring(@chaveacesso,44,1)
Raiserror('DV DA CHAVE DE ACESSO NF-e INVÁLIDO.',11,127,@CdCC,@CdFilial);
END
END