Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Uso de QRStringsBand

Hola,

he comenzado un hilo sobre como se efectúan las consultas entre varias tablas con SUM aquí. En realidad, y como comento en dicho hilo, la consulta es para un reporte, concretamente un QReport y, la consulta la hago mediante un TIBQuery.

He pensado en que otra solución para mi problema es recorrer el Dataset para efectuar la sumatoria, y luego, mostrar los campos en un QRStringsBand. El problema es que no tengo ni idea de como hacerlo .

He consultado el manual de QReport disponible en el sitio de Qusoft. Pero sólo te dicen para que sirve el QRStringsBand y nada más. En el foro, sólo hay un hilo donde se comentó la posibilidad de usarlo pero sin entrar en mayores detalles. ¿Alguien me podría dar más detalles?

Hasta ahora llevo hecho esto:

Código:
   IBQdetalle->Close();
   IBQdetalle->ParamByName("codPago")->AsInteger=codigoPago;
   IBQdetalle->Prepare();
   IBQdetalle->Open();
   DSdetalle->DataSet->First();
   while(!DSdetalle->DataSet->Eof)
   {
        QRStringsBand1->Items->Add(DSdetalle->DataSet->FieldByName("NOMBRE")->AsString);
        DSdetalle->DataSet->Next();
   }
   QuickRep1->PreviewModal();
y luego:

Código:
void __fastcall TfrmResumenPago::QRLabel8Print(TObject *sender,
      AnsiString &Value)
{
   Value = QRStringsBand1->Item;
}
Con esto, me imprime varias veces el nombre del personal, pese a que la consulta sólo devuelve 6 registros de 4 campos.

Lo dicho, ¿alguien me podría dar más detalles sobre como usar las QRStringsBand?

Nota 1: Como habrán notado programo en BuilderC++. Pero no tengo problemas en que me respondan con código de Delphi, ya que la idea me valdrá.

Nota 2: No quise continuar las preguntas en el hilo anterior y espero con eso, no estar infringiendo la regla de no duplicar mensajes. Pero me parece que esto es un caso distinto, ya que éste hilo aborda un tema que no tiene nada que ver con el otro.
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #2  
Antiguo 08-10-2007
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola Gabo, no he manejado QrStringBand del quickreport, pero podrias tambien recorrer tu dataset utilizando el evento OnNeedData del quickReport.

En dicho evento debes colocar lo siguiente para recorrer tu dataset, el resultado se mostrara en un QRLabel, en este caso lo que estoy usando es una banda Detail ahi dentro el QRLabel.

Código Delphi [-]
procedure TForm1.QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
var
  cadena : string;
begin
  MoreData := not Query1.Eof;
  if MoreData then
  begin
    cadena:=Query1.Fields[1].AsString;
    QRLabel1.caption := cadena;
    Query1.Next;
  end;
end;

y despues en tu evento BeforePrint del quickReport inicializas tu dataset con Query1.First;

Tambien puedes usar el componente QrExpr para hacer la sumatoria, con la función de sum que tiene, solo tienes que indicarle sobre que campo quieres que haga ese sum.

Espero te sirva.
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 08-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Lo he traducido:

Código:
void __fastcall TfrmResumenPago::QuickRep1NeedData(TObject *Sender,
      bool &MoreData)
{
    AnsiString cadena;
    MoreData=IBQdetalle->Eof;
    if (MoreData)
    {
       cadena= IBQdetalle->Fields->Fields[0]->AsString; 
                   //FieldByName("NOMBRE")->AsString; También lo he probado así
       QRLabel8->Caption=cadena;
       IBQdetalle->Next();
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmResumenPago::QuickRep1BeforePrint(
      TCustomQuickRep *Sender, bool &PrintReport)
{
    IBQdetalle->First();
}
//---------------------------------------------------------------------------
Ahora si me entrega seis filas, conforme al número de registros que son, pero no cambia el Caption, de hecho he probado con:

Código:
QRLabel8->Caption="hola";
y tampoco lo cambia.

Seguiré intentándolo.
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #4  
Antiguo 08-10-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hola Gabo,
informarte de que el QReport incluye objetos de tipo expresión que realizan las sumas, medias, etc, sin que tengas que intervenir más que para definir que tipo de calculo quieres realizar.
Para probar, ouedes incluir un TQRExpr de la paleta QReport en la banda que quieras, definir una expresión y ver qué ocurre.

Si quieres ver los pagos a los empleados, listalos todos, incluye una banda de grupo y un objeto del que te he indicado. Te ahorra un montón de trabajo. El valor de expresion en la banda de grupo es el que indica cuando se imprime; puede ser un campo ( se imprime cada vez que cambai el valor de un campo)una expresión ,...

Imagino que no tendrás demasiados problemas.

Suerte y saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #5  
Antiguo 08-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Pero, tengo entendido que sólo se puede usar el TQRExpr sólo se puede usar con Table y yo uso Query.

Lo he probado, por si acaso y no me coge los campos del IBQdetalle.
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #6  
Antiguo 08-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Acabo de ver el tutorial de QuickReport de Qusoft y allí el ejemplo es con Table y trabajan con la propiedad IndexName que no está disponible en Query.
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #7  
Antiguo 09-10-2007
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola de nuevo Gabo, como te decia puedes usar el qrexpr del quickreport para hacer la suma, tambien funciona con query, solo que tu consulta ya tiene que estar hecha y su propiedad active tiene que estar en true en tiempo de diseño.

Colocas el componente qrexpr en tu banda, seleccionas su propiedad Expresion ahi te aparecera un Wizard, escojes function -> SUM -> continue, despues debes introducir el campo sobre el que se hara la suma, donde escojeras Database field, ahi te aparecera el query con sus respectivos campos, ahora escojeras sobre el campo que quieres hacer la sumatoria, despues aceptas todo lo que hiciste y listo.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #8  
Antiguo 09-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Lo probaré.

Verás las veces que he intentado ocuparlo no me aparecen los campos de la Query, sólo las o las Querys disponibles. Cuando hacía clic en alguna de ellas no me aparecían los campos. Di por sentado que era porque no usaba el IBTable que sugerían en el manual.

Voy a probarlo cambiando el Active del Query a True.

¡Gracias!
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #9  
Antiguo 11-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
¡Gracias Caro y fjcg02!

Ya pude ver por que no conseguía hacer las sumatorias...

Al poner la propiedad Active del TQuery en True, comencé a ver los campos en el asistente del TQRExpr. Yo pensaba que era por no usar el control IBTable, pero ya veo que no.

De nuevo, ¡muchas gracias!
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:46:10.


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
Copyright 1996-2007 Club Delphi