Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   No se muestran los registros en el reporte (https://www.clubdelphi.com/foros/showthread.php?t=39537)

efelix 23-01-2007 15:59:25

No se muestran los registros en el reporte
 
Hola a todos. Tengo el siguiente problema. Disculpenme si me extiendo en la explicación del mismo. Tengo un procedimiento almacenado en sql server 2000 con el siguiente código:

Código SQL [-]
CREATE PROCEDURE spAntiguedad
(@Proveedor int)
AS
SELECT Proveedores.IdProveedor, Proveedores.NombreProveedor, Facturas.IdFactura, Facturas.Descripcion, Facturas.Importe, Facturas.FechaRecepcion, DATEDIFF(day, FechaRecepcion, GETDATE()) AS Saldo,
CASE
WHEN DATEDIFF(day, FechaRecepcion, GETDATE()) > 0 AND DATEDIFF(day, FechaRecepcion, GETDATE()) < 31 THEN Facturas.Importe ELSE 0 END MENOSDE30dias,
CASE
WHEN DATEDIFF(day, FechaRecepcion, GETDATE ()) > 30 AND DATEDIFF(day, FechaRecepcion, GETDATE()) < 61 THEN Facturas.Importe ELSE 0 END ENTRE3060dias,
CASE
WHEN DATEDIFF(day, FechaRecepcion, GETDATE()) > 60 AND DATEDIFF(day, FechaRecepcion, GETDATE()) < 91 THEN Facturas.Importe ELSE 0 END ENTRE6090dias,
CASE
WHEN DATEDIFF(day, FechaRecepcion, GETDATE()) > 91 THEN Facturas.Importe ELSE 0 END MASDE90dias
FROM Proveedores INNER JOIN Facturas ON Proveedores.IdProveedor=Facturas.IdProveedor
WHERE (Aplicada = 0) AND Proveedores.IdProveedor=@Proveedor
GROUP BY Proveedores.IdProveedor, Proveedores.NombreProveedor, Facturas.IdFactura, Facturas.Descripcion, Facturas.FechaRecepcion, Facturas.Importe, DATEDIFF(day, FechaRecepcion, GETDATE())
ORDER BY Proveedores.IdProveedor, DATEDIFF(day, FechaRecepcion, GETDATE()) ASC
GO




Este procedimiento lo diseñe para obtener la antigüedad de las cuentas por pagar por proveedores. Como podran apreciar el mismo me genera 4 campos los cuales son:Menos30dias,Entre3060dias,Entre6090dias y Masde90dias en los cuales pone el importe de las facturas que se encuentran pendientes de pago para cada uno de esos rangos. Por ejemplo cuando lo ejecuto en el query analyzer me da esto, voy a poner solamente los campos que me interesan para que puedan entender lo que quiero preguntarles:
IdFactura--Importe--Menos30dias--Entre3060--Entre6090--Made90dias
25-------- 6500 -----.0000-------- 6500------- .0000 ------.0000
24-------- 5000 -----.0000-------- 5000------- .0000 ------.0000
21-------- 1000 -----.0000-------- 1000------- .0000 ------.0000
22-------- 1500 -----.0000-------- 1500------- .0000 ------.0000
9--------- 1050 ------.0000--------.0000------ .0000 ------ 1050
8--------- 1000-------.0000--------.0000------.0000------- 1000
7--------- 5000------- .0000------- .0000----- .0000------- 5000
Esto está perfecto hasta aquí. Ahora este procedimiento almacenado lo utilizo en delphi 7 para un reporte sobre la antigüedad de las cuentas por pagar. Es decir creo un nuevo reporte y utilizo para conectarme a la base de datos los componentes de la paleta ADO. Agrego al reporte un ado conecction, un ado stored procedure y un datasource. Les configuro adecuamente cada una de las propiedades. Por ejemplo el adoconecction conected a true con su respectiva cadena de conexión a sql server con la base de datos que utilizo, la propiedad conecction del ado stotred procedure establecida al ado conecction y su propiedad active establecida a true, el datasource tiene como dataset el ado stored procedure. Agrego las respectivas bandas que necesito al qreport: pageheaderband, titleband, detailband y sumaryband. En la detailband pongo los campos Menos30dias, Entre3060dias, Entre6090dias y Masde90dias y en la sumaryband agrego 4 qrexpr cada uno con sus respectivas expresiones, por ejemplo: SUM(ADOSPAntiguedad.Menos30dias), SUM(ADOSPAntiguedad.Entre3060dias),SUM(ADOSPAntiguedad.Entre6090dias) y SUM(ADOSPAntiguedad.Mas90dias). Creo un formulario con tres controles un label, un edit y botón de comando. El edit es para pasarle el parámetro de entrada al ado stored procedure, en el botón comando puse el siguiente código:

Código Delphi [-]
begin
QrAntiguedad.ADOSPAntiguedad.Close;
QrAntiguedad.ADOSPAntiguedad.Parameters.ParamByName('@Proveedor').Value := Edit1.Text;
QrAntiguedad.ADOSPAntiguedad.Open;
QrAntiguedad.Preview;
end;




QrAntiguedad es el nombre del reporte, ADOSPAntiguedad es el nombre del Procedimiento almacenado. Cuando ejecuto esto no sale nada todo me sale en 0 es decir en cada una de las columnas de reporte me 0.00. He revisado por todos los lados y nada. Incluso en tiempo de diseño le doy un preview al reporte y lo mismo. No se que hacer. Ojala puedan ayudarme. Muchas Gracias.

Lepe 23-01-2007 16:17:27

intenta con:
Código Delphi [-]
QrAntiguedad.ADOSPAntiguedad.Parameters.ParamByName('@Proveedor').Value := strtoint(Edit1.Text);

Otra posibilidad sería crear otro SP que llame al anterior y haga las sumas, así ya no tienes que usar Sum en los qrExpr, sino el resultado de este segundo SP.

Saludos

efelix 23-01-2007 16:34:09

Gracias Lepe, ya probé y nada, lo mismo.

ContraVeneno 23-01-2007 17:09:43

como te dije en el otro hilo, revisa que los componentes del reporte esten bien enlazados

efelix 23-01-2007 17:53:23

ContraVeneno saludos, ya hice eso y nada, o a lo mejor lo hice mal o no se como hacerlo si pudieras ayudarme te lo agradecería. Aunque hay un detalle y es el siguiente. Si en la banda detail pongo otro campo por ejemplo el idproveedor u otro que no sea de los que me genera el procedimiento almacenado (Menos30dias,Entre3060dias,Entre6090dias,Masde90dias) y le doy preview en la vista diseño al reporte al menos me muestra un registro. Yo hice la prueba cree un formulario nuevo puse un dbedit y me muestra sin ningún problema todos los registros que me devuelve el procedimiento almacenado. Gracias por tomarte tu tiempo en leer este hilo, pero sigo sin ver la solución.

ContraVeneno 23-01-2007 18:01:26

Pues es lo único que se me puede ocurrir, revisar la propiedad DataSet del reporte y las propiedades DataSet y DataField de los QRTexts que tengas en tu reporte. Fuera de eso no tengo idea, ya que si la consulta te muestra los datos bien en los DBedits, pero no en el reporte, entonces el problema esta en el reporte y no en la consulta. Y si la consulta esta bien, pero no se muestra en el reporte, entonces el reporte no esta bien enlazado en sus propiedades DataSet y/o DataField.

:confused:

efelix 23-01-2007 18:36:57

ContraVeneno me di cuenta de un detalle y he resuelto el problema a medias o mejor dicho no lo he resuelto pues hasta que no obtenga lo deseado entonces no hay solución. La propiedad del active del procedimiento almacenado no puede estar establecida a true, tiene que estar en false. Con esto me muestra solamente un registro no los demas no se por qué. Por ejemplo si te fijas en el hilo verás que el primer registro que aparece es el que tiene el importe 6500 en el campo Entre3060 bueno ese solo registro es que sale, no se por qué no salen los demás. Alguna idea?.

efelix 23-01-2007 18:56:08

ContraVeneno disculpa estoy apenado contigo, te he hecho perder el tiempo. El problema estaba además de lo anterior en que me habia fijado en el enlace de cada una de las bandas del reporte, pero no del reporte como tal. Es decir en la propiedad dataset del reporte no tenía puesto nada. Te reitero mis disculpas. Gracias nuevamente.

ContraVeneno 23-01-2007 18:57:49

No hay nada de que disculparse :cool:
Lo importante as que se solucionó.


La franja horaria es GMT +2. Ahora son las 23:43:37.

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