Array
(
)

sp nao grava

Fred_montanha
   - 12 jul 2004

Bem filhos, aqui vai uma que ta me tirando o sono, tenho duas sp!Uma principal que chama a outra.So que a que Gera fatura nao esta gravando regsitro nenhum.Achei que era o Begin - Commit, já tentei begin trans - commit trans, begin - commit, begin transaction - commit transaction, e sem o begin - commit.mas nada de gravar os dados.Alguem pode me dar uma mão!Aqui vai as sp.

Primeiro a SP de Seleção de transportadoras:

CREATE PROCEDURE spTodasTransportadoras
@DataInicial AS DATETIME,
@DataFinal AS DATETIME,
@Vencimento AS DATETIME,
@Diaria AS INTEGER,
@Livre AS INTEGER,
@CargaAberta AS INTEGER

As
DECLARE @TranspID Int,@Nome Varchar(100),@DeduzirISS INTEGER,@ISS Float,@IR Float,@Imposto_Federal INTEGER
DECLARE Sel_Transp CURSOR FOR
select distinct t.id,t.nome,t.deduziriss,t.iss,t.ir,t.imposto_federal
from transportadora t inner join osdiaria od on t.id=od.transportadora
where od.data BETWEEN @DataInicial and @DataFinal and od.fatura is null
union all
select distinct t.id,t.nome ,t.deduziriss,t.iss,t.ir ,t.imposto_federal from transportadora t inner join oscargaaberta oc on t.id=oc.transportadora
where oc.data BETWEEN @DataInicial and @DataFinal and oc.fatura is null
union all

select distinct t.id,t.nome ,t.deduziriss,t.iss,t.ir,t.imposto_federal from transportadora t inner join oslivre ol on t.id=ol.transportadora
where ol.data BETWEEN @DataInicial and @DataFinal and ol.fatura is null
Group By t.id,t.nome ,t.deduziriss,t.iss,t.ir,t.imposto_federal
order by t.nome

--BEGIN TRANSACTION

OPEN Sel_Transp

FETCH NEXT FROM Sel_Transp INTO @TranspID ,@Nome ,@DeduzirISS ,@ISS ,@IR ,@Imposto_Federal

WHILE @@FETCH_STATUS = 0
BEGIN
EXEC spGeraFatura @TranspID ,@DataInicial , @DataFinal ,@Diaria , @Livre ,@CargaAberta , @DeduzirISS, @ISS , @IR , @Imposto_Federal , @Vencimento
FETCH NEXT FROM Sel_Transp INTO @TranspID ,@Nome ,@DeduzirISS ,@ISS ,@IR ,@Imposto_Federal
END

CLOSE Sel_Transp
DEALLOCATE Sel_Transp

-- COMMIT
GO

Agora Vai a de Geração de Fatura

CREATE PROCEDURE spGeraFatura @TransportadoraID AS INTEGER,
@DataInicial AS DATETIME,
@DataFinal AS DATETIME,
@Diaria AS INTEGER,
@Livre AS INTEGER,
@CargaAberta AS INTEGER,
@DeduzirISS AS INTEGER,
@ISS AS Float,
@IR AS Float,
@Imposto_Federal AS INTEGER,
@Vencimento AS DATETIME
AS
BEGIN

DECLARE @IMP_FEDERAL AS REAL
DECLARE @TotalOSDiaria AS REAL
DECLARE @TotalOSLivre AS REAL
DECLARE @TotalOSCargaAberta AS REAL
DECLARE @INICIO_FATURAMENTO AS DATETIME
DECLARE @FIM_FATURAMENTO AS DATETIME
DECLARE @Numero_Fatura AS INTEGER
DECLARE @Fatura as INT
SET @Fatura = (SELECT MAX(ID) FROM Fatura WHERE Tipo=´FATURA´)

DECLARE Datas CURSOR FOR SELECT MAX(MAIOR) ,MIN(MENOR) FROM (
SELECT MAX(DATA) AS MAIOR, MIN(DATA) AS MENOR
FROM OSLIVRE
WHERE (FATURA IS NULL) AND (OSLIVRE.Data BETWEEN @DataInicial AND @DataFinal)
AND TRANSPORTADORA=@TransportadoraID
union all
SELECT MAX(DATA) AS MAIOR, MIN(DATA) AS MENOR
FROM OSCARGAABERTA
WHERE (FATURA IS NULL) AND (OSCARGAABERTA.Data BETWEEN @DataInicial AND @DataFinal)
AND TRANSPORTADORA=@TransportadoraID
union all
SELECT MAX(DATA) AS MAIOR, MIN(DATA) AS MENOR
FROM OSDIARIA
WHERE (FATURA IS NULL)AND (OSDIARIA.Data BETWEEN @DataInicial AND @DataFinal
AND TRANSPORTADORA=@TransportadoraID ))AS OS

--CALCULA VALOR DA OS

IF @Diaria = 0
SET @TotalOSDiaria = 0
ELSE
BEGIN
SET @TotalOSDiaria = (SELECT SUM((OS.RecebimentoCE * CO.CargaExtra) +
(OS.RecebimentoAN * CO.Adicional) +
(OS.RecebimentoANCE * CO.AdicionalExtra) +
(OS.Recebimento * CO.QteCooperandos))
FROM OSDiaria OS
INNER JOIN vwCooperadorDiariaOS CO ON OS.ID = CO.OS
WHERE OS.Transportadora = @TransportadoraID AND OS.Data BETWEEN @DataInicial AND @DataFinal)
END

IF @Livre = 0
SET @TotalOSLivre = 0
ELSE
BEGIN
SET @TotalOSLivre = (SELECT SUM(Valor) FROM OSLivre OS
WHERE OS.Transportadora = @TransportadoraID AND OS.Data BETWEEN @DataInicial AND @DataFinal)
END

IF @CargaAberta = 0
SET @TotalOSCargaAberta = 0
ELSE
BEGIN
SET @TotalOSCargaAberta = (SELECT SUM(Recebimento * Peso / 1000) FROM OSCargaAberta OS
WHERE OS.Transportadora = @TransportadoraID AND OS.Data BETWEEN @DataInicial AND @DataFinal)
END

IF @TotalOSDiaria IS NULL SET @TotalOSDiaria = 0
IF @TotalOSLivre IS NULL SET @TotalOSLivre = 0
IF @TotalOSCargaAberta IS NULL SET @TotalOSCargaAberta = 0

--ZERA VARIAVEL

SET @IR=0
SET @ISS=0
SET @IMP_FEDERAL=0

--IR
If ((@TotalOSDiaria + @TotalOSLivre + @TotalOSCargaAberta)>666.66) SET
@IR=(((@TotalOSDiaria + @TotalOSLivre + @TotalOSCargaAberta)/100)*@IR)*(-1)

--IMPOSTO FEREDAL
IF @IMPOSTO_FEDERAL=1 SET @IMP_FEDERAL=((@TotalOSDiaria + @TotalOSLivre + @TotalOSCargaAberta)*4.65/100)*(-1)

--ISS
If (@ISS>0) AND (@DEDUZIRISS=1) Set
@ISS=(((@TotalOSDiaria + @TotalOSLivre + @TotalOSCargaAberta)/100)*@ISS)*(-1)

--MAIOR E MENOR DATA DA FATURA
OPEN DATAS

FETCH NEXT FROM DATAS INTO @INICIO_FATURAMENTO,@FIM_FATURAMENTO

BEGIN TRANSACTION

--INSERÇÃO FATURA

Insert into Fatura(ID,TIPO,DATA_GERADA,CANCELADA,TRANSPORTADORA,VALOR_FATURA,VALOR_PAGO,VALORACRESCIMO,DISCRACRESCIMO,
DATA_VENCIMENTO,IR,ISS,DEDUZIRISS,INICIO_FATURAMENTO,TERMINO_FATURAMENTO)
values(@Fatura,´NOTA´,GetDate(),0,@Transportadoraid,0.00,0.00,0.00,´0.00´,@Vencimento,@IR,@ISS,@deduziriss
,@INICIO_FATURAMENTO,@FIM_FATURAMENTO)

--ALTERAÇÃO DAS OS

IF @Diaria <> 0
BEGIN
SET Update OSDiaria
Set OSDiaria.faturamento=GetDate() ,
OSDiaria.Vencimento=@VENCIMENTO ,
OSDiaria.Fatura=@Fatura ,
OSDiaria.TipoFatura=´NOTA´
WHERE OSDiaria.Transportadora = @TransportadoraID AND OSDiaria.Data BETWEEN @DataInicial AND @DataFinal
END

IF @Livre <> 0
BEGIN
SET Update OSLivre
Set OSLivre.faturamento=GetDate() ,
OSLivre.Vencimento=@VENCIMENTO ,
OSLivre.Fatura=@Fatura ,
OSLivre.TipoFatura=´NOTA´
WHERE OSLivre.Transportadora = @TransportadoraID AND OSLivre.Data BETWEEN @DataInicial AND @DataFinal
END

IF @CargaAberta <> 0
BEGIN
SET Update OSCargaAberta
Set OSCargaAberta.faturamento=GetDate() ,
OSCargaAberta.Vencimento=@VENCIMENTO ,
OSCargaAberta.Fatura=@Fatura ,
OSCargaAberta.TipoFatura=´NOTA´
WHERE OSCargaAberta.Transportadora = @TransportadoraID AND OSCargaAberta.Data BETWEEN @DataInicial AND @DataFinal
END

COMMIT TRANSACTION
END
GO

Valeu pessoal!Espero Respostas

Wantuilcezar
   - 12 jul 2004

Fred posso estar enganado mais acho que não existe estes comandos:

SET Update OSDiaria
Set OSDiaria.faturamento=GetDate() , ...

SET Update OSLivre
Set OSLivre.faturamento=GetDate() , ...

SET Update OSCargaAberta
Set OSCargaAberta.faturamento=GetDate() , ...

Acho que o correto seria:

Update OSDiaria
Set OSDiaria.faturamento=GetDate() , ...

Update OSLivre
Set OSLivre.faturamento=GetDate() , ...

Update OSCargaAberta
Set OSCargaAberta.faturamento=GetDate() , ...

Espero ter ajudado.

Fred_montanha
   - 12 jul 2004

Certo Cezar!
O set realmente nao tem necessidade de ter!Mas mesmo assim ele continua sem gravar!Tirei os Set´s dos Updates mas mesmo assim ainda nao Grava!

Marcus.magalhaes
   - 12 jul 2004

Frederico, boa noite.

existem alguns erros na sua proc :

IF @Diaria = 0
SET @TotalOSDiaria = 0
ELSE
BEGIN

-- Errado
SET @TotalOSDiaria = (SELECT SUM((OS.RecebimentoCE * CO.CargaExtra) +
(OS.RecebimentoAN * CO.Adicional) +
(OS.RecebimentoANCE * CO.AdicionalExtra) +
(OS.Recebimento * CO.QteCooperandos))
FROM OSDiaria OS
INNER JOIN vwCooperadorDiariaOS CO ON OS.ID = CO.OS
WHERE OS.Transportadora = @TransportadoraID AND OS.Data BETWEEN @DataInicial AND @DataFinal)

-- Certo => Não tem SET mas sim Select
SELECT @TotalOSDiaria = (SUM((OS.RecebimentoCE * CO.CargaExtra) +
(OS.RecebimentoAN * CO.Adicional) +
(OS.RecebimentoANCE * CO.AdicionalExtra) +
(OS.Recebimento * CO.QteCooperandos))
FROM OSDiaria OS
INNER JOIN vwCooperadorDiariaOS CO ON OS.ID = CO.OS
WHERE OS.Transportadora = @TransportadoraID AND OS.Data BETWEEN @DataInicial AND @DataFinal)

END

--ALTERAÇÃO DAS OS

IF @Diaria <> 0
BEGIN

-- Errado
SET Update OSDiaria
Set OSDiaria.faturamento=GetDate() ,
OSDiaria.Vencimento=@VENCIMENTO ,
OSDiaria.Fatura=@Fatura ,
OSDiaria.TipoFatura=´NOTA´
WHERE OSDiaria.Transportadora = @TransportadoraID AND OSDiaria.Data BETWEEN @DataInicial AND @DataFinal

-- Certo => Não tem SET
Update OSDiaria
Set OSDiaria.faturamento=GetDate() ,
OSDiaria.Vencimento=@VENCIMENTO ,
OSDiaria.Fatura=@Fatura ,
OSDiaria.TipoFatura=´NOTA´
WHERE OSDiaria.Transportadora = @TransportadoraID AND OSDiaria.Data BETWEEN @DataInicial AND @DataFinal

Após corrigir, procure colocar print @@error para capturar os error após as linhas de insert e update, assim vc terá o erro que ocorre (se houver), qdo td estiver funcionando, tire os print´s.

Att,