FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
ayuda con un procedimiento almacenado
buenas amigos!!! necesito de su bastos conocimientos para ver si me ayudan a solucionar el siguiente problema con un procedimiento. Este busca seguir la trayectoria de un pedido de compra que puede estar autorizado o no, de estarlo se genera una orden de compra esta puede ser parcial o total, referido a la cantidad de articulos que tenga el pedido, esta orden de compra se ingresa a almacen y puede darse el caso que tambien parcial o total, quedando pendiente en caso de ser parcial. entonces se pueden generar mas un ingreso por cada orden de compra y por diferentes cantidades. la misma situacion se presenta en la facturacion. entonces es bien complejo este procedimiento. comparto codigo de lo que voy generando pero me muestra filas duplicadas y algun otro detalle indeseado. estare muy agradecido por cualquier tipo de ayuda q me puedan brindar. adjunto codigo
USE [SInFlex_Produnoa] GO /****** Object: StoredProcedure [dbo].[PCP_SeguimientoOCM] Script Date: 30/05/2024 11:09:42 ******/ 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;-- y devuelve este resultado donde muestra el mismo numero de ingreso con la misma cantidad lo cual no es correcto: adjunto el documento con una imagen de los resultados. repito desde ya mis agradecimientos a cualquier tipo de ayuda. saludos cordiales |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ayuda con procedimiento almacenado | XBart | Firebird e Interbase | 8 | 02-02-2010 11:05:50 |
ayuda con procedimiento almacenado | microbiano | Internet | 6 | 10-09-2008 03:11:15 |
ayuda con el codigo de procedimiento almacenado | pipecato | MS SQL Server | 3 | 13-12-2005 03:41:35 |
ayuda con el procedimiento almacenado | pipecato | Varios | 1 | 13-12-2005 03:38:26 |
Ayuda sobre un Procedimiento Almacenado | Nuria | Firebird e Interbase | 6 | 21-01-2004 13:18:15 |
|