PDA

Ver la Versión Completa : Ayuda con el qrExpr()


escullar
07-06-2005, 11:00:58
Hola

Necesito realizar la suma de unos campo del detalle del documento.El problema es que esta conectado a datos a traves de codigo y obtiene esos datos a partir de otro formulario y no se como relizar la suma del campo.

Los nombres de los campos son eBase, eImpuestos y eTotal que son qrdbText.

¿Sabría alguien decirme como puedo relizarla la suma al final de cada pagina tanto con el qrexpr o con otro componente del quickreport?

Un saludo y muchas gracias por todo.

lgarcia
07-06-2005, 18:52:29
Hola:

Me parece que debes poner un ADOStoredProcedure en el Reporte y de ahi coger los datos que van a formar parte del qrExpr() y para totalizar al final de la pagina utiliza la banda PageFooter y al qrExpr() trabaja con la propiedad ResetAfterPrint.

Saludos
Luis Garcia

_____________________________
La mejor manera de decir es hacer

escullar
07-06-2005, 19:04:09
Muchas gracias por la contestacion pero no es lo necesito.

El caso es que los datos del qr se los asigno yo desde otro formulario y por lo tanto la formula tambien se la tendría que asignar.

Mi pregunta es sino es capaz de hacer la suma de unos de los campos detalle sin que proceda de la base de datos?. Yo tengo un campo en el detalle que se llama ebase, ¿Cómo se puede sumar?. O en caso de que proceda de la base de datos como asignarselo de forma directa al qrexpr desde el otro formulario que realiza la llamada?


Un cordial saludo.

sitrico
07-06-2005, 21:47:46
Puedes usar el evento OnPrint del tQrExpr y asignar la operación que quieras realizar al parametro Value (que es un String)


procedure Tform1.QRExpr1Print(sender: TObject; var Value: String);
begin
Value := IntToStr(q.FieldByName('eBase').AsInteger *
q.FieldByName('eImpuestos').AsInteger);
end;

Claro que deberás usar la conversión de los tipos de datos y calcular la operación correspondiente a tu caso.

Con este método también es posible (y recomendable) usar un QRLabel en lugar de QRExpr.

Espero te sirva.

escullar
08-06-2005, 10:23:16
Gracias por todo pero no es lo que busco.

Yo necesito la suma de un campo que se encuentra en el detalle del qr y que se llama ebase. Quiero que realice la suma de este campo a traves del qrexpr y no a traves de codigo.

Lo que quiero saber es si se puede con el qrexpr realizar la suma de un campo detalle?

Un cordial saludo.

Lepe
08-06-2005, 10:34:54
Esto debería funcionar:

qrExpr.Expression := SUM(ebase)

Un saludo

escullar
08-06-2005, 12:38:21
Hola Lepe.

El caso es que eso es lo que he puesto desde el principio pero no me sale nada. De ahí que le este dando tantas vueltas y no logro descifrar el porqué.

El caso es que al final tendré que hacerlo a través de codigo aunque me parece una chapucilla pues yo pensaba que se podia realizar por qrExpr.

Un saludo y muchas gracias pues me quedo a la espera de nuevas soluciones a ver si a alguien se le ocurre de hacer que funcione con el qrExpr.

Lepe
08-06-2005, 14:23:38
Como los datos estan enlazados por código, según dices, no puedes hacerlo en diseño, tienes que hacerlo en ejecución. No se trata de ninguna chapuza, incluso puede ser más flexible y eficiente, ya que puedes reutilizarlo ;).

Un saludo

escullar
08-06-2005, 14:32:55
Hola Lepe.

El hacerlo por codigo si me supone una chapucilla pues se supone que va a ser mas eficiente con el qrexpr que el hecho de recorrer lineas de codigo.

El caso es que le he asignado la expresion en tiempo de ejecucion igual que los datos pero nada de nada.

Una pregunta que me estoy planteando ahora es en qué tipo de Band tiene que colocarse?. Yo lo he puesto en uno de tipo PageFooter.

¿Puede ser este el problema?

Un saludo y gracias por la atencion que me prestais pues no llevo mucho tiempo utilizando el quick report y la verda que me he decido por este tipo de impresion por los comentarios de la gente pero no paro de chocarme con un problema detras de otro. Tengo parado el tema de las impresora matricial esperando una contestacion en el foro pues ese si que es un problema mas serio.

Lepe
08-06-2005, 15:11:46
Una pregunta que me estoy planteando ahora es en qué tipo de Band tiene que colocarse?. Yo lo he puesto en uno de tipo PageFooter.

¿Puede ser este el problema?

No, yo tengo en Pies de páginas unos qrExpr y van de maravilla.

Será una tontería, pero ahora mismo se hace cuesta arriba, quizás con un poco de código de como un formulario llama y configura al QuickReport, y la descripción más relevante de los Datasets implicados sirva para aclarar el tema.

Un saludo

sitrico
08-06-2005, 18:47:20
Usar una Banda PageFooter no debería ser problema, (prueba con una banda Summary para asegurarte) el problema (me parece) es con la definicion de la expresión en sí, normalmente si defines la expresión en tiempo de diseño queda algo como:


Sum(Query1.Campo)


Si la pones en sum(Campo) hay un error, en esos casos yo asigno temporalmente los campos de la tabla del reporte (con FieldEditor) y preparo la expresión en tiempo de diseño, luego la copio a la definición de la expresión para usarla en tiempo de ejecución y limpio los campos y cualquier otra configuración de tiempo de diseño.


Asegurate también de asignar el "Parent" de la expresión al crear el objeto

QrExpr1.Parent := QRBandX;

escullar
09-06-2005, 19:47:25
Hola.

Lo he intentado todo pero parece que no quiere funcionar. No se el porque no puedo realizar esta asignacion:

qrExpresion.Expression:= 'SUM(dsFacturas.dataset.fieldbyname(' + 'PR_SUMA_BASE' + ').asfloat)';

Lo que no entiendo es la propiedad "PARENT". No se que le tengo que asignar pues Sitrico me pone que le asigne una banda pero cual de ellas?

Un saludo y muchas gracias por vuestra atencion y ayuda. Yo creo que al final se consiguirá pues tiene que ser alguna chorrada aunque no me lo explico pues esto deberia de ser muy facil e intuitivo.

Chaito.

sitrico
13-06-2005, 17:45:11
Lo que no entiendo es la propiedad "PARENT". No se que le tengo que asignar pues Sitrico me pone que le asigne una banda pero cual de ellas?

El parent del qrExpresion DEBE ser la banda donde quieres que muestre el resultado de la expresión (normalmente QRDetail). Esto es aplicable únicamente a los componentes creados en tiempo de ejecución. Si creas qrExpresion en tiempo de diseño y sólo asignas la expresión en tiempo de ejecución no tienes que asignar el Parent.

De cualquier manera te recomiendo que pruebes crear la expresión en un reporte en tiempo de diseño y luego pasarla a tiempo de ejecución.

escullar
13-06-2005, 19:43:32
Te agradezco mucho tu ayuda pues eso es lo que he intentado desde un principio, crearla en diseño y luego pasarla a codigo pero no he conseguido nada de nada.

Supongo que tiene que ser un error mio pero no se de donde pues es tan facil como asignarle el campo a sumar pero no le da la gana de sumar nada aunque sí me aparecen todas las lineas del detalle.


Un saludo.

sitrico
15-06-2005, 21:20:10
Un último detalle: prueba cambiar la comilla simple de la expresion:

... (' + 'PR_SUMA_BASE' + ')...

Por


' ... ('+#39+'PR_SUMA_BASE'+#39+') ... '


porque lo que estas haciendo genera el código de la expresión:

SUM(dsFacturas.dataset.fieldbyname(PR_SUMA_BASE).asfloat)

el campo PR_SUMA_BASE DEBE estar entre comillas simples