Reporte LENTO en Cristal Report

Buen Dia a todos, en esta ocasión les quiero compartir una Duda que me está impidiendo avanzar, la cual es la siguiente:
Actualmente cuento con un reporte hecho en Crystal Report (RPT), el cual se alimenta de una vista, que me arroja la totalidad de movimientos (actualmente + 6000) cuando ejecuto el RPT, tengo un parámetro, el cual filtra la información por el campo [LOTE] de la vista, pero tarda 28 Segundos.
Si ese mismo filtro lo pongo desde SQL en el Where, la consulta tarda menos de 1 segundo.
mi pregunta es, como le puedo hacer para optimizar el funcionamiento de mi RPT.


aun con este parámetro, primero me carga toda la DATA, y después lo filtra, ahí está mi principal duda, como hacer para que desde un principio filtre con el parámetro y no sea tan tardado.

De antemano agradezco de corazón toda la ayuda y orientación que me puedan brindar, saludos!!!

Hola @jamh1976

podrías poner el código SQL en un procedimiento almacenado recibiendo el parámetro, e invocarlo desde el CR. Así la consulta no se monta en el CR y seguramente sea más rápida

Un saludo

1 me gusta

Hola buenos días.
Nunca he optado por esa solución del procedimiento almacenado, por desconocimiento.
Si algún día nos deleitas con un pequeño tutorial de como crear uno y explotarlo te lo agradecería @Amarcos
Un saludo

1 me gusta

@Amarcos , muchas gracias por tu orientación, me gustaría, si es posible me pudieras proporcionar un ejemplo básico de cómo es que se hace, soy un tanto nuevo en esto, pero trato de echarle ganas, de antemano, muchas gracias, amigo, por mi parte, buscare en google, para ver que puedo encontrar, saludos!!!

P.D.

Ya pude hacer el procedimiento almacenado!!!

CREATE PROCEDURE P_TRAZABILIDAD (@NUM_LOTE VARCHAR (15))
AS
	SELECT 
		T0.DistNumber
		,T0.ItemCode
		,T0.itemName
		,T1.Quantity
		,T1.WhsCode
		,T0.CreateDate 
	FROM PINPPS_T800.dbo.OBTN T0   
		INNER JOIN PINPPS_T800.dbo.OBTQ T1 ON T1.SysNumber=T0.SysNumber AND T1.ItemCode=T0.ItemCode
	WHERE T0.DistNumber=@NUM_LOTE
GO

ahora mi duda, es la siguiente, como asigno el valor en el CRYSTAL REPORT, ya que el valor proviene de un parámetro

lo intento asignar el valor de la forma que muestra la anterior imagen, pero me marca error

de nueva cuenta muchas gracias por su apoyo y orientación, saludos!!

Son muy poco registros para demorar mucho, aunque creo si te puedes ayudar en crear una función donde puedas solo solicitarle los datos que requieres, asi no te trae todo el “moloch” (como dicen los yucatecos) de datos.

Crea una función de este modo parecido:

CREATE FUNCTION dbo.getData(@parametro char(6) )
RETURNS TABLE
AS
RETURN (SELECT * FROM OINV WHERE CardCode = @parametro)

Para ejecutarlo solo haces esto:

select * from dbo.getData('C20000');

y danos tu opinion acerca del tiempo de respuesta.

1 me gusta

Amigo muchas gracias, por tu ayuda, pero sigo teniendo la misma duda, todo esto lo hago en Crystal Report, y el valor lo tengo en el parámetro que recibe el RPT de Crystal, es ahí donde no se como se lo asigno a la función o procedimiento

Para ejecutarlo solo haces esto:

select * from dbo.getData (' Aqui como le asigno el parametro que recibe CRYSTAL REPORT');

seria asi : select * from dbo.getData ('@LOTE');
                 select * from dbo.getData ('?LOTE');
                 select * from dbo.getData ('{@LOTE}');

La funcion tienes que crearla en tu motor de bd y en crystal report solo lo vas a invocar y pasarle el parametro o parametros.

1 me gusta

Este tema se cerró automáticamente 7 días después de la última publicación. No se permiten nuevas respuestas.