Advertisement
Guest User

Untitled

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