PDA

Ver la Versión Completa : Ayuda impresion de reporte con QReport4 para delphi7


jhoncacru
06-12-2006, 16:23:23
Hola comunidad soy nuevo en este foro, he visto que son los maestros del delphi, justamente tengo un problema por el que estoy atravesando por el cual pedirles ayuda no podia dudar de eso.

estoy realizando un reporte que debe imprimirme el intervalo entre la fecha_inicio y la fecha_final, por ejemplo : fecha_inicio = 05/12/2006 ; fecha_final=10/12/2006 entonces el reporte me imprime lo siguiente:


05/12/2006
06/12/2006
07/12/2006
08/12/2006
09/12/2006
10/12/2006

esto me sirve para consultar a la base de datos con la fecha específica para mi reporte del personal que ha registrado su asistencia.


if ( StrToDate(fecha_inicio)>StrToDate(fecha_final) ) then
begin
ShowMessage('La fecha desde '+fecha_inicio+' es mayor a la fecha final '+fecha_final);
end
else
begin
//empezamos a recorrer el intervalo uno + uno
while ( f_desde. Date < StrToDate ( fecha_final ) ) do
begin

//desde aqui consultamos a la base de datos para cada dia
RFechafecha.Parameters.ParamByName('fechas').Value:=DateToStr(f_desde.Date);
RFechafecha.Parameters.ParamByName('codigobarra').Value:=codigobarra;
RFechafecha.Close;
RFechafecha.Open;
while not RFechafecha.Eof do
begin

Edit1.Text:=RFechafechacodigo_barra.AsString;
Edit3.Text:=RFechafechanumero_contrato.AsString;
Edit4.Text:=RFechafechanombre_contrato.AsString;
Edit7.Text:=RFechafechanombre_temporada.AsString;
Edit8.Text:=RFechafechafecha_inicio.AsString;
Edit9.Text:=RFechafechafecha_fin.AsString;
Edit10.Text:=RFechafecharegistrada.AsString;


RFechafecha.Next;
end;
//hasta aqui se hace la consulta la base de datos por cada dia

f_desde.Date:=f_desde.Date+1; //se incrementa el dia

end;
end; //fin else
//fin recorrido del intervalo

end;


Edit1,Edit2,Edit3,Edit4,Edit5,Edit6,Edit7,Edit8,Edit9,Edit10 están dentro de un TQRSubdetail
RFechafecha es un ADOQuery > dentro el cual está la consulta.

el problema es que el reporte solo me imprime la ultima fecha y se acaba, mi preocupaciones que como imprimo todas las fechas del intérvalo.

Gracias por leer este mensaje.

nachoalbano
07-12-2006, 00:03:12
Hola, como estás?
Bueno, me pareces que estas confundido en el uso de los componentes en el reporte. Primero te cuento que para lo que tenes que hacer, no hace falta tanta linea de código, la idea de los reportes es automatizar un poco la cosa.
en banda de detalle tendrías que poner componentes QRDbText, que estan en la solapa del QReport. Por otro lado la query que uses tendría que relacionarse con un DateSet para poder relacionar los campos que devuelve la consulta con un componente QRDBText.
entonces por cada linea que devuelva la consulta se imprime una banda SubDetail.
Esto hará que elimines el while, aunque solo te va a servir para una sola fecha.

Iguamente se podría devolver una consulta que contenga todos los datos necesarios, es decir, los que se encuentren en el rango de fechas. Si lográs hacer eso utilizando una banda de Grupo podes hacer el reporte que querés con una solo consulta.

En todo caso, comentanos como es la estructura de las tablas, cual es la consulta que estás usando, así vemos la manera de adaptarla para que puedas hacer el reporte de una manera mas rápida casi sin colocar una línea de código.

Saludos

jhoncacru
07-12-2006, 03:04:17
El código SQL es el siguiente:




set dateformat dmy
declare @fecha as Datetime
set @fecha='07/11/2006'
declare @codigobarra as varchar(50)
set @codigobarra='800000080'

SELECT @fecha as fechareporte,ap.id_personal,
ap.ap_paterno +' '+ap.ap_materno+' '+ap.nombres As nombre_completo,ap.codigo_barra,
ads.numero as numero_dia,ads.nombre_dia, ads.nombre_ingles,ant.nombre_turno,
att.id_turno, CONVERT(char(8),att.hora_entrada,108) as entrada_contrato,
CONVERT(char(8),att.hora_salida,108) as salida_contrato,
ath.nombre_temporada,ath.fecha_inicio,ath.fecha_fin,

FROM ASIS_PERSONAL ap
INNER JOIN ASIS_PERSONAL_CONTRATO apc ON ap.id_personal = apc.id_personal
INNER JOIN ASIS_TIPO_CONTRATO atc ON apc.id_tipo_contrato = atc.id_tipo_contrato
INNER JOIN ASIS_DIA_TURNO_CONTRATO adtc ON apc.id_contrato = adtc.id_contrato
INNER JOIN ASIS_DIA_TURNO adt ON adtc.id_dia_turno = adt.id_dia_turno
INNER JOIN ASIS_DIAS_SEMANA ads ON adt.id_dia = ads.id_dia
INNER JOIN ASIS_TURNO att ON adt.id_turno = att.id_turno
INNER JOIN ASIS_TEMPORADA_HORARIO ath ON att.id_temporada = ath.id_temporada
INNER JOIN ASIS_NOMBRE_TURNO ant ON att.id_nombre_turno = ant.id_nombre_turno

where ap.codigo_barra=@codigobarra and ads.numero=datepart(dw,@fecha) and
ath.activado='1'



esta consulta me lanza el siguiente resultado:


Fechareporte id_p... nombre_completo codigo_barra Turno

2006-11-07 3195 QUISPE TORREZ GLORIA 800000080 Mañana
2006-11-07 3195 QUISPE TORREZ GLORIA 800000080 Tarde

y otros datos que por problema de espacio no lo typeo

el problema es que es éste el resultado de la consulta para un dia, si quisiera un rango de dias el QRSubdetail enlazando el DATASET a la consulta me imprime como resultado solamente la consulta del ultimo dia, es decir 2 tuplas.


Aprovechando este hilo, nachoalbano tengo una gran duda, en el SQL Query Analizer funciona perfectamente la consulta, pero pasandole parámetros a la consulta desde delphi, el resultado de la consulta se distorciona, aveces se suma y otras se resta, que es lo que pueda pasar????