· 5 years ago · Sep 09, 2020, 03:20 PM
1USE [PRICHITOTOLO]
2GO
3
4/****** Object: StoredProcedure [dbo].[CSA_RECALC_STK_COM_AVISOS] Script Date: 09/09/2020 16:12:14 ******/
5SET ANSI_NULLS ON
6GO
7
8SET QUOTED_IDENTIFIER ON
9GO
10
11
12CREATE PROCEDURE [dbo].[CSA_RECALC_STK_COM_AVISOS] @dataProcessamento as date=null
13AS
14DECLARE @data AS DATE
15SET @data = ISNULL(@dataProcessamento,GETDATE())
16
17DECLARE @temptable TABLE ( Lixo nvarchar(max) )
18INSERT INTO @temptable
19EXEC GCP_CST_RecalculoStocks
20@ArtigoInicial='',
21@ArtigoFinal='',
22@ArmazemInicial=N'',
23@ArmazemFinal=N'',
24@ArtNecRecalcPCM=0,
25@RecalcQtdReservada=1,
26@ExecPCMDocs=1,
27@NPartes=0,
28@Posto=N'00',
29@Data=@data
30update 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
31update 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
32--Actualização de tipos de artigo
33--actualiza artigos que não tenham tipo preenchido
34update 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
35AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
36--se é do tipo stock mas deixou de ter movimentos no ultimo ano
37update Artigo SET CDU_Tipo='OOR', STKMaximo=0, STKMinimo=0, STKReposicao=0,
38CDU_DiasSTKmin=0, CDU_DiasSTKReposicao=0, CDU_DiasSTKMax=0, CDU_Classificacao='C'
39WHERE CDU_Tipo='STK' AND Artigo NOT IN (
40select distinct artigo from linhasstk where EntradaSaida='S' and modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
41) AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
42if NOT exists (select * from sys.objects where name = 'TDU_ParamsStockFam' and type = 'u')
43CREATE TABLE TDU_ParamsStockFam (
44CDU_Familia nvarchar(10) NOT NULL,
45CDU_DiasSTKmin Integer NOT NULL,
46CDU_DiasSTKReposicao Integer NOT NULL,
47CDU_DiasSTKMax Integer NOT NULL
48)
49--se é do tipo OOR mas teve um movimento de stock
50--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 (
51--select distinct artigo from linhasstk where EntradaSaida='S' and Modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
52--) AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
53if NOT exists (select * from sys.objects where name = 'TDU_ParamsStockFam' and type = 'u')
54BEGIN
55CREATE TABLE [dbo].[TDU_ParamsStockFam](
56 [CDU_Familia] [nvarchar](10) NOT NULL,
57 [CDU_DiasSTKmin] [int] NOT NULL,
58 [CDU_DiasSTKReposicao] [int] NOT NULL,
59 [CDU_DiasSTKMax] [int] NOT NULL,
60 CONSTRAINT [PK_TDU_ParamsStockFam] PRIMARY KEY CLUSTERED
61(
62 [CDU_Familia] ASC
63)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
64) ON [PRIMARY]
65insert into StdTabelasVar (Tabela, Apl) VALUES ('TDU_ParamsStockFam', 'ERP')
66END
67DECLARE @ContagemRegistos INT
68SELECT @ContagemRegistos=COUNT(*) FROM Familias WHERE Familia NOT IN (select CDU_Familia from TDU_ParamsStockFam)
69IF @ContagemRegistos>0
70BEGIN
71INSERT INTO TDU_ParamsStockFam (CDU_Familia, CDU_DiasSTKmin, CDU_DiasSTKReposicao, CDU_DiasSTKMax)
72SELECT 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)
73END
74UPDATE Artigo SET
75Artigo.CDU_Tipo='STK',
76Artigo.CDU_Classificacao='B',
77Artigo.CDU_DiasSTKmin=TDU_ParamsStockFam.CDU_DiasSTKmin,
78Artigo.CDU_DiasSTKReposicao=TDU_ParamsStockFam.CDU_DiasSTKReposicao,
79Artigo.CDU_DiasSTKMax=TDU_ParamsStockFam.CDU_DiasSTKMax
80FROM Artigo INNER JOIN TDU_ParamsStockFam ON Artigo.Familia=TDU_ParamsStockFam.CDU_Familia WHERE Artigo.CDU_Tipo='OOR' AND Artigo.Artigo IN (
81select distinct artigo from linhasstk where EntradaSaida='S' and Modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
82) AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
83--se tem movimentos no ultimo ano então é do tipo stock
84update Artigo SET CDU_Tipo='STK' WHERE Artigo IN (
85select distinct artigo from linhasstk where EntradaSaida='S' and Modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
86) AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
87--se não tem movimentos no ultimo ano então é do tipo OOR - on order request
88update Artigo SET CDU_Tipo='OOR', STKMaximo=0, STKMinimo=0, STKReposicao=0,
89CDU_DiasSTKmin=0, CDU_DiasSTKReposicao=0, CDU_DiasSTKMax=0, CDU_Classificacao='C'
90WHERE Artigo NOT IN (
91select distinct artigo from linhasstk where EntradaSaida='S' and Modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
92) AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
93DECLARE @tempArtigoAD TABLE (Artigo nvarchar(50), AnualDemand real)
94INSERT INTO @tempArtigoAD
95SELECT
96LinhasSTK.Artigo,
97dbo.CSA_Devolve_ValorArredondado(SUM(linhasstk.Quantidade*dbo.CSA_Devolve_FactorConversao(linhasstk.Unidade, linhasstk.Artigo))) AS AnualDemand
98FROM linhasstk
99INNER JOIN Artigo ON LinhasSTK.Artigo=Artigo.Artigo
100WHERE EntradaSaida='S' AND Modulo='C' AND linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
101AND Artigo.CDU_Tipo='STK'
102GROUP BY LinhasSTK.Artigo
103DECLARE @numDias as integer
104SET @numDias = DATEDIFF(DD,DATEADD(YY,-1,getdate()), getdate() )
105--actualiza as fichas dos artigos que foram recalculados, stock minimo, maximo e de reposição, arredondado ás unidades
106UPDATE Artigo SET STKMinimo=dbo.CSA_Devolve_ValorArredondado_PorDefeito(ArtigoAD.AnualDemand/@numDias * Artigo.CDU_DiasSTKmin,1),
107 STKMaximo=dbo.CSA_Devolve_ValorArredondado_PorDefeito(ArtigoAD.AnualDemand/@numDias * Artigo.CDU_DiasSTKMax,1),
108 STKReposicao=dbo.CSA_Devolve_ValorArredondado_PorDefeito(ArtigoAD.AnualDemand/@numDias * Artigo.CDU_DiasSTKReposicao,1)
109FROM Artigo INNER JOIN @tempArtigoAD ArtigoAD ON Artigo.Artigo=ArtigoAD.Artigo
110WHERE Artigo.CDU_Tipo='STK' AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
111update Artigo SET CDU_Tipo='STK', STKMaximo=1 WHERE Artigo IN (
112select distinct artigo from linhasstk where EntradaSaida='S' and Modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
113) AND STKMaximo=0 AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
114update Artigo SET CDU_Tipo='STK', STKMinimo=1 WHERE Artigo IN (
115select distinct artigo from linhasstk where EntradaSaida='S' and Modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
116) AND STKMinimo=0 AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
117update Artigo SET CDU_Tipo='STK', STKReposicao=1 WHERE Artigo IN (
118select distinct artigo from linhasstk where EntradaSaida='S' and Modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
119) AND STKReposicao=0 AND Artigo.Artigo NOT IN (select Artigo from Artigo where cdu_preventrecalc=1)
120DECLARE @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)
121INSERT INTO @tmpTable
122select LinhasSTK.Artigo,
123dbo.CSA_Devolve_ArtigoDescricao(LinhasSTK.Artigo) AS Descricao,
124dbo.CSA_Devolve_ValorArredondado(SUM(linhasstk.Quantidade*dbo.CSA_Devolve_FactorConversao(linhasstk.Unidade, linhasstk.Artigo))) AS AnualDemand,
125dbo.CSA_Devolve_ValorArredondado_PorDefeito(dbo.CSA_Devolve_STKSeguranca(LinhasSTK.Artigo),1) AS STKSeguranca,
126dbo.CSA_Devolve_ValorArredondado_PorDefeito(dbo.CSA_Devolve_STKReposicao(LinhasSTK.Artigo),1) AS STKReposicao,
127dbo.CSA_Devolve_ValorArredondado_PorDefeito(dbo.CSA_Devolve_STKMaximo(LinhasSTK.Artigo),1) AS STKMaximo,
128dbo.CSA_Devolve_STKActual(LinhasSTK.Artigo) AS STKActual,
129dbo.CSA_Devolve_ValorArredondado(dbo.CSA_Devolve_QntEconomica(LinhasSTK.Artigo)) AS QuantidadeEconomica,
130dbo.CSA_Devolve_Artigo_OO_Normais(LinhasSTK.Artigo) AS QuantidadeOnOrderSTK,
131dbo.CSA_Devolve_Artigo_OO_Reservas(LinhasSTK.Artigo) AS QuantidadeOnOrderReservada,
132dbo.CSA_Devolve_Qnt_A_COMPRAR(LinhasSTK.Artigo) AS QuantidadeProposta,
133dbo.CSA_Devolve_Artigo_PMU(LinhasSTK.Artigo) AS PMU,
134dbo.CSA_Devolve_Artigo_NrRequests(LinhasSTK.Artigo) AS NrRequests
135from linhasstk
136INNER JOIN Artigo ON LinhasSTK.Artigo=Artigo.Artigo
137where EntradaSaida='S' AND Modulo='C' and linhasstk.Data BETWEEN DATEADD(YY,-1,getdate()) AND getdate()
138AND Artigo.CDU_Tipo='STK'
139GROUP BY LinhasSTK.Artigo
140DECLARE @TranName VARCHAR(20);
141SELECT @TranName = 'TRANS1';
142BEGIN TRANSACTION @TranName;
143BEGIN TRY
144if exists (select * from sys.objects where name = 'tmpAvisos' and type = 'u')
145 drop table tmpAvisos
146SELECT * INTO tmpAvisos FROM @tmpTable
147COMMIT TRANSACTION @TranName;
148END TRY
149BEGIN CATCH
150 ROLLBACK transaction @TranName;
151END CATCH
152GO
153
154