Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Notas de session I aperecen en qrdbtext1 y session II aparecen en qrdbtext2 (https://www.clubdelphi.com/foros/showthread.php?t=92279)

sonymix 15-09-2017 06:29:50

Notas de session I aperecen en qrdbtext1 y session II aparecen en qrdbtext2
 
Saludos los amigos del foro

mi problema es que estoy haciendo un reporte de recuerdo de nota, hay materias de session I y las de session II.
Quiero que las notas de lo del session I aperecen en el qrdbtext1 y las de la session II aparecen en el qrdbtext2
que me ajuden porfavor

Casimiro Notevi 15-09-2017 09:12:46

Nuestra bola mágica está averiada, así que tendrás que explicarte mejor ;)

duilioisola 15-09-2017 10:01:52

Reporte de recuerdo de nota
¿Te refieres a un listado o solo presentar información en un grid?

materias de sesion I y II
¿Son tablas, registros de una tabla, otra cosa?

qrdbtext1 / 2
Parecen componentes DBEdit, pero suponer suele derivar en errores...

¿Qué problema tienes?
  • Te da un error.
  • No sabes como resolver algún detalle.
  • No sabes como hacerlo.

Si es una de los dos primeros puntos, muéstranos parte del código que ya tengas.

sonymix 15-09-2017 10:12:40

problema conreporte
 
es que es un reporte que me imprima los recuerdo de nota de un estudiante en la universidad,
bien el ano tiene dos sessiones, session I y session II yo quiero que las notas de las materia del session I
sale en un qrdbtext y las de las sessione II sale en otro qrdbtext

los codigos que yo puse son esas pero no me funcionan

FRMRELEVE.QuickRep1.DataSet:=ADOQuery1;
FRMRELEVE.QRDBText1.DataSet:= ADOQuery1;
FRMRELEVE.QRDBText1.DataField:='description' ;

if ADOQuery1.FieldValues['cession'] ='II' then

begin
FRMRELEVE.QRDBText3.DataSet:= ADOQuery1;
FRMRELEVE.QRDBText3.DataField:='notetotal';
end else
if ADOQuery1.FieldValues['cession'] ='I' then
begin
FRMRELEVE.QRDBText2.DataSet:= ADOQuery1;
FRMRELEVE.QRDBText2.DataField:='notetotal';
end;

duilioisola 15-09-2017 10:44:34

Lamentablemente, sigo sin entender.
  • Aparentemente te refieres a un reporte QuickReport.
  • Tienes un DataSet ADOQuery1 que por lo menos tiene 3 campos. (description, cesion, notetotal)
  • Dependiendo del valor del campo cecion asignas el dataset y el campo notetotal a un QRDBText u otro.

¿Cuando dices "no me funciona" a qué te refieres?
  1. Da un error.
  2. No hace lo que esperas.
  3. Otra cosa

En el primer caso, deberías decirnos cuál es el error. El texto completo y sin traducir es lo ideal.
En el segundo caso deberías decirnos qué es lo que esperas y qué es lo que hace el programa.
En el tercer caso deberás explicar con detalle tu caso.

De todos modos, veo que asignas el DataSet y el campo a los QRDBText, pero nunca los desasignas.
Si primero cesion='I' asignará a uno de los QRDBText
Si luego cesion='II' asignará al otro QRDBText, pero el primero también estará asignado.
Quizás deberías inicializarlos antes del IF.

Código Delphi [-]
FRMRELEVE.QuickRep1.DataSet:=ADOQuery1;
FRMRELEVE.QRDBText1.DataSet:= ADOQuery1;
FRMRELEVE.QRDBText1.DataField:='description' ;

// Inicializo
FRMRELEVE.QRDBText3.DataSet:= nil;
FRMRELEVE.QRDBText2.DataSet:= nil;

if ADOQuery1.FieldValues['cession'] ='II' then
begin
   FRMRELEVE.QRDBText3.DataSet:= ADOQuery1;
   FRMRELEVE.QRDBText3.DataField:='notetotal';
end 
else
   if ADOQuery1.FieldValues['cession'] ='I' then
   begin
      FRMRELEVE.QRDBText2.DataSet:= ADOQuery1;
      FRMRELEVE.QRDBText2.DataField:='notetotal';
   end;

sonymix 15-09-2017 11:14:08

problema con reporte
 
Okey
me refiero a un reporte que estoy haciendo que me imprima todas las notas de estudiantes
hay dos sessiones en año. quiero que si la campos son materia, session, notatotal
en mi reporte uso un qrdbtext1 que recibe la materia, otro qrdbtext2 y qrdbtext3
quiero que si la materia es de session I que la notatotal aparece en el qrdbtext2
y si la materia es de session II que la notatotal aparece en el qrdbtext3

duilioisola 15-09-2017 12:06:27

Te falta responder a lo más importante:

Cita:

¿Cuando dices "no me funciona" a qué te refieres?
  • Da un error.
  • No hace lo que esperas.
  • Otra cosa
En el primer caso, deberías decirnos cuál es el error. El texto completo y sin traducir es lo ideal.
En el segundo caso deberías decirnos qué es lo que esperas y qué es lo que hace el programa.
En el tercer caso deberás explicar con detalle tu caso.

sonymix 15-09-2017 14:28:41

problema con reporte
 
Lo que hizo es, es que el la note se puso donde que apunto el dataset
me explico, en el dbgrid si la flechita se encuentra en un registro donde la session es session II
todas las notas se refleja debajo el qrdbtext3 et si se apunta en un registro de session I todas las notas se puso debajo del qrdbtext2
esque el codigo toma en cuenta donde que se apunto el dataset digi yo

duilioisola 15-09-2017 15:36:53

No entiendo si lo que explicas en el último mensaje
  • es lo que quieres que suceda.
  • es lo que sucede y quieres algo distinto.

En el código que muestas en un mensaje anterior, asignas el DataSet según el valor de un campo del ADOQuery.
Si el DBGrid está unido al ADOQuery, dependiendo del registro dónde estés posicionado, verás cosas en QRDBText3 o QRDBText2.

sonymix 15-09-2017 21:56:39

problema con reporte
 
si quisiera algo distintos
lo que yo quisiera que sucede es que todas las notas de las materias del session I aparecen en el qrdbtext2
y las de las materias del session II aparecen en el qrdbtext3

Casimiro Notevi 15-09-2017 22:37:20

Creo que no has leido nuestra guía de estilo, en particular el punto 7
Cita:

Formular las preguntas con el mayor detalle posible evitando todo tipo de ambigüedad, facilita el análisis del problema planteado y aumenta la probabilidad de obtener una solución a la consulta realizada.
Y cuando pongas código, recuerda hacerlo usando las etiquetas. Gracias.


duilioisola 16-09-2017 11:18:52

Supongo que en ese caso puedes jugar con la propiedad Visible del componente TQRDBtext.
No utilizo QuickReport, pero seguro que tiene esta posibilidad.
Lo que no estoy seguro es dónde establecer el valor para esa propiedad.

Código:

        [QRDBText1]      [QRDBText2]  [QRDBText3]
---------------------------------------------------
cesion  descripcion      noteval(I)  noteval(II)
  I    descripcion 1        123
  II    descripcion 2                        456
  I    descripcion 3        789
...

Código Delphi [-]
procedure QuickRep1BeforePrint(Sender: TCustomQuickRep; var PrintReport: Boolean);
begin
   if ADOQuery1.FieldValues['cession'] ='II' then
   begin
      FRMRELEVE.QRDBText3.Visible := True;
      FRMRELEVE.QRDBText2.Visible := False;
   end 
   else
   if ADOQuery1.FieldValues['cession'] ='I' then
   begin
      FRMRELEVE.QRDBText3.Visible := False;
      FRMRELEVE.QRDBText2.Visible := True;
   end;
end;

sonymix 16-09-2017 14:18:05

problema con reporte
 
bueno es exactamente asi que la quiero
sin embargo el codigo no me resulto. lo que hizo es en el dbgrid1 si esta apuntado en el registro del session II al tirar el reporte
todas las notas salen en qrdbtext3 sino me salen en qrdbtext2. eso quiere decir que esta tomando en cuenta en que registro esta
apuntado el dataset

duilioisola 17-09-2017 13:37:51

Lo que hago yo con los reportes es tener un DataSet para ellos mismos.

Los componentes del Form (DBNavigator, DBGrid, DBEdit, etc.) tiran de un DataSource que a su vez tira de un DataSet.
Este DataSet se utiliza para hacer las inserciones, modificaciones y bajas.

Para los listados tengo otro DataSet que previo al listado se filtra según lo que se desee listar.
De esta manera, el DataSet de trabajo mantiene la posición y estado, mientras el DataSet de listado se va moviendo por los registros filtrados.

En tu caso, parece que el DataSet de trabajo es ADOQuery1.
Prueba crear un segundo DataSet ADOListado, en el que estén los registros que quieres listar.
El QuickReport y los componentes QRDBText deben tirar de ADOListado.
Utiliza QuickRep1BeforePrint para poner en visible/invisible el componente que corresponda a medida que va avanzando por los registros a listar.

Mirando en internet, he visto que también exite el método OnBeforePrint para la banda.
http://www.admind.info/help/system/i...ml?tqrband.htm

Supongo que es allí donde debes poner el código, ya que la banda es la que va pasando por cada registro y es en ese momento donde el valor de cession es el del regisro que se está imprimiendo.
Código Delphi [-]
procedure [Form_o_Datamodule].Listar;
begin
   // Filtrar ADOListado
   ADOListado.Close;
   ...
   ADOListado.Open;

   // Asignar DataSet
   FRMRELEVE.QuickRep1.DataSet:=ADOListado;

   FRMRELEVE.QRDBText1.DataSet:= ADOListado;
   FRMRELEVE.QRDBText1.DataField:='description' ;

   FRMRELEVE.QRDBText3.DataSet:= ADOListado;
   FRMRELEVE.QRDBText3.DataField:='notetotal';

   FRMRELEVE.QRDBText2.DataSet:= ADOListado;
   FRMRELEVE.QRDBText2.DataField:='notetotal';

   // MostrarListado
   FRMRELEVE.QuickRep1.Preview;
end;

// Metodo OnBeforePrint de la banda que muestra QRDBText 2 y 3.
procedure [Form_o_Datamodule].QRBand1BeforePrint(Sender: TObject; var PrintBand: Boolean);
begin
   // Si el registro que estoy imprimiendo es de cession II se muestra por QRDBText3
   if ADOListado.FieldValues['cession'] ='II' then
   begin
      FRMRELEVE.QRDBText3.Visible := True;
      FRMRELEVE.QRDBText2.Visible := False;
   end 
   else
   // Si el registro que estoy imprimiendo es de cession I se muestra por QRDBText2
   if ADOQuery1.FieldValues['cession'] ='I' then
   begin
      FRMRELEVE.QRDBText3.Visible := False;
      FRMRELEVE.QRDBText2.Visible := True;
   end;
end;


La franja horaria es GMT +2. Ahora son las 05:57:01.

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