Skip to content

Instantly share code, notes, and snippets.

@gustavoleo
Created April 2, 2024 13:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gustavoleo/2ebc88e438f3d8dd5d72243abb723725 to your computer and use it in GitHub Desktop.
Save gustavoleo/2ebc88e438f3d8dd5d72243abb723725 to your computer and use it in GitHub Desktop.
Estoque
USE [CIGAM]
GO
/****** Object: UserDefinedFunction [dbo].[CGFC_EST_ESTOQUE] Script Date: 4/2/2024 10:14:13 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[CGFC_EST_ESTOQUE](@p_data DATETIME,@p_unidadeNegocio VARCHAR(3))
RETURNS TABLE AS
RETURN SELECT Estoque.unidadeNegocio AS unidade_negocio,
Estoque.material AS material,
Estoque.centroArmazenagem AS centro_armazenagem,
Estoque.especif1 AS especif1,
Estoque.especif2 AS especif2,
Estoque.especif3 AS especif3,
Estoque.numeracao AS numeracao,
Estoque.lote AS lote,
MAX(Estoque.validadeLote) AS validade_lote,
SUM(Estoque.quantidade) AS quantidade,
MAX(Estoque.Dt_fabricacao) AS Data_fabricacao,
--Ainda n�o contempla nenhum tipo de pre�o e pe�as
0 AS pecas,
0 AS preco_medio,
0 AS preco_custo
FROM
(SELECT I.cd_uni_neg AS unidadeNegocio,
I.cd_material AS material,
I.cd_centro_armaz AS centroArmazenagem,
CASE WHEN grp.ctrl_especif1 = 'E' THEN I.Cd_especif1 ELSE ' ' END AS especif1,
CASE WHEN grp.ctrl_especif2 = 'E' THEN I.Cd_especif2 ELSE ' ' END AS especif2,
CASE WHEN grp.ctrl_especif3 = 'E' THEN I.Cd_especif3 ELSE ' ' END AS especif3,
I.Cd_numeracao as numeracao,
I.lote AS lote,
E.Dt_De_Validade AS validadeLote,
I.Quantidade AS quantidade,
E.Campo44 as Dt_fabricacao
FROM ESITEMINVENT I with (NOLOCK)
INNER JOIN ESMATERI mat with (NOLOCK) ON(mat.Cd_material = I.Cd_material)
INNER JOIN ESGRUPO grp with (NOLOCK) ON(GRP.Cd_grupo = mat.Cd_grupo)
LEFT JOIN ESESTOQU E with (NOLOCK) ON(E.cd_unidade_de_n = I.Cd_Uni_Neg
AND E.Cd_Material = I.Cd_Material
AND E.Cd_Centro_Armaz = I.Cd_Centro_Armaz
AND E.Cd_Especif1 = I.Cd_Especif1
AND E.Especif2 = I.Cd_Especif2
AND E.Especif3 = I.Cd_Especif3
AND E.Numeracao = I.Cd_Numeracao
AND E.Lote = I.Lote)
--Busca data do �ltimo invent�rio, caso n�o exista, busca do dia do saldo incial
WHERE I.Cd_uni_neg = @p_unidadeNegocio
AND I.Dt_inventario= ISNULL(dbo.CGFC_EST_BUSCA_ULT_INVENT(@p_unidadeNegocio, @p_data,'N'),
dbo.CGFC_DATETIMESTAMP_TO_DATE(CAST(dbo.CGFC_BUSCA_CONFIGURACAO(644,null) AS DATETIME))-1)
UNION ALL
SELECT mo.uni_neg AS unidadeNegocio,
mo.cd_material AS material,
mo.cd_centro_armaz AS centroArmazenagem,
CASE WHEN grp.ctrl_especif1 = 'E' THEN mo.cd_especif1 ELSE ' ' END AS especif1,
CASE WHEN grp.ctrl_especif2 = 'E' THEN mo.especif2 ELSE ' ' END AS especif2,
CASE WHEN grp.ctrl_especif3 = 'E' THEN ISNULL(g.especif3,' ') ELSE ' ' END AS especif3,
ISNULL(g.numeracao,' ') AS numeracao,
ISNULL(g.lote,' ') AS lote,
e.dt_de_validade AS validadeLote,
ROUND(COALESCE(g.quantidade,CASE WHEN mat.Campo85 = ' ' THEN mo.quantidade ELSE 0 END),6) * CASE mo.tipo_movimento WHEN 'S' THEN -1 ELSE 1 END AS quantidade,
E.Campo44 as Dt_fabricacao
FROM ESMOVIME mo with (NOLOCK)
LEFT JOIN ESGMOVIM g with (NOLOCK) ON g.movimento=mo.movimento
INNER JOIN ESESPECI es with (NOLOCK) ON (es.cd_especie_esto=mo.cd_esp_estoque and es.tipo<>'N')
INNER JOIN ESMATERI mat with (NOLOCK) ON (mo.Cd_material = mat.Cd_material AND mat.Tipo <> 'S' AND mat.Tipo <> 'N' AND mat.Campo94 <> 1)
INNER JOIN ESGRUPO grp with (NOLOCK) ON (GRP.Cd_grupo = mat.Cd_grupo)
LEFT JOIN ESESTOQU E with (NOLOCK) ON(E.cd_unidade_de_n = mo.uni_neg
AND E.Cd_Material = mo.cd_material
AND E.Cd_Centro_Armaz = mo.cd_centro_armaz
AND E.Cd_Especif1 = mo.cd_especif1
AND E.Especif2 = mo.especif2
AND E.Especif3 = g.especif3
AND E.Numeracao = g.numeracao
AND E.Lote = g.lote)
WHERE MO.uni_neg = @p_unidadeNegocio
AND MO.Dt_movimento > ISNULL(dbo.CGFC_EST_BUSCA_ULT_INVENT(@p_unidadeNegocio, @p_data,'N'),
dbo.CGFC_DATETIMESTAMP_TO_DATE(CAST(dbo.CGFC_BUSCA_CONFIGURACAO(644,null) AS DATETIME))-1)
AND MO.DT_MOVIMENTO <= @p_data
AND COALESCE(g.atualiza,mo.atualiza) = 'A'
) Estoque
GROUP BY Estoque.unidadeNegocio,
Estoque.material,
Estoque.centroArmazenagem,
Estoque.especif1,
Estoque.especif2,
Estoque.especif3,
Estoque.numeracao,
Estoque.lote
GO
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment