Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 23 Horas
jcartaza jcartaza is offline
Registrado
 
Registrado: may 2023
Posts: 5
Poder: 0
jcartaza Va por buen camino
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

Código SQL [-]
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
Archivos Adjuntos
Tipo de Archivo: rar Doc1.rar (80,2 KB, 0 visitas)

Última edición por Neftali [Germán.Estévez] fecha: Hace 11 Horas a las 10:17:45. Razón: Añadir TAGs al mensaje ([SQL])
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 21:34:45.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi