sp nao grava
12/07/2004
0
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
Fred_montanha
Posts
12/07/2004
Wantuilcezar
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.
12/07/2004
Fred_montanha
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!
12/07/2004
Marcus.magalhaes
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,
Clique aqui para fazer login e interagir na Comunidade :)