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 19-10-2005
david duarte david duarte is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 22
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
  #2  
Antiguo 21-10-2005
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.419
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
  #3  
Antiguo 02-12-2005
david duarte david duarte is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 22
david duarte Va por buen camino
oK fjcg02, creo que seria buena idea, aparte de que seria un poco mas rapido si utilizo querys, lo voy a probar y despues les digo como me fue.

Con lo de reporte, todavia no me queda, tengo problemas para que me añada paginas nuevas, ya utilize el compositereport, pero no me respeta las paginas, si tengo 2, cuando hago el preview, me dice que tengo 2 paginas, pero cuando lo imprimo, me sale en una sola, o me sale en una pagina todo los datos del reporte 1 y parte del reporte 2 y en la segunda pagina, me sale el resto del reporte2.

He estado leyendo acerca del qreport, tengo el ForceNewPage = True, pero dicen que cuando es la primera pagina, el qreport por defecto lo omite o no le hace caso, y vienen ejemplos de como hacerle, pero no le encuentro me siguen marcando error, en este momento no tengo a la mano esas respuestas o preguntas, pero las voy a traer al trabajo y se las mando para ver si alguien logra hacerlo. porque yo nomas no =(.

Gracias.
Responder Con Cita
  #4  
Antiguo 02-12-2005
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.419
Poder: 24
fjcg02 Va camino a la fama
David,
tras leer de nuevo con detenimiento el hilo, me he dado cuenta de que bajo mi punto de vista, tienes un error de concepto. Creo que intentas mostar los datos como si estuvieras escribiendo en un folio en blanco.

El qreport, te permite crear una banda de datos, que repite automáticamente por cada registro de datos que tiene el origen de los datos que le asignas.

Por ejemplo, si tienes una tabla con 5 registros, te repetirá la banda 5 veces. Si la tabla tiene 100 registros, te repite la banda 100 veces. Si el origen es una query, te repite la banda tantas veces como registros devuelve la misma. Comprueba que tu reporte tiene una banda de titulos, y otra de datos, así como asegurarte de que el origen de los datos de tu report es la tabla que contiene los datos. Si para imprimir los datos, se necesitan 15 páginas, las crea automáticamente.

En los ejemplos del Qreport, tienes ejemplos claros de qué puedes conseguir.

Tu problema se reducirá a saber qué campos tienes que visualizar dependiendo del tipo de pruebas que realices; los campos que tengas que poner a '-----' los pones en la función beforeprint del mismo. Si el valor es 0, cambias el valor a '-----'.

Vuelve a mirar tanto el código de Lepe y el mío, la solución te la hemos proporcionado ya en este mismo hilo.

Suerte y un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #5  
Antiguo 05-12-2005
david duarte david duarte is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 22
david duarte Va por buen camino
Si fjcg02, en mi reporte tengo una banda de titulo, que la utilizo para mostrar los valores principales de la solicitud(p.e. el titulo del documento, la fecha en que se creo la solicitud, el numero de la solicitud, los analisis, etc), que estos deben aparecer en cada pagina que se visualice o se imprima.

Tengo una banda de tipo detalle, que la utilizo para mostrar los resultados de los analisis, eso ya lo resolvi...
Mi problema es el siguiente, que aunque cree las labels o el memo o el qerdbtext, no me crea una nueva pagina, tengo el ancho de la banda detalle al minimo y se va ensanchando conforme se van agregando datos o como dices tu, se van creando otras nuevas bandas de detalle por cada valor que se le añada(en el caso de tener las labels).
Y la verdad es que no encuentro alguna solucion, ni siquiera con el composite report.

Gracias.
Cómo te sientes hoy??
Responder Con Cita
  #6  
Antiguo 05-12-2005
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.419
Poder: 24
fjcg02 Va camino a la fama
David,
Con crear una banda de datos, recorrer los campos y asignar EL CAMPO a las QDBLabels es suficiente. Por supuesto, el reporte debe estar asociado a la query o a la tabla. NO DEBES recorrer la tabla para sacar los datos, lo hace el Qreport sólo.
Con los ejemplos que te hemos enviado es suficiente, pero,.... no podemos programar por tí. Insisto, el error que tienes es de concepto. Defines una banda de datos para un registro y se repetirá para cada uno de los registros de la tabla/query ( a ver si te das cuenta del concepto).

Lo que estás haciendo tú es 'estirar' la banda, escribir todos los registros en una banda. NUNCA tienes que utilizar el next, lo hace el qreport.

A ver si tienes más suerte, ... un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #7  
Antiguo 24-04-2006
david duarte david duarte is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 22
david duarte Va por buen camino
Hola!!!!

Perdon por responder hasta hoy, pero estaba ocupado con este proyecto que me ha sacado canas verdes(pero lo bueno es que he aprendido muchisisisisimo)

Lo que hice fue lo siguiente:

cree en tiempo de ejecucion los qrdbtext y les asigne el nombre de la tabla, y el nombre del campo.

Y me funciona a las mil maravillas, ahora lo que no logro es que me muestre espacios en blanco.

algunos campos tienen el valor de 'o' (letra o de Oscar), pero necesito que cuando se muestre el valor( si tiene 'o') que muestre un guion o dos (--),y si tiene otro valor numero, pues que muestre ese valor, pero no encuentro como hacerle

Alguien sabe como resolver este problemilla???
Tengo un rato buscandole pero no logro corregirlo

Muchas gracias!!!!
Saludos!!!!
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 21:13:59.


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