Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-03-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 27
__cadetill Va por buen camino
aunque no tengas los campos persistentes en la Query, si siempre devuelve las mismas columnas, puedes escribir tu "a mano" el nombre del campo que quieras visualizar en él
Responder Con Cita
  #2  
Antiguo 23-03-2004
chele chele is offline
Miembro
 
Registrado: feb 2004
Posts: 83
Poder: 23
chele Va por buen camino
Ok,he probado como comentas, puse esto :

procedure TListadosCasosAbiertos.Button1Click(Sender: TObject);
var cadenaSQL : string;
impresion1: tIBQUERY;
qry: tIBQUERY;
begin

cadenaSQL := 'select refcomp as referencia, expedientes.codexp as codexpediente from expedientes inner join resumenpagos on resumenpagos.codexp=expedientes.codexp';

qry := TIBQuery.Create(qry);
qry.database := datamodule2.database;
Qry.SQL.Text := cadenaSQL;
qry.open();

CHlistadoAbiertoImpr.QuickRep1.DataSet := qry;
CHlistadoAbiertoImpr.QRDBText1.DataSet :=qry;
CHlistadoAbiertoImpr.QRDBText1.DataField := qry.fieldbyname('referencia').value;
CHlistadoAbiertoImpr.QuickRep1.Preview;

end;


Y me muestra las dos lineas ( es decir picha bien los datos ) pero en el TQRDBtext no me muestra ningun valor.

¿Que hago mal?.

Gracias anticipadas.
Responder Con Cita
  #3  
Antiguo 23-03-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Si estas intentando hacer listados personalizados....
Yo he usado la función QRCreateList de la unidad qrExtra.

En la ayuda de quickReports viene un ejemplo con el que empezar.

Con esta opcion, le envias el dataset del que provienen los datos y un TstringList con el nombre de los campos que quieres visualizar, y crea el listado automaticamente, despues de generado el informe, puedes recorrerlo para cambiar ciertos detalles como el pié de pagina (para ponerlo en español), etc...

Hay un detalle que se puede corregir, Cuando creas el listado, el ancho de cada columna lo coge de la propiedad DisplayWidth del Tfield, se puede cambiar esa propiedad en tiempo de ejecución (antes de lanzar el listado) para que el ancho de cada columna se ajuste al texto que se va a imprimir.

Pruebalo, y si te interesa, posteo mi funcion AjustaDisplayWidth

Saludos
Responder Con Cita
  #4  
Antiguo 23-03-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 27
__cadetill Va por buen camino
Cita:
Empezado por chele
CHlistadoAbiertoImpr.QRDBText1.DataField := qry.fieldbyname('referencia').value;
Es que no es el Value lo que has de asignar, sino "referencia" directamente, es decir, el nombre del campo.

Pero sigo diciendo que lo puedes asignar en diseño, no en ejecución si la query retorna siempre los mismos campos.

Por otro lado, Lepe yo sí estaría interesado en ver como haces eso, me ha gustado el tema este del QRCreateList
Responder Con Cita
  #5  
Antiguo 23-03-2004
chele chele is offline
Miembro
 
Registrado: feb 2004
Posts: 83
Poder: 23
chele Va por buen camino
Referencia ... te cagas ahora funciona.

ES decir tengo que asignarle el nombre que le he puesto en la tabla.

Vale ahora si te entiendo, claro yo le meto el sql y ahi ya le envio los valores, joder que torpe soy a veces XD

Gracias muchas gracias ya me funciona, ahora a seguir investigando.
Responder Con Cita
  #6  
Antiguo 23-03-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 27
__cadetill Va por buen camino
Siguiendo con el tema del QRCreateList, en la página de QuSoft hay una demo. Os dejo la URL

MODIFICACION: si os descargais esta demo, tener en cuenta que en versiones posteriores a la de Delphi para la que fué diseñado (1..3) cambian el tipo de los parámetros (en lugar de un TQuickReport hay que pasar un TCustomQuickReport). Esto conlleva cambiar el tipo de la variable y tener que hacer algún que otro casteo para que funcione la demo en versiones posteriores de Delphi (como la 6 que es en la que yo lo he probado)

Última edición por __cadetill fecha: 23-03-2004 a las 13:03:41.
Responder Con Cita
  #7  
Antiguo 23-03-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Bueno, aqui va una de código, ahh, si quereis optimizar el código... será bienvenido

Uso una funcion rarita... codigoutil.ifthen es la equivalente que tiene Delphi en la unidad Math, strutils, y en otra unidad más que no recuerdo, yo las he metido en un .pas llamado CodigoUtil .... muy original .... ya

Las Lineas que empiezan con FrmDebug.anade ... son llamadas a una ventana auxiliar para ver por donde iba el programa y como furulaba. (pueden obviarse esas lineas.

Código:
procedure AjustaDisplayWidth(D:TDataSet;const MaxAncho:Integer = 150);
var i, nIdx:Integer;
begin
if D.Active then
begin
  try
  D.DisableControls;
  D.First;
  nIdx:=0;
  while not D.Eof do
  begin
     for i:=0 to pred(D.FieldCount) do
     begin
          // en la 1ª vuelta reseteo el displayWidth existente
          if (nIdx = 0) then
            D.Fields[i].DisplayWidth  := 1;
          D.Fields[i].DisplayWidth  :=EnsureRange(
                                                  Max(  D.Fields[i].DisplayWidth,
                                                        Length(D.Fields[i].AsString)+
 codigoutil.IfThen(D.Fields[i].DataType = ftFloat, 3) 
// añadimos espacios para ,00
                                                      ),
                                                  0,MaxAncho);
     end;
     D.Next;
     Inc(nIdx);
  end;
  finally
    D.EnableControls;
  end;
end; // D.active
end;
Formatear los números para que salgan en los listados con 2 decimales y puntos de millar:
Código:
procedure FormatFloatFields(Rpt:TcustomQuickrep);
var j :Integer;
    Band : TQRcustomBand;
begin
  Band := Rpt.Bands.DetailBand;

  for j:=0 to Band.ControlCount -1 do
  if Band.Controls[j] is TQRExpr  then
  with TQRExpr(Band.Controls[j]) do
  begin
    if (Pos('percentiva',Expression) = 0)) then
      Mask := '#,##0.00'; // curosamente si es un texto lo que hay no le
                                 // afecta, solo he probado con campos de
                                //  Float, Texto, Boolean y enteros. con los demás no 
                               //  sé que hará exactamente.
  end;
end;
Añadir un SummaryBand en tiempo de ejecución (despues de la linea del QrcreateList) Esta funcion es un coñazo.... no está muy bien hecha . Además he encontrado algunos bugs menores que no sé como solucionarlos.

Código:
procedure AnadirSummaryBand(Rpt:TcustomQuickrep;const Data : TDataSet;const Campos:TStringList);

const SEP = 20;

var i :Integer;
    MaxLeft : Integer;
    CampoActual: TField;
    TotalLabel : TQRLabel;
    Total     : TQRExpr;
    Unidades: TQRUnit;
begin
// 9-03-2004  añadir totales al informe
  with Rpt do
  begin
    Unidades:= units;
    Units := Pixels;
    if not Bands.HasSummary then
    begin
       Bands.HasSummary:= True;
       with Bands.SummaryBand do
       begin
         Height:= 50;
         Frame.DrawTop:= True;
         Frame.DrawBottom:= True;

// El texto puede salirse a la dcha de la linea right
//         Frame.DrawLeft:= True;
//         Frame.DrawRight:= True;
      end;
    end;
    MaxLeft:=0;
    for i:=0 to pred(Campos.Count) do
    begin
      CampoActual := Data.FindField(Campos[i]);
      if CampoActual  <> nil then
      if CampoActual.DataType = ftfloat then
      begin
        if CampoActual.FieldName= 'percentiva' then
          Continue;

        TotalLabel := TQRLabel(Rpt.Bands.SummaryBand.AddPrintable(TQRLabel));
        TotalLabel.Top:= 10;
        TotalLabel.AutoSize:= True;
        TotalLabel.Caption:= LeftStr(CampoActual.DisplayLabel,10)+':';
      // Base Imponible se solapa con el siguiente campo que haya
        totallabel.Frame.DrawBottom:= True;
//        frmDebug.Anade(['left antes', 'maxleft '],[TotalLabel.Left, MaxLeft] );
        TotalLabel.Left:= MaxLeft; 

        total := TQRExpr(Bands.SummaryBand.AddPrintable(TQRExpr));
        total.Top:= 30;
        Total.AutoSize:= True;
        total.Expression:= 'SUM('+ CampoActual.FieldName+')';
        Total.Left:= TotalLabel.Left;
        Total.Mask:= '#,##0.00';
        MaxLeft := Max(Total.Width, TotalLabel.Width)+ MaxLeft+SEP;

//        frmDebug.Anade('pagina' + FloatToStr(Rpt.Page.Width)+' maxleft '+IntToStr(MaxLeft));

        if (Rpt.Page.Orientation = poportrait) and (MaxLeft >Rpt.Page.Width) then
          Rpt.Page.Orientation:= poLandscape;
      end;
    end;
  end;
// fin 9-03-2004  añadir totales al informe

  Rpt.Units:= Unidades;
end;
Cambiar el número de pagina poniendolo en español, despues de la linea del qrcreatelist
Código:
    with TQRExpr(V.pQuickreport.Bands.PageFooterBand.Controls[0]) do
      expression := QuotedStr('Página ') +'+ PAGENUMBER';
// PAGENUMBER es una variable que entiende QUICKREPORTS
La forma correcta de llamarlo sería asÍ:
Código:
V:=  TPrevi.Create(FrmMdi );
  FreeAndNil(V.pquickreport);
  qrextra.QRCreateList(tcustomquickrep(V.pQuickreport),v, DTM.qryAlb,
                        TituloListado ,ListaCampos);

  AjustaDisplayWidth(dtm.qryalb);
  AnadirSummaryBand(V.pQickReport,dtm.qryAlb,ListaCampos);
  FormatFloatFields(V.pQuickReport);


    with TQRExpr(V.pQuickreport.Bands.PageFooterBand.Controls[0]) do
      expression := QuotedStr('Página ') +'+ PAGENUMBER';
// PAGENUMBER es una variable que entiende QUICKREPORTS
  V.pQuickreport.units:= MM;
  V.pQuickreport.OnPreview:= ListadoOnPreview;
Los Uses que os puede pedir son estos:
Código:
uses  nkstrs,Forms,strutils, Windows,Graphics,Registry,dbtables, Classes,
      types, sysutils,DB, dbgrids, math ,Variants,
      QuickRpt,QRCTRLS, qrprntr, Controls,qrexpr,printers // anadirSummaryband
Espero no olvidarme de nada... Aunque no lo juro, ha sido copy y paste.

Cadetill: ojo al TPrevi.Create

Buen Provecho.
Responder Con Cita
  #8  
Antiguo 24-03-2004
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 cadetill
Siguiendo con el tema del QRCreateList, en la página de QuSoft hay una demo. Os dejo la URL
Bonito ejemplo

PD: Hace un par de semanas me habría venido de perlas ese enlace
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 20:33:10.


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