Club Delphi  
    Paypal   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 18-10-2005
david duarte david duarte is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 21
david duarte Va por buen camino
es mas o menos parecido al tuyo

mira, como comentaba al principio de este hilo, tengola tabla de resultados con los siguientes datos(Paradox).

Folio -> folio de la solicitud
Num -> numero de muestra a analizar
Posicion -> numero de la posicion de la muestra (las muestras tienen una posicion, ya que son de unas maquinas de hilo, y existen muchas maquinas de hilo con muchas posiciones).
Analisis1 -> aqui manejo 'o' para saber si esta seleccionado y se va a capturar los resultados o 'x' para ver que no esta seleccionado y no se va a realizar analisis de este.
Analisis2 ->
etc.

y para cada muestra, tiene un registro.

p.e.

me traen una 3 muestras para hacerles el analisis1, analisis2, analisis 4 y analisis 6, (folio1) y me traen otros analisis con 2 muestras, analisis: 1,3,5(folio 2)
entonces en la tabla voy a tener lo siguiente (cuando apenas se de de alta)

Código Delphi [-]
  Folio     Num   Posicion   Analisis1   Analisis2   Analisis3  Analisis4   Analisis 5   Analisis6
   1    01      o          o           o          x           o           x            o
   1    02      o          o           o          x           o           x            o 
   1    03      o          o           o          x           o           x            o
   2    01      o          o           x          o           x           o            x
   2    02      o          o           x          o           x           o            x

etc.. puedes tener x folios. La posicion siempre tiene que estar seleccionada.

Entonces p.e. si quiero ver el reporte del folio 1, me tiene que aparecer...

Analisis Seleccionados : 1, 2, 4, 6

en la parte de resultados (en caso de que tengan resultados capturados), te aparecera la posicion y el resultado de el analisis que ya se realizo y en caso de que no se haya realizado ese analisis, te debera de aparecer en blanco o te aparecera '----'.
Código Delphi [-]
  Posicion       Analisis1    Analisis2   Analisis4     Analisis6
    3a        ---        3.25      4.25       ----
    1a       1.25       ----       6.25      -----
    1a'       ----       ----       ----      -----
aqui no se ha realizado el analisis6.

y asi es como debe de aparecer en el qreport, pero no me queda. se traslapan las labels de los resultados.

Gracias

Espero que me entiendas me puedas ayudar!!!!

Cómo te sientes hoy??

Última edición por david duarte fecha: 18-10-2005 a las 18:26:30.
Responder Con Cita
  #2  
Antiguo 18-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Pues sinceramente creo que te estas complicando la vida. El primer mensaje que puse hablando del QrCreateList hace exactamente eso.

Lo único es montar una consulta, del tipo
Código SQL [-]
select * from tabla where folio = 1
Ahora creas un TStringList, y añades los campos:
Analisis1
Analisis2
Analisis4
Analisis6

Llamas a la función qrCreateList, y ya tienes generado el listado.

Si acaso, puedes recorrer los datos antes de hacer el preview, para que el campo que sea nulo, ponerle los guiones '----', si no lo haces, saldrá un 0 (que tampoco es tan grave).

En apens 15 lineas de código lo tienes hecho.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 18-10-2005
david duarte david duarte is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 21
david duarte Va por buen camino
resultados en qreport

Hola Lepe, gracias por tu ayuda, pero creo que lo que yo quiero es que los analisis salgan en posicion horizontal, no vertical.

Creo que ya logre solucionarlo, al menos en la primera linea de los resultados.

Lo que me hacia era que el ultimo campo, al momento de pasar al siguiente registro, me lo bajaba a la siguiente linea, por lo tanto se traslapaba con el primer resultado de la posicion.

Lo que hice es que al final de recorrer los campos de la tabla, genero un label en blanco, nada mas lo creo
Código Delphi [-]
  lab := TQRLabel.Create(QRBResultados);
y ya.

por lo que veo, es que si el ultimo label se baja, como no tiene nada de datos, aunque se traslape, pues no se verá.

Necesito que me digan si esta bien la solucion o existe otra mas facil(ya se que me han dicho otras cosas).

les anexo las imagenes para que las chequen como quedó, y vean las anteriores para que comparen.

Ahora lo que necesito es que las labels de los resultados queden abajo de los nombre de los analisis.

Gracias

Cómo te sientes hoy?
Archivos Adjuntos
Tipo de Archivo: zip imagenes.zip (5,5 KB, 27 visitas)
Responder Con Cita
  #4  
Antiguo 19-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Cita:
Empezado por david duarte
Hola Lepe, gracias por tu ayuda, pero creo que lo que yo quiero es que los analisis salgan en posicion horizontal, no vertical.
En realidad quedarían en horizontal, simplemente estaba enumerando los campos . Realmente el qrcreateList, te haría exactamente lo que deseas. Posición titulo, elasticidad y debajo los resultados, pero tendrías que añadir a mano los datos de solicitante y el resto del encabezado. Si ya tienes casi todo hecho, continúa así campeón .

Para hacer lo que quieres, al crear los labels de los analisis (Posicion titulo), yo guardaría un array of record, y en cada record, guardaría el top, left, y width de cada uno de los labels. Cuando creas los labels para los resultados:
- Creas el label
- le pones autosize a false, Alignment según corresponda, para que quede alineado a la derecha los números y lo que sea texto alineado a la izq.
- Lees de ese array donde estas y le pones el top, left y width que corresponda segun la columna.

Tendrás un problema añadido, y es que si un label tiene 60 pixels de ancho y el dato no cabe, tendrás que controlar cómo lo haces. Ahora no recuerdo, creo que QR tiene una propiedad adicional, si no cabe el texto creo que se puede truncar el ancho, o bien dejar que se solapen. (¿autosize? u ¿otra propiedad?)

Por supuesto no traspasarás el margen derecho del folio, y si se van a mostrar más columnas de las que caben, poner en apaisado el informe, esto quizás no te guste, pero no hay más remedio.

No puedo comentar si te has complicado mucho o no, ya que no veo codigo fuente, solo las imagenes . Pero si lo necesitas, se hace y punto.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 19-10-2005
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Pues eso . no podría explicarlo mejor.

A darle duro a la mollera, que aunque salga humo no se quema !

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #6  
Antiguo 19-10-2005
david duarte david duarte is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 21
david duarte Va por buen camino
Hola!!!

Muchas gracias por su tiempo y por leer estos mensajes.
oigan, una pregunta, a que se refieren con el apaisado??

Lo que estaba pensando hacer para que queden los resultados abajo del titulo de los analisis, es como dicen anteriormente, guardar en un arreglo, solamente el left y el width, pero me gustaria dividir el width/2, asi siempre quedaa a la mitad de cada titulo, no creen?

les anexo el codigo por si quiere hecharle una ojedada, creo que se puede reducir un poco.

Código Delphi [-]
procedure Tfrm_reporte2.FormShow(Sender: TObject);
Var
  b : Boolean;
  fol : String[9];
  cont, arriba, izq, campos,registros,totmuestras,contmuestras : Integer;
begin
  arriba :=0;
  izq :=10;
  cont :=0;
  registros :=0;
  campos :=0;
  contmuestras :=0;
  {si el laboratorio seleccionado es Textil}
  if (form_opcion.label1.Caption[1] = 'T') then
  Begin
    {buscamos el folio que quiere ver el usuario}
    b := modulotablas.tbltextil.Locate('LabFolio', form_opcion.label1.caption, [locaseInsensitive]);
    {si lo encuentra}
    if (b) then
    Begin
       {en las labels uso lo siguiente:
          qr  -> para decir que es de quickreport
          m   -> quiere decir que va a mostrar algo
          lbl -> se trata de un label
      {primero se muestra la parte de la solicitud... analisis, solicitante, etc...}
      frm_reporte2.qrlaboratorio.Caption := frm_reporte2.qrlaboratorio.Caption + ' Textil';
      frm_reporte2.qrmlblfecha.Caption := modulotablas.tbltextil.FieldByName('Fecha').value;
      frm_reporte2.qrmlblfolio.Caption := modulotablas.tbltextil.FieldByName('LabFolio').value;
      frm_reporte2.qrmlblsolicitante.Caption := modulotablas.tbltextil.FieldByName('Solicitante').value;
      frm_reporte2.qrmlbltipomuestra.Caption := modulotablas.tbltextil.FieldByName('Tipo_muestra').value;
      frm_reporte2.qrmlbldeptosol.Caption := modulotablas.tbltextil.FieldByName('Depto_sol').value;
      frm_reporte2.qrmlblpruebasol.Caption := modulotablas.tbltextil.FieldByName('Pruebas').value;
      frm_reporte2.qrmlblobjetivo.Caption := modulotablas.tbltextil.FieldByName('Objetivo_trab').value;
      frm_reporte2.qrmlblfechaent.Caption := modulotablas.tbltextil.FieldByName('Fecha_ent').value;
      modulotablas.resul_textil.First;
      {aqui empieza la parte de resultados de la solicitud}
      fol := modulotablas.resul_textil.FieldByName('LabFolio').value;
      cont := 2; //cont1 se utiliza para manejar el ciclo del numero de muestras del pre
      while fol <> form_opcion.label1.Caption do
      Begin
        modulotablas.resul_textil.Next;
        fol := modulotablas.resul_textil.FieldByName('LabFolio').value;
      end;
      {************************************************************************
       **** ciclo para mostrar los analisis que seleciono el usuario  *********
       ************************************************************************}
      if ((fol = form_opcion.label1.Caption) and (registros < modulotablas.resul_textil.RecordCount)) then
      Begin
          {si contador es menor que los campos que tiene la base de datos}
          if (cont <=  modulotablas.resul_textil.FieldCount-1) then
          Begin
            {mientras campos sea menor que fieldcount}
            while campos < modulotablas.resul_textil.FieldCount-2 do
            Begin
              {si modulotablas en el campo de contados esta seleccionado entonces
               esto es, si el analisis esta seleccionado, creamos la etiqueta}
              if modulotablas.resul_textil.FieldByName(modulotablas.resul_textil.FieldDefs.Items[cont].DisplayName).value <> 'x' then
              Begin
                lab := TQRlabel.Create(QRBResultados); //se crea la label en el QRBResultados
                lab.Top := arriba;
                lab.Left := izq;
                lab.Caption := modulotablas.resul_textil.FieldDefs.Items[cont].DisplayName;
                lab.Parent := frm_reporte2.QRBResultados;
                izq := izq + 4 + FontWidth(lab.Font,lab.Caption);
                cont := cont+1;
                campos := campos +1;
              end //modulotablas.resul_textil.FieldByName(modulotablas.resul_textil.FieldDefs.Items[cont].DisplayName).value <> 'x' then
              else
              Begin
                cont := cont+1;
                campos := campos +1;
              end;
            end; //while campos < modulotablas.resul_textil.FieldCount-1 do
            modulotablas.resul_textil.Next;
          end //if (cont1 <= modulotablas.tbltextil.FieldByName('Num_muestras').value) then
      end; //while ((fol = label1.Caption) and (modulotablas.resul_textil.
      top := arriba;
      left := izq;
      lab := TQRLabel.Create(QRBResultados);
      //esto lo asigno para que se baje al momento de crear las labels de los resultados
      arriba := arriba + 20;
      izq := 20;
      cont := 2;
      campos := 0;
      registros := 0;
      modulotablas.resul_textil.First;
      //este solamente lo ocupo para posicionarme en el folio que debe de ser
      b:= modulotablas.resul_textil.Locate('LabFolio',form_opcion.Label1.Caption,[lopartialkey]);

      {*************************************************************************
       **  aqui empieza el ciclo para mostrar los resultados de los analisis ***
       ************************************************************************}
      while (fol = form_opcion.label1.Caption) and (registros < modulotablas.resul_textil.RecordCount)do
      Begin
        lab.Top := arriba;
        lab.Left := izq;
        //mientras que el contador de muestras sea < que el numero de muestras
        //que capturo el usuario
        while contmuestras  < modulotablas.tbltextil.FieldByName('Num_muestras').value do
        Begin
          //recorre todos los campos de la tabla
          while campos < modulotablas.resul_textil.FieldCount-2 do
          Begin
            if (modulotablas.resul_textil.FieldByName(modulotablas.resul_textil.FieldDefs[cont].DisplayName).value <> 'x') then
            Begin
              lab := TQRLabel.Create(QRBResultados);
              lab.Top := arriba;
              lab.Left := izq;
              if (modulotablas.resul_textil.FieldByName(modulotablas.resul_textil.FieldDefs[cont].DisplayName).value = 'o') then
                lab.caption := '---'
              else
                lab.Caption := modulotablas.resul_textil.FieldByName(modulotablas.resul_textil.FieldDefs.Items[cont].DisplayName).value;
              lab.Parent := QRBResultados;
              if (lab.Left = 0) then
                izq := izq + 7 + FontWidth(lab.Font,lab.Caption)
              else
                izq := izq + 30 + FontWidth(lab.Font,lab.Caption);
            end; //if (modulotablas.resul_textil.FieldByName(modulotablas.resul_textil.FieldDefs[cont].DisplayName).value <> 'x') then
            cont := cont +1;
            campos := campos +1;
          end; //while campos < modulotablas.resul_textil.FieldCount-1 do
          contmuestras := contmuestras+1;
          modulotablas.resul_textil.Next;
          cont := 2;
          campos := 0;
          izq := 20;
          lab := TQRLabel.Create(QRBResultados);
          arriba := arriba + 20;
        end; //if ( cont <= modulotablas.resul_textil.FieldCount-2) then

        arriba := arriba + 20; //-->> vuelvo a asignar otros 20 en cada renglon
        izq := 12;  //-->> asigno a left 12 para que empiece desde 12
        modulotablas.resul_textil.Next;
        inc(registros);
        fol :=  modulotablas.resul_textil.FieldByName('LabFolio').value;
      end; //while fol = form_opcion.label1.Caption do
    end //if (b) then
    else
      ShowMessage ('No se encuentra el folio solicitado');
  end; //if (label1.Caption[1] = 'T') then
  frm_reporte2.QuickRep1.Preview;
  form_opcion.Hide;
end;


De antemano les agradezco su tiempo y su atencion.
Cómo te sientes hoy??
Responder Con Cita
  #7  
Antiguo 21-10-2005
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Hola que tal,
yo cambiaría de estrategia. Crearia una query en tiempo de ejecucion para mostrar los datos, generandola dependiendo del tipo de prueba que se haya realizado.
Por ejemplo

Creas la TQuery o ya la tienes creada
Código:
QueryListado.Clear;
QueryListado.Add('SELECT POSICION');

Bucle que incluye los campos que tienes incluir, ya sabes, que tenga el valor 'o 'y no 'x'
   // Por cada analisis que quieres incluir
   QueryListado.Add(', AnalisisCorrespondiente');
fin del bucle

QueryListado.Add('FROM TABLA WHERE TIPO=:PTipo AND FOLIO=:PFolio ');
QueryListado.Params.ParamByName('PTipo').Value:= form_opcion.label1.Caption[1]; // lo que sea
QueryListado.Params.ParamByName('PFolio').Value:= form_opcion.label1.caption // lo que sea

Y aqui llama a la funcion Generar Listado del código que te pasé
GenerarListado(True, QueryListado, '','','');
Lo pruebas , y si te vale, lo maqueas a tu gusto. En lugar de titulo, empresa, ... que pongo yo pones los campos de Fecha, solicitante, ....

Para comprobar si lo que ves es lo que necesitas, mientras depuras el código de la generación pones un DBGrid en el formulario y ves el resultado.
Ya me contarás, lo que es la presentación te la hace completa.
No he probado nunca la funcion qrCreateList que comenta Lepe, pero también parece una solución buena.

Espero que lo entiendas. No he podido responder antes por que estoy un poco liado, ya sabes, hay que ganarse el pan...
Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
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


La franja horaria es GMT +2. Ahora son las 04:00:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi