Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- USE [PRICUANGO]
- GO
- /****** Object: StoredProcedure [dbo].[CSA_RECALC_STK_COM_AVISOS] Script Date: 14/02/2019 15:29:44 ******/
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- ALTER PROCEDURE [dbo].[CSA_RECALC_STK_COM_AVISOS] @dataProcessamento as date=null
- AS
- DECLARE @data AS DATE
- SET @data = ISNULL(@dataProcessamento,GETDATE())
- DECLARE @temptable TABLE ( Lixo nvarchar(max) )
- INSERT INTO @temptable
- EXEC GCP_CST_RecalculoStocks
- @ArtigoInicial='',
- @ArtigoFinal='',
- @ArmazemInicial=N'',
- @ArmazemFinal=N'',
- @ArtNecRecalcPCM=0,
- @RecalcQtdReservada=1,
- @ExecPCMDocs=1,
- @NPartes=0,
- @Posto=N'00',
- @Data=@data
- update t1 set Activo=0 from ArtigoLote t1 inner join (select DISTINCT Artigo, Lote from ##RecalculoStk where Posto='00' AND Lote<>'<L01>' group by Artigo, Lote HAVING SUM(QuantidadeArm)=0) t2 on t1.Artigo=t2.Artigo AND t1.Lote=t2.Lote
- update t1 set Activo=1 from ArtigoLote t1 inner join (select DISTINCT Artigo, Lote from ##RecalculoStk where Posto='00' AND Lote<>'<L01>' group by Artigo, Lote HAVING SUM(QuantidadeArm)>0) t2 on t1.Artigo=t2.Artigo AND t1.Lote=t2.Lote
- --Actualização de tipos de artigo
- --actualiza artigos que não tenham tipo preenchido
- update Artigo SET CDU_Tipo='OOR', CDU_Classificacao='C', CDU_DiasSTKmin=0, CDU_DiasSTKReposicao=0, CDU_DiasSTKMax=0 WHERE CDU_Tipo='' OR CDU_Tipo IS NULL
- AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
- --se é do tipo stock mas deixou de ter movimentos no ultimo ano
- update Artigo SET CDU_Tipo='OOR', STKMaximo=0, STKMinimo=0, STKReposicao=0,
- CDU_DiasSTKmin=0, CDU_DiasSTKReposicao=0, CDU_DiasSTKMax=0, CDU_Classificacao='C'
- WHERE CDU_Tipo='STK' AND Artigo NOT IN (
- select distinct artigo from linhasstk where EntradaSaida='S' and modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
- ) AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
- if NOT exists (select * from sys.objects where name = 'TDU_ParamsStockFam' and type = 'u')
- CREATE TABLE TDU_ParamsStockFam (
- CDU_Familia nvarchar(10) NOT NULL,
- CDU_DiasSTKmin Integer NOT NULL,
- CDU_DiasSTKReposicao Integer NOT NULL,
- CDU_DiasSTKMax Integer NOT NULL
- )
- --se é do tipo OOR mas teve um movimento de stock
- --update Artigo SET CDU_Tipo='STK', CDU_Classificacao='B', CDU_DiasSTKmin=31, CDU_DiasSTKReposicao=183, CDU_DiasSTKMax=244 WHERE CDU_Tipo='OOR' AND Artigo IN (
- --select distinct artigo from linhasstk where EntradaSaida='S' and Modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
- --) AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
- if NOT exists (select * from sys.objects where name = 'TDU_ParamsStockFam' and type = 'u')
- BEGIN
- CREATE TABLE [dbo].[TDU_ParamsStockFam](
- [CDU_Familia] [nvarchar](10) NOT NULL,
- [CDU_DiasSTKmin] [int] NOT NULL,
- [CDU_DiasSTKReposicao] [int] NOT NULL,
- [CDU_DiasSTKMax] [int] NOT NULL,
- CONSTRAINT [PK_TDU_ParamsStockFam] PRIMARY KEY CLUSTERED
- (
- [CDU_Familia] ASC
- )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
- ) ON [PRIMARY]
- insert into StdTabelasVar (Tabela, Apl) VALUES ('TDU_ParamsStockFam', 'ERP')
- END
- DECLARE @ContagemRegistos INT
- SELECT @ContagemRegistos=COUNT(*) FROM Familias WHERE Familia NOT IN (select CDU_Familia from TDU_ParamsStockFam)
- IF @ContagemRegistos>0
- BEGIN
- INSERT INTO TDU_ParamsStockFam (CDU_Familia, CDU_DiasSTKmin, CDU_DiasSTKReposicao, CDU_DiasSTKMax)
- SELECT Familia AS CDU_Familia, 31 AS CDU_DiasSTKmin, 183 AS CDU_DiasSTKReposicao, 244 AS CDU_DiasSTKMax FROM Familias WHERE Familia NOT IN (select CDU_Familia from TDU_ParamsStockFam)
- END
- UPDATE Artigo SET
- Artigo.CDU_Tipo='STK',
- Artigo.CDU_Classificacao='B',
- Artigo.CDU_DiasSTKmin=TDU_ParamsStockFam.CDU_DiasSTKmin,
- Artigo.CDU_DiasSTKReposicao=TDU_ParamsStockFam.CDU_DiasSTKReposicao,
- Artigo.CDU_DiasSTKMax=TDU_ParamsStockFam.CDU_DiasSTKMax
- FROM Artigo INNER JOIN TDU_ParamsStockFam ON Artigo.Familia=TDU_ParamsStockFam.CDU_Familia WHERE Artigo.CDU_Tipo='OOR' AND Artigo.Artigo IN (
- select distinct artigo from linhasstk where EntradaSaida='S' and Modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
- ) AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
- --se tem movimentos no ultimo ano então é do tipo stock
- update Artigo SET CDU_Tipo='STK' WHERE Artigo IN (
- select distinct artigo from linhasstk where EntradaSaida='S' and Modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
- ) AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
- --se não tem movimentos no ultimo ano então é do tipo OOR - on order request
- update Artigo SET CDU_Tipo='OOR', STKMaximo=0, STKMinimo=0, STKReposicao=0,
- CDU_DiasSTKmin=0, CDU_DiasSTKReposicao=0, CDU_DiasSTKMax=0, CDU_Classificacao='C'
- WHERE Artigo NOT IN (
- select distinct artigo from linhasstk where EntradaSaida='S' and Modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
- ) AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
- DECLARE @tempArtigoAD TABLE (Artigo nvarchar(50), AnualDemand real)
- INSERT INTO @tempArtigoAD
- SELECT
- LinhasSTK.Artigo,
- dbo.CSA_Devolve_ValorArredondado(SUM(linhasstk.Quantidade*dbo.CSA_Devolve_FactorConversao(linhasstk.Unidade, linhasstk.Artigo))) AS AnualDemand
- FROM linhasstk
- INNER JOIN Artigo ON LinhasSTK.Artigo=Artigo.Artigo
- WHERE EntradaSaida='S' AND Modulo='C' AND linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
- AND Artigo.CDU_Tipo='STK'
- GROUP BY LinhasSTK.Artigo
- DECLARE @numDias as integer
- SET @numDias = DATEDIFF(DD,DATEADD(YY,-1,getdate()), getdate() )
- --actualiza as fichas dos artigos que foram recalculados, stock minimo, maximo e de reposição, arredondado ás unidades
- UPDATE Artigo SET STKMinimo=dbo.CSA_Devolve_ValorArredondado_PorDefeito(ArtigoAD.AnualDemand/@numDias * Artigo.CDU_DiasSTKmin,1),
- STKMaximo=dbo.CSA_Devolve_ValorArredondado_PorDefeito(ArtigoAD.AnualDemand/@numDias * Artigo.CDU_DiasSTKMax,1),
- STKReposicao=dbo.CSA_Devolve_ValorArredondado_PorDefeito(ArtigoAD.AnualDemand/@numDias * Artigo.CDU_DiasSTKReposicao,1)
- FROM Artigo INNER JOIN @tempArtigoAD ArtigoAD ON Artigo.Artigo=ArtigoAD.Artigo
- WHERE Artigo.CDU_Tipo='STK' AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
- update Artigo SET CDU_Tipo='STK', STKMaximo=1 WHERE Artigo IN (
- select distinct artigo from linhasstk where EntradaSaida='S' and Modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
- ) AND STKMaximo=0 AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
- update Artigo SET CDU_Tipo='STK', STKMinimo=1 WHERE Artigo IN (
- select distinct artigo from linhasstk where EntradaSaida='S' and Modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
- ) AND STKMinimo=0 AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
- update Artigo SET CDU_Tipo='STK', STKReposicao=1 WHERE Artigo IN (
- select distinct artigo from linhasstk where EntradaSaida='S' and Modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
- ) AND STKReposicao=0 AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
- DECLARE @tmpTable AS TABLE (Artigo nvarchar(50), Descricao nvarchar(150), AnualDemand real, STKSeguranca real, STKReposicao real, STKMaximo real, STKActual real, QuantidadeEconomica real, QuantidadeOnOrderSTK real, QuantidadeOnOrderReserved real, QuantidadeProposta real, PMU real, NrRequests real)
- INSERT INTO @tmpTable
- select LinhasSTK.Artigo,
- dbo.CSA_Devolve_ArtigoDescricao(LinhasSTK.Artigo) AS Descricao,
- dbo.CSA_Devolve_ValorArredondado(SUM(linhasstk.Quantidade*dbo.CSA_Devolve_FactorConversao(linhasstk.Unidade, linhasstk.Artigo))) AS AnualDemand,
- dbo.CSA_Devolve_ValorArredondado_PorDefeito(dbo.CSA_Devolve_STKSeguranca(LinhasSTK.Artigo),1) AS STKSeguranca,
- dbo.CSA_Devolve_ValorArredondado_PorDefeito(dbo.CSA_Devolve_STKReposicao(LinhasSTK.Artigo),1) AS STKReposicao,
- dbo.CSA_Devolve_ValorArredondado_PorDefeito(dbo.CSA_Devolve_STKMaximo(LinhasSTK.Artigo),1) AS STKMaximo,
- dbo.CSA_Devolve_STKActual(LinhasSTK.Artigo) AS STKActual,
- dbo.CSA_Devolve_ValorArredondado(dbo.CSA_Devolve_QntEconomica(LinhasSTK.Artigo)) AS QuantidadeEconomica,
- dbo.CSA_Devolve_Artigo_OO_Normais(LinhasSTK.Artigo) AS QuantidadeOnOrderSTK,
- dbo.CSA_Devolve_Artigo_OO_Reservas(LinhasSTK.Artigo) AS QuantidadeOnOrderReservada,
- dbo.CSA_Devolve_Qnt_A_COMPRAR(LinhasSTK.Artigo) AS QuantidadeProposta,
- dbo.CSA_Devolve_Artigo_PMU(LinhasSTK.Artigo) AS PMU,
- dbo.CSA_Devolve_Artigo_NrRequests(LinhasSTK.Artigo) AS NrRequests
- from linhasstk
- INNER JOIN Artigo ON LinhasSTK.Artigo=Artigo.Artigo
- where EntradaSaida='S' AND Modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
- AND Artigo.CDU_Tipo='STK'
- GROUP BY LinhasSTK.Artigo
- DECLARE @TranName VARCHAR(20);
- SELECT @TranName = 'TRANS1';
- BEGIN TRANSACTION @TranName;
- BEGIN TRY
- if exists (select * from sys.objects where name = 'tmpAvisos' and type = 'u')
- drop table tmpAvisos
- SELECT * INTO tmpAvisos FROM @tmpTable
- COMMIT TRANSACTION @TranName;
- END TRY
- BEGIN CATCH
- ROLLBACK transaction @TranName;
- END CATCH
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement