Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-12-2006
jhoncacru jhoncacru is offline
Miembro
 
Registrado: oct 2006
Posts: 11
Poder: 0
jhoncacru Va por buen camino
Ayuda impresion de reporte con QReport4 para delphi7

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.

Código Delphi [-]
 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.

Última edición por jhoncacru fecha: 06-12-2006 a las 17:26:18.
Responder Con Cita
  #2  
Antiguo 07-12-2006
nachoalbano nachoalbano is offline
Miembro
 
Registrado: sep 2006
Posts: 19
Poder: 0
nachoalbano Va por buen camino
Confundido en el uso de los componentes

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
Responder Con Cita
  #3  
Antiguo 07-12-2006
jhoncacru jhoncacru is offline
Miembro
 
Registrado: oct 2006
Posts: 11
Poder: 0
jhoncacru Va por buen camino
EL codigo SQL

El código SQL es el siguiente:

Código SQL [-]
 

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????
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
necesito ayuda para utilizar el generador de reporte RAVE delphi 7 Julio César Impresión 6 14-12-2011 23:57:46
Ayuda Paint en delphi7 ivan84 Gráficos 5 23-11-2006 11:31:37
cambiar el nombre del reporte para la cola de impresion droguerman Impresión 0 07-11-2006 03:47:56
impresion de intervalo de Reporte con Rave santi33a Impresión 0 04-07-2006 16:31:14
Impresion de un Reporte (Ayuda) Inon Impresión 4 16-05-2005 22:39:34


La franja horaria es GMT +2. Ahora son las 17:14:53.


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