USE [SInFlex_Produnoa]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[PCP_SeguimientoOCM]
@Desde datetime,
@Hasta datetime,
@Tipo nvarchar(2)
AS
IF (@Tipo = 'P')
BEGIN
-- Crear tabla temporal #TempB
SELECT
A.MovimientoID,
A.Linea,
A.FechaComprobante,
B.Numero AS PedidoNumero,
A.FechaNecesidad as Fec_Nec,
A.ArticuloID,
C.Codigo AS ArticuloCodigo,
C.Descripcion AS ArticuloDescripcion,
A.Cantidad AS Cant_PED,
A.Precio AS Precio_PED,
ISNULL(E.Numero, '') as NumOC,
ISNULL(F.Cantidad, 0) as Cant_OCM
INTO #TempB
FROM TCP_PedidoDeCompra_Articulo A
INNER JOIN TCP_PedidoDeCompra B ON B.MovimientoID = A.MovimientoID
INNER JOIN TAL_Articulo C ON C.ArticuloID = A.ArticuloID
LEFT JOIN TCP_OrdenDeCompra_Pedido D ON D.MovimientoID_PED = A.MovimientoID AND D.Linea_PED = A.Linea
LEFT JOIN TCP_OrdenDeCompra_Detalle_ALM F ON F.MovimientoID = D.MovimientoID AND F.Linea = D.Linea AND F.ArticuloID = A.ArticuloID
LEFT JOIN TCP_OrdenDeCompra E ON E.MovimientoID = F.MovimientoID
WHERE B.Anulado = 0
AND (E.Anulado = 0 OR E.Anulado IS NULL)
AND A.FechaComprobante >= '01/01/2024'--@Desde
AND A.FechaComprobante <= '01/06/2024'--@Hasta
ORDER BY A.MovimientoID, A.Linea;
-- Crear tabla temporal #Mayor0 con cantidades agrupadas
SELECT
B.MovimientoID as movID,
A.ArticuloID,
A.FechaComprobante AS Fecha,
A.MovimientoID,
B.Comprobante,
B.Numero,
SUM(A.Cantidad) AS Cantidad -- Sumar cantidades para el mismo ArticuloID
INTO #Mayor0
FROM TAL_Movimiento_Detalle A
INNER JOIN TAL_Movimiento B ON B.EstabID = A.EstabID AND B.MovimientoID = A.MovimientoID
INNER JOIN TGR_TipoDeMovimiento D ON D.TipoDeMovimientoID = B.TipoDeMovimientoID
INNER JOIN TAL_Articulo C ON C.ArticuloID = A.ArticuloID
WHERE B.Anulado = 0
AND A.FechaComprobante >= '01/01/2024'--@Desde
AND A.FechaComprobante <= '01/06/2024'--@Hasta
AND B.DepositoID = 2
AND C.TipoDeArticuloID = 2
AND B.Comprobante = 'ING'
GROUP BY
B.MovimientoID,
A.ArticuloID,
A.FechaComprobante,
A.MovimientoID,
B.Comprobante,
B.Numero
ORDER BY Numero, ArticuloID, Fecha, B.MovimientoID;
WITH FilteredResults AS (
SELECT DISTINCT
TB.MovimientoID,
TB.Linea,
TB.FechaComprobante,
TB.PedidoNumero,
TB.Fec_Nec,
TB.ArticuloID,
TB.ArticuloCodigo,
TB.ArticuloDescripcion,
TB.Cant_PED,
TB.Precio_PED,
TB.NumOC,
TB.Cant_OCM,
M1.movID,
M1.Fecha AS Fecha_ING,
M1.Numero AS Numero_ING,
M1.Cantidad AS Cantidad_ING
FROM #TempB TB
LEFT JOIN TAL_Movimiento_Recepcion MR ON MR.MovimientoID_OCM = TB.NumOC
LEFT JOIN #Mayor0 M1 ON M1.MovimientoID = MR.MovimientoID AND M1.ArticuloID = TB.ArticuloID
)
SELECT DISTINCT
FR.MovimientoID,
FR.Linea,
FR.FechaComprobante,
FR.PedidoNumero,
FR.Fec_Nec,
FR.ArticuloID,
FR.ArticuloCodigo,
FR.ArticuloDescripcion,
FR.Cant_PED,
FR.Precio_PED,
FR.NumOC,
FR.Cant_OCM,
FR.movID,
FR.Fecha_ING AS Fecha_ING,
MAX(FR.Numero_ING) AS Numero_ING,
SUM(FR.Cantidad_ING) AS Cantidad_ING -- Sumar las cantidades ingresadas
INTO #TempA
FROM FilteredResults FR
GROUP BY
FR.MovimientoID,
FR.Linea,
FR.FechaComprobante,
FR.PedidoNumero,
FR.Fec_Nec,
FR.ArticuloID,
FR.ArticuloCodigo,
FR.ArticuloDescripcion,
FR.Cant_PED,
FR.Precio_PED,
FR.NumOC,
FR.Cant_OCM,
FR.movID,
FR.Fecha_ING
HAVING COUNT(DISTINCT FR.Fecha_ING) + COUNT(DISTINCT FR.Numero_ING) + COUNT(DISTINCT FR.Cantidad_ING) > 0
OR (COUNT(DISTINCT FR.Fecha_ING) = 0 AND COUNT(DISTINCT FR.Numero_ING) = 0 AND COUNT(DISTINCT FR.Cantidad_ING) = 0);
-- Crear la tabla final con filas duplicadas
WITH Facturacion AS (
SELECT
B.MovimientoID_STK AS MovimientoID,
A.ArticuloID,
MAX(D.FechaComprobante) AS Fec_Fact,
MAX(D.Numero) AS NumFact,
SUM(C.Cantidad) AS Cant_Fact,
MAX(C.Precio) AS Precio,
C.Referencia1 as Cmpbte,
D.ProveedorID as Prov,
D.Nombre as Proveedor
FROM #TempA A
LEFT JOIN TCP_Movimiento_Recepcion B ON B.MovimientoID_STK = A.movID
LEFT JOIN TCP_Movimiento_Articulo_ALM C ON C.MovimientoID = B.MovimientoID AND A.ArticuloID = C.ArticuloID
LEFT JOIN TCP_Movimiento D ON D.MovimientoID = C.MovimientoID
GROUP BY B.MovimientoID_STK, A.ArticuloID, C.Referencia1, D.ProveedorID, D.Nombre
),
FinalResult AS (
SELECT
A.*,
F.Fec_Fact,
F.NumFact,
F.Cant_Fact,
F.Precio,
F.Cmpbte,
F.Prov,
F.Proveedor,
ROW_NUMBER() OVER (PARTITION BY A.MovimientoID, A.Linea, A.ArticuloID ORDER BY A.MovimientoID) AS RowNum
FROM #TempA A
LEFT JOIN Facturacion F ON A.movID = F.MovimientoID AND A.ArticuloID = F.ArticuloID
)
-- Seleccionar solo las filas con RowNum = 1 para eliminar duplicados
SELECT
MovimientoID,
Linea,
FechaComprobante,
PedidoNumero,
Fec_Nec,
ArticuloID,
ArticuloCodigo,
ArticuloDescripcion,
Cant_PED,
Precio_PED,
NumOC,
Cant_OCM,
movID,
Fecha_ING,
Numero_ING,
Cantidad_ING,
Fec_Fact,
NumFact,
Cant_Fact,
Precio,
Cmpbte,
Prov,
Proveedor
FROM FinalResult
WHERE RowNum = 1;
--select*from #TempB
DROP TABLE #Mayor0
DROP TABLE #TempB
DROP TABLE #TempA
END;--