Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/10/2011, 15:11
Rro237
 
Fecha de Ingreso: agosto-2009
Mensajes: 45
Antigüedad: 15 años, 4 meses
Puntos: 2
Problema con Procedimiento Almacenado

Estimados, muy buenas tardes.

De momento estoy generando un SP el cual me debe arrojar datos a modo de alimentacion de un reporte, esto me funciona perfectamente, salvo por un pequeño problema.

El SP es el siguiente:

Código:
CREATE PROCEDURE [dbo].[VCPP_PAPEL_CLIENTE]
@ANIO1 int,
@ANIO2 int,
@PAPEL CHAR(1),
@CLIENTE varchar(80)

AS

declare @TIPO CHAR(3), @FAC_Num int,  @FAC_CodCliente nvarchar(50), @CL_razonSocial nvarchar(50), @FAC_FechaEmision datetime, @FAC_TotalNeto int, @NC_TotalNeto int


CREATE TABLE #VentasNetasMes (FAC_Num INT, 
                    FAC_FechaEmision datetime, 
                    FAC_TotalNeto int)

DECLARE C_facturas  CURSOR FOR 

    select     'FAC' ,
        FAC_Num, 
        FAC_FechaEmision, 
        FAC_TotalNeto = isnull((select sum(isnull(ITFAC_Neto, 0)) from [FACTURA ITEM] where FAC_Num = ITFAC_Num),0)
--        ISNULL(FAC_TotalNeto,0)
    from [factura] 
    where FAC_FechaEmision is not null AND EXISTS(SELECT * FROM [FACTURA ITEM],[ORDEN DE TRABAJO ITEM]  
                                                    WHERE FAC_NUM = ITFAC_NUM AND ITFAC_NUMOT = OTD_NUM AND ITFAC_IDDETALLE = OTD_IDDETALLE AND OTD_PAPEL = @PAPEL)
    AND YEAR(FAC_FechaEmision)  between @ANIO1 and @ANIO2
    AND FAC_CodCliente = @CLIENTE
    UNION ALL
    select     'NC',
        NC_Num, 
        NC_FechaEmision, 
        NC_TotalNeto = isnull((select sum(isnull(NCIT_Neto, 0)) from [NOTA CREDITO ITEM] Where NC_Num = NCIT_Num ),0)
--        ISNULL(NC_TotalNeto,0)
    from [NOTA CREDITO] 
    where NC_FechaEmision is not null AND EXISTS(SELECT * FROM [NOTA CREDITO ITEM],[ORDEN DE TRABAJO ITEM]  WHERE NC_NUM = NCIT_NUM AND NCIT_NUMOT = OTD_NUM AND NCIT_IDDETALLE = OTD_IDDETALLE AND OTD_PAPEL = @PAPEL)
    AND YEAR(NC_FechaEmision)  between @ANIO1 and @ANIO2
    AND NC_CodCliente = @CLIENTE
OPEN C_facturas

FETCH NEXT FROM C_facturas
INTO @TIPO,  @FAC_Num , @FAC_FechaEmision, @FAC_TotalNeto

WHILE @@FETCH_STATUS = 0
BEGIN
    IF @TIPO = 'NC'
        SELECT @FAC_TotalNeto = @FAC_TotalNeto *(-1)

   INSERT INTO #VentasNetasMes (FAC_Num, FAC_FechaEmision, FAC_TotalNeto)VALUES(@FAC_Num, @FAC_FechaEmision, @FAC_TotalNeto)

   FETCH NEXT FROM C_facturas
   INTO @TIPO, @FAC_Num , @FAC_FechaEmision, @FAC_TotalNeto
END


CLOSE C_facturas
DEALLOCATE C_facturas

select ano=datepart(yyyy, FAC_FechaEmision), 
    mes=datepart(mm, FAC_FechaEmision), 
    total = sum(FAC_TotalNeto) 
from #VentasNetasMes
group by datepart(yyyy, FAC_FechaEmision), datepart(mm, FAC_FechaEmision)
order by 1,2
GO
Los datos son arrojados correctamente al momento de generar la siguiente consulta desde la aplicación:

Código:
Exec VCPP_PAPEL_CLIENTE '2010', '2011', 'R', '96861750-8'
El SP lo trabajo con cursores. Necesito averiguar la forma de que cuando no existan datos en un determinado periodo me arroje como valor 0.
Pues como aun no soluciono esto me genera un reporte incompleto debido a que falta lo que indiqué anteriormente.


Agradezco cualquier ayuda de uds.

Saludos.

Última edición por Rro237; 19/10/2011 a las 15:17