Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Parámetros del procedimiento almacenado (https://www.clubdelphi.com/foros/showthread.php?t=37063)

efelix 01-11-2006 15:18:25

Parámetros del procedimiento almacenado
 
Hola a todos, saludos. Tengo el siguiente procedimiento almacenado en Microsoft Sql Server 2000:
Código SQL [-]
CREATE PROCEDURE spImporteTotalEdadCuentasxPagar
               (@Dias integer,
                @Importe money OUTPUT,
               @Dias1 integer = NULL)       
 AS
   IF (@Dias1 IS Null)
   begin
       SELECT @Dias1=0
   end 
IF (@Dias>=90)
BEGIN
  SELECT @Importe=IsNull(Sum(Importe),0)
  FROM Facturas
  WHERE(Aplicada=0) AND DATEDIFF(day,FechaRecepcion, GETDATE())>=@Dias AND DATEDIFF(day,FechaRecepcion, GETDATE())<=@Dias1
END
ELSE
BEGIN
  SELECT @Importe=IsNull(Sum(Importe),0)
  FROM Facturas 
  WHERE(Aplicada=0) AND DATEDIFF(day,FechaRecepcion, GETDATE())>=@Dias AND DATEDIFF(day,FechaRecepcion, GETDATE())<=@Dias1
END
GO
Explico que persigo con el mismo: tengo una tabla denominada factura con un campo Importe donde almacenado el importe de las facturas recibidas, con este procedimiento lo que persigo es que cuando se pongan los rangos de días me devuelva el importe total de las facturas pendientes de pago para ese rango. Ahora los posible rangos son, 0-30,30-60,60-90 y mas de 90 días, por eso es que hago nulo el segundo parámetro cuando el valor del primero es 90. Ahora cuando pongo los rangos de días si me funciona perfectamente bien, sin embargo cuando solo pongo valor en el primer parámetro no me genera ningún error solo que no me suma el Importe me devuelve 0.0000, además cuando el primer parámetro lo pongo a 90 me pasa lo mismo, sin embargo si pongo el rango si funciona, devolviéndome la suma del importe de las facturas sin pagar que se encuentran entre el rango de días. Alguién pudiera decirme que está mal, por qué no funciona. No se ya que hacer. Muchas gracias.

sinalocarlos 01-11-2006 18:41:54

buen dia efelix

una duda sobre a los periodos.
los periodos se refieren a fechas pasadas o futuras
es decir:
0-30 = hoy a (hoy+30)
ó
0-30 = hoy a (hoy-30)

disculpa la pregunta pero no estoy familiarizado con periodos administrativos, contables

efelix 02-11-2006 14:15:29

hola sinalocarlos, en este caso el rango de las cuantas por cobrar es irrelevante, el problema es que el procediemiento no funciona si solamente le suministro un de los dos párametros, y se fijas en su código, lo he puesto para que en caso de que el primero sea IGUAL a 90, el otro sea nulo, por qué hago esto, y es donde te respondo tu pregunta, la contabilidad trabaja la edad de las cuentas por cobrar de esa forma, es decir: 0-30,30-60,60-90 y mas de 90 días, por eso es que pongo esa condición en el procedimiento almacenado, pero se pueden poner cualquier rango de edad, ese no el problema, es el que expliqué anteriorrmente, espero que ahora me hayas entendido. Muchas gracias.

Ricardosml 02-11-2006 19:44:19

Hola

el problema es q estas haciendo Dias1 = 0, cuando hace la diferencia t da un numero positivo por lo tanto ninguna diferencia va a caer dentro d ese rango o sea:
si la diferencia es 120 dias, t queda la comparacion: dias <= 120 <= 0

Saludos

efelix 02-11-2006 21:17:40

Ricardosml gracias por tu respuesta, analizando detenidamente el código del procedimiento alamcenado me di cuenta de lo que tu dices, ahora cómo tu crees que yo puedo resolver esa situación según la explicación que he dado anteriormente, es decir que el parámetro @Dias1 sea nulo cuando al parámetro @Dias se le asigne el valor de 90. De todas formas muchas gracias por tu aclaración.

Ricardosml 02-11-2006 22:45:12

Hola

Si lo que necesitas es 90 o mas lo mas facil creo q seria:
CREATE PROCEDURE spImporteTotalEdadCuentasxPagar
(@Dias integer,
@Importe money OUTPUT,
@Dias1 integer = NULL)
AS

IF (@Dias>=90)
BEGIN
SELECT @Importe=IsNull(Sum(Importe),0)
FROM Facturas
WHERE(Aplicada=0) AND DATEDIFF(day,FechaRecepcion, GETDATE())>=@Dias
END
ELSE
BEGIN
SELECT @Importe=IsNull(Sum(Importe),0)
FROM Facturas
WHERE(Aplicada=0) AND DATEDIFF(day,FechaRecepcion, GETDATE())>=@Dias AND DATEDIFF(day,FechaRecepcion, GETDATE())<=@Dias1
END
GO Espero que t sea util.

Saludos

efelix 03-11-2006 20:37:34

Hola Ricardosml, muchas gracias por tu gran ayuda, de esa manera ya resolví el problema del procedimiento almacenado, te reítero las gracias y disculpa la molestia.


La franja horaria es GMT +2. Ahora son las 02:31:59.

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