Pessoal... bom dia Tenho uma trigger que trabalha dentro de uma tabela a partir do momento que existe uma inserção de um tipo de registro. Até ai tudo bem, porém, muito de vez enquando ao executar acontece o seguinte erro: No user transaction is currently in progress. The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION Alguém sabe em que momento ou porque acontece esse erro... O que me intriga é que não é sempre e sim de vez enquando. Irei colocar a trigger aqui, mas aviso que ela é gigante... ---- CREATE TRIGGER TR_AUXRM_BAIXA_ESTOQUE ON TMOV FOR UPDATE AS DECLARE @ERRO INT DECLARE @PASSO INT DECLARE @NM_ANTIGO VARCHAR(15) DECLARE @NM_NOVO VARCHAR(15) DECLARE @CODTMV VARCHAR(10) DECLARE @ENTROU INT SET @ENTROU = 0 IF ( SELECT COUNT(1) FROM INSERTED WHERE CODCOLIGADA = 01 AND ((CODTMV IN ('2.2.01','2.2.15','2.2.19','2.2.12','2.2.21')) OR (CODTMV = '2.1.06' AND CAMPOLIVRE3 LIKE '%999')) ) > 0 BEGIN SET @NM_ANTIGO = (SELECT NUMEROMOV FROM DELETED) SET @NM_NOVO = (SELECT NUMEROMOV FROM INSERTED) SET @CODTMV = (SELECT CASE WHEN CODTMV = '2.2.01' THEN '2.1.05' WHEN CODTMV = '2.2.15' THEN '2.1.07' WHEN CODTMV = '2.1.06' THEN '2.1.08' ELSE '2.1.09' END AS RESULT FROM INSERTED) IF @NM_ANTIGO <> @NM_NOVO BEGIN SET @ENTROU = 1 DECLARE @IDMOV INT DECLARE @IDMOV_ORIG INT DECLARE @NUMEROMOV VARCHAR(15) DECLARE @DATASEMHORA DATETIME DECLARE @DATACOMHORA DATETIME DECLARE @CODCOLIGADA INT DECLARE @CODFILIAL SMALLINT DECLARE @CODLOC VARCHAR(15) DECLARE @SERIE VARCHAR(8) DECLARE @TIPO VARCHAR(1) DECLARE @STATUS VARCHAR(1) DECLARE @DATAEMISSAO DATETIME DECLARE @DATAEXTRA1 DATETIME DECLARE @CODCPG VARCHAR(5) DECLARE @OBSERVACAO VARCHAR(60) DECLARE @CODMOEVALORLIQUIDO VARCHAR(10) DECLARE @DATAMOVIMENTO DATETIME DECLARE @FRETECIFOUFOB SMALLINT DECLARE @CODCCUSTO VARCHAR(25) DECLARE @CODVEN1 VARCHAR(16) DECLARE @CODCOLCFO SMALLINT DECLARE @CODCOLCXA SMALLINT DECLARE @GERADOPORLOTE SMALLINT DECLARE @STATUSEXPORTCONT SMALLINT DECLARE @CAMPOLIVRE2 VARCHAR(100) DECLARE @GEROUCONTATRABALHO SMALLINT DECLARE @GERADOPORCONTATRABALHO SMALLINT DECLARE @HORULTIMAALTERACAO DATETIME DECLARE @INDUSOOBJ RMDVALOR2 DECLARE @INTEGRADOBONUM SMALLINT DECLARE @HORARIOEMISSAO DATETIME DECLARE @DATACRIACAO DATETIME DECLARE @VINCULADOESTOQUEFL SMALLINT DECLARE @CONTORCAMENTOANTIGO SMALLINT DECLARE @DATACONTABILIZACAO DATETIME DECLARE @SEQUENCIALESTOQUE INT DECLARE @INTEGRADOAUTOMACAO SMALLINT DECLARE @INTEGRAAPLICACAO CHAR(1) DECLARE @DATALANCAMENTO DATETIME DECLARE @USARATEIOVALORFIN SMALLINT DECLARE @SALDO RMDVALOR4 DECLARE @CODPRD VARCHAR(30) SET @SERIE = 'SEXP' SET @DATASEMHORA = CONVERT(VARCHAR,GETDATE(),112) SET @DATACOMHORA = CONVERT(VARCHAR,GETDATE(),112) + ' ' + CONVERT(VARCHAR,GETDATE(),114) SELECT @IDMOV_ORIG = IDMOV, @CODCOLIGADA = CODCOLIGADA, @CODFILIAL = CODFILIAL, @CODLOC = CODLOC, @TIPO = 'A', @STATUS = 'N', @DATAEMISSAO = @DATASEMHORA, @DATAEXTRA1 = @DATASEMHORA, @CODCPG = CODCPG, @OBSERVACAO = OBSERVACAO, @CODMOEVALORLIQUIDO = CODMOEVALORLIQUIDO, @DATAMOVIMENTO = @DATASEMHORA, @FRETECIFOUFOB = FRETECIFOUFOB, @CODCCUSTO = CODCCUSTO, @CODVEN1 = CODVEN1, @CODCOLCFO = CODCOLCFO, @CODCOLCXA = CODCOLCXA, @GERADOPORLOTE = GERADOPORLOTE, @STATUSEXPORTCONT = 0, @CAMPOLIVRE2 = CAMPOLIVRE2, @GEROUCONTATRABALHO = 0, @GERADOPORCONTATRABALHO = 0, @HORULTIMAALTERACAO = @DATACOMHORA, @INDUSOOBJ = 0, @INTEGRADOBONUM = 0, @HORARIOEMISSAO = @DATACOMHORA, @DATACRIACAO = @DATASEMHORA, @VINCULADOESTOQUEFL = 0, @CONTORCAMENTOANTIGO = 0, @DATACONTABILIZACAO = @DATASEMHORA, @SEQUENCIALESTOQUE = SEQUENCIALESTOQUE, @INTEGRADOAUTOMACAO = 0, @INTEGRAAPLICACAO = 'T', @DATALANCAMENTO = @DATASEMHORA, @USARATEIOVALORFIN = USARATEIOVALORFIN FROM INSERTED --VALIDAÇÃO DECLARE ITENS_VALIDA CURSOR FOR SELECT IDPRD, QUANTIDADE, CODUND FROM TITMMOV WHERE CODCOLIGADA = 1 AND IDMOV = @IDMOV_ORIG DECLARE @MENSAGEM VARCHAR(1000) DECLARE @IDPRD_CUR_V INT DECLARE @QUANTIDADE_CUR_V INT DECLARE @CODUND_CUR_V VARCHAR(5) DECLARE @IDPRD_COM_V INT DECLARE @QUANTIDADE_COM_V INT DECLARE @CODUND_COM_V VARCHAR(5) DECLARE @CUSTOMEDIO_COM_V MONEY OPEN ITENS_VALIDA FETCH NEXT FROM ITENS_VALIDA INTO @IDPRD_CUR_V, @QUANTIDADE_CUR_V, @CODUND_CUR_V WHILE @@FETCH_STATUS = 0 BEGIN IF (SELECT COUNT(1) FROM TPRDCOMPOSTO WHERE CODCOLIGADA = 1 AND IDPRD = @IDPRD_CUR_V) = 0 BEGIN SET @ERRO = 1 SET @MENSAGEM = 'Esta NF possui itens não compostos (fazer baixa manual)' CLOSE ITENS_VALIDA DEALLOCATE ITENS_VALIDA GOTO ERRO_VALIDA END ELSE BEGIN DECLARE COMPOSTO_VALIDA CURSOR FOR SELECT C.IDPRDCOMPONENTE, C.QUANTIDADE, T.CODUNDCONTROLE , T.CUSTOMEDIO FROM TPRDCOMPOSTO C INNER JOIN TPRD T ON T.IDPRD = C.IDPRDCOMPONENTE WHERE C.IDPRD = @IDPRD_CUR_V OPEN COMPOSTO_VALIDA FETCH NEXT FROM COMPOSTO_VALIDA INTO @IDPRD_COM_V, @QUANTIDADE_COM_V, @CODUND_COM_V, @CUSTOMEDIO_COM_V WHILE @@FETCH_STATUS = 0 BEGIN SELECT @SALDO=TPRD.SALDOGERALFISICO, @CODPRD=TPRD.CODIGOPRD FROM TPRD WHERE IDPRD = @IDPRD_COM_V IF (@SALDO) < (@QUANTIDADE_COM_V * @QUANTIDADE_CUR_V) BEGIN SET @ERRO = 2 SET @MENSAGEM = 'O produto ' + @CODPRD + ' não possui saldo suficiente' CLOSE COMPOSTO_VALIDA DEALLOCATE COMPOSTO_VALIDA CLOSE ITENS_VALIDA DEALLOCATE ITENS_VALIDA GOTO ERRO_VALIDA END IF ISNULL(@CUSTOMEDIO_COM_V,0) = 0 BEGIN SET @ERRO = 3 SET @MENSAGEM = 'O produto ' + @CODPRD + ' não possui custo médio cadastrado' CLOSE COMPOSTO_VALIDA DEALLOCATE COMPOSTO_VALIDA CLOSE ITENS_VALIDA DEALLOCATE ITENS_VALIDA GOTO ERRO_VALIDA END FETCH NEXT FROM COMPOSTO_VALIDA INTO @IDPRD_COM_V, @QUANTIDADE_COM_V, @CODUND_COM_V, @CUSTOMEDIO_COM_V END CLOSE COMPOSTO_VALIDA DEALLOCATE COMPOSTO_VALIDA END FETCH NEXT FROM ITENS_VALIDA INTO @IDPRD_CUR_V, @QUANTIDADE_CUR_V, @CODUND_CUR_V END CLOSE ITENS_VALIDA DEALLOCATE ITENS_VALIDA UPDATE GAUTOINC SET VALAUTOINC=VALAUTOINC+1 WHERE CODCOLIGADA=1 AND CODAUTOINC='IDMOV' SET @IDMOV = (SELECT VALAUTOINC FROM GAUTOINC WHERE CODCOLIGADA=1 AND CODAUTOINC='IDMOV') UPDATE GAUTOINC SET VALAUTOINC=VALAUTOINC+1 WHERE CODCOLIGADA=1 AND CODAUTOINC=@SERIE+'000001' SET @NUMEROMOV = right('000000' + CONVERT(VARCHAR,(SELECT VALAUTOINC FROM GAUTOINC WHERE CODCOLIGADA=1 AND CODAUTOINC=@SERIE+'000001')),6) INSERT INTO TMOV ( IDMOV, NUMEROMOV, CODCOLIGADA, CODFILIAL, CODLOC, SERIE, CODTMV, TIPO, STATUS, DATAEMISSAO, DATAEXTRA1, CODCPG, OBSERVACAO, CODMOEVALORLIQUIDO, DATAMOVIMENTO, FRETECIFOUFOB, CODCCUSTO, CODVEN1, CODCOLCFO, CODCOLCXA, GERADOPORLOTE, STATUSEXPORTCONT, CAMPOLIVRE2, GEROUCONTATRABALHO, GERADOPORCONTATRABALHO, HORULTIMAALTERACAO, INDUSOOBJ, INTEGRADOBONUM, HORARIOEMISSAO, DATACRIACAO, VINCULADOESTOQUEFL, CONTORCAMENTOANTIGO, DATACONTABILIZACAO, SEQUENCIALESTOQUE, INTEGRADOAUTOMACAO, INTEGRAAPLICACAO, DATALANCAMENTO, USARATEIOVALORFIN ) VALUES ( @IDMOV, @NUMEROMOV, @CODCOLIGADA, @CODFILIAL, @CODLOC, @SERIE, @CODTMV, @TIPO, @STATUS, @DATAEMISSAO, @DATAEXTRA1, @CODCPG, @OBSERVACAO, @CODMOEVALORLIQUIDO, @DATAMOVIMENTO, @FRETECIFOUFOB, @CODCCUSTO, @CODVEN1, @CODCOLCFO, @CODCOLCXA, @GERADOPORLOTE, @STATUSEXPORTCONT, @CAMPOLIVRE2, @GEROUCONTATRABALHO, @GERADOPORCONTATRABALHO, @HORULTIMAALTERACAO, @INDUSOOBJ, @INTEGRADOBONUM, @HORARIOEMISSAO, @DATACRIACAO, @VINCULADOESTOQUEFL, @CONTORCAMENTOANTIGO, @DATACONTABILIZACAO, @SEQUENCIALESTOQUE, @INTEGRADOAUTOMACAO, @INTEGRAAPLICACAO, @DATALANCAMENTO, @USARATEIOVALORFIN ) INSERT INTO TMOVHISTORICO ( CODCOLIGADA, IDMOV, HISTORICOCURTO ) VALUES ( @CODCOLIGADA, @IDMOV, 'BAIXA' ) DECLARE @IDMOVDESTINO INT DECLARE @CODCOLDESTINO INT DECLARE @IDPROCESSO INT SELECT @IDMOVDESTINO = IDMOVDESTINO, @CODCOLDESTINO = CODCOLDESTINO FROM TMOVRELAC WHERE IDMOVDESTINO = @IDMOV_ORIG UPDATE GAUTOINC SET VALAUTOINC=VALAUTOINC+1 WHERE CODCOLIGADA=1 AND CODAUTOINC='IDPROCESSOFAT' SET @IDPROCESSO = (SELECT VALAUTOINC FROM GAUTOINC WHERE CODCOLIGADA=1 AND CODAUTOINC='IDPROCESSOFAT') INSERT INTO TMOVRELAC VALUES ( @IDMOVDESTINO, @CODCOLDESTINO, @IDMOV, @CODCOLIGADA, 'P', @IDPROCESSO ) DECLARE ITENS CURSOR FOR SELECT IDPRD, QUANTIDADE, CODUND, NSEQITMMOV FROM TITMMOV WHERE IDMOV = @IDMOV_ORIG DECLARE @SEQ INT DECLARE @SEQUENCIA_CUR INT DECLARE @IDPRD_CUR INT DECLARE @QUANTIDADE_CUR INT DECLARE @CODUND_CUR VARCHAR(5) DECLARE @IDPRD_COM INT DECLARE @QUANTIDADE_COM INT DECLARE @CODUND_COM VARCHAR(5) DECLARE @CUSTOMEDIO_COM MONEY DECLARE @VALOR_GERAL MONEY DECLARE @QUANTIDADE_SOBRA INT DECLARE @IDLOTE INT DECLARE @QUANTIDADE_LOTE INT DECLARE @QUANTIDADE_B_LOTE INT SET @SEQ = 0 SET @VALOR_GERAL = 0 OPEN ITENS FETCH NEXT FROM ITENS INTO @IDPRD_CUR, @QUANTIDADE_CUR, @CODUND_CUR, @SEQUENCIA_CUR WHILE @@FETCH_STATUS = 0 BEGIN IF (SELECT COUNT(1) FROM TPRDCOMPOSTO WHERE IDPRD = @IDPRD_CUR) > 0 BEGIN DECLARE COMPOSTO CURSOR FOR SELECT C.IDPRDCOMPONENTE, C.QUANTIDADE, T.CODUNDCONTROLE , T.CUSTOMEDIO FROM TPRDCOMPOSTO C INNER JOIN TPRD T ON T.IDPRD = C.IDPRDCOMPONENTE WHERE C.IDPRD = @IDPRD_CUR OPEN COMPOSTO FETCH NEXT FROM COMPOSTO INTO @IDPRD_COM, @QUANTIDADE_COM, @CODUND_COM, @CUSTOMEDIO_COM WHILE @@FETCH_STATUS = 0 BEGIN SET @SEQ = @SEQ + 1 INSERT INTO TITMMOV (CODCOLIGADA, IDMOV, NSEQITMMOV, NUMEROSEQUENCIAL, IDPRD, QUANTIDADE, PRECOUNITARIO, CODUND, CAMPOLIVRE ) VALUES ( @CODCOLIGADA, @IDMOV, @SEQ, @SEQ, @IDPRD_COM, (@QUANTIDADE_COM*@QUANTIDADE_CUR), @CUSTOMEDIO_COM, @CODUND_COM , CONVERT(VARCHAR(15),@SEQUENCIA_CUR) ) SET @QUANTIDADE_SOBRA = (@QUANTIDADE_COM*@QUANTIDADE_CUR) UPDATE TPRDLOC SET SALDOFISICO2 = SALDOFISICO2 - @QUANTIDADE_SOBRA, SALDOFISICO5 = SALDOFISICO5 - @QUANTIDADE_SOBRA, SALDOFINANCEIRO2 = SALDOFINANCEIRO2 - (@QUANTIDADE_SOBRA * @CUSTOMEDIO_COM) WHERE CODLOC = '01' AND IDPRD = @IDPRD_COM SET @QUANTIDADE_B_LOTE = 0 WHILE (@QUANTIDADE_SOBRA > 0) BEGIN SELECT @IDLOTE=IDLOTE, @QUANTIDADE_LOTE=SALDOFISICO2 FROM TLOTEPRDLOC WHERE IDPRD = @IDPRD_COM AND SALDOFISICO2 <> 0 AND CODLOC = '01' AND IDLOTE = (SELECT MIN(IDLOTE) FROM TLOTEPRDLOC WHERE IDPRD = @IDPRD_COM AND SALDOFISICO2 <> 0 AND CODLOC = '01') ORDER BY IDLOTE IF @QUANTIDADE_LOTE <= @QUANTIDADE_SOBRA BEGIN SET @QUANTIDADE_SOBRA = @QUANTIDADE_SOBRA - @QUANTIDADE_LOTE SET @QUANTIDADE_B_LOTE = @QUANTIDADE_LOTE UPDATE TLOTEPRDLOC SET SALDOFISICO2 = 0, SALDOFISICO5 = 0 WHERE IDLOTE = @IDLOTE END ELSE BEGIN UPDATE TLOTEPRDLOC SET SALDOFISICO2 = SALDOFISICO2 - @QUANTIDADE_SOBRA, SALDOFISICO5 = SALDOFISICO5 - @QUANTIDADE_SOBRA WHERE IDLOTE = @IDLOTE SET @QUANTIDADE_B_LOTE = @QUANTIDADE_SOBRA SET @QUANTIDADE_SOBRA = 0 END INSERT INTO TITMLOTEPRD (CODCOLIGADA, IDMOV, NSEQITMMOV, IDLOTE, QUANTIDADE2, QUANTIDADEARECEBER) VALUES (@CODCOLIGADA, @IDMOV, @SEQ, @IDLOTE, (@QUANTIDADE_B_LOTE)*-1, (@QUANTIDADE_B_LOTE)*-1) END SET @VALOR_GERAL = @VALOR_GERAL + (@CUSTOMEDIO_COM*(@QUANTIDADE_COM*@QUANTIDADE_CUR)) UPDATE TPRD SET SALDOGERALFISICO = SALDOGERALFISICO - (@QUANTIDADE_COM*@QUANTIDADE_CUR) WHERE IDPRD = @IDPRD_COM FETCH NEXT FROM COMPOSTO INTO @IDPRD_COM, @QUANTIDADE_COM, @CODUND_COM, @CUSTOMEDIO_COM END CLOSE COMPOSTO DEALLOCATE COMPOSTO END FETCH NEXT FROM ITENS INTO @IDPRD_CUR, @QUANTIDADE_CUR, @CODUND_CUR, @SEQUENCIA_CUR END CLOSE ITENS DEALLOCATE ITENS UPDATE TMOV SET VALORBRUTO = @VALOR_GERAL, VALORLIQUIDO = @VALOR_GERAL, VALOROUTROS = @VALOR_GERAL WHERE IDMOV = @IDMOV END END ERRO_VALIDA: IF @ENTROU = 1 BEGIN IF @ERRO <> 0 BEGIN INSERT INTO TB_LOG_AUXRM VALUES (@NM_NOVO, NULL, 'E',@MENSAGEM,@DATACOMHORA) END ELSE BEGIN INSERT INTO TB_LOG_AUXRM VALUES (@NM_NOVO, @NUMEROMOV, 'O','',@DATACOMHORA) INSERT INTO TB_RELAC_AUXRM VALUES(@IDMOV_ORIG,@IDMOV) END END SET NOCOUNT OFF SET ANSI_NULLS OFF SET ANSI_WARNINGS ON ---- Valeu NIK