Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Ordenar y/o Agrupar por uno o 2 campos (https://www.clubdelphi.com/foros/showthread.php?t=82602)

steelha 22-03-2013 20:06:05

Ordenar y/o Agrupar por uno o 2 campos
 
Hola estoy utilizando fast report debido a que estoy teniendo problema con los programas cuando utilizo crystal report. Deseo que un reporte el cual logre hacer en fast report se orderne por un campo y se agrupe por 2 o viceversa (En crystal no me tomo mas de 10 min realizarlo). Ademas necesito totalizar en un campo 2 valores por cada registro.

Utilizando delphi 7, fast report 4.9.32.

Campo importantes mes, tipotra, itbis(iva), valorfactura

Aca dejo el codigo para que vean y me ayuden, ya que utilize el wizard de fastreport pero aun asi no logro me ordene o agrupe bien.

Código Delphi [-]
procedure Tfrmgenerar606.AdvGlassButton4Click(Sender: TObject);
var
  ruta : string;
  ano, mes, dia  : Word;
  anop : Integer;
begin
  anop := 0;
  ruta := ExtractFilePath(Application.ExeName)+'\';
  DecodeDate(Date,ano,mes,dia);
  repeat until  TryStrToInt(InputBox('AÑO DEL PERIODO', 'PERIODO',''),anop);
  with dm.sql606 do
  begin
    Close;
    SQL.Clear;
    SQL.Text := 'SELECT [606].TIPOTRA, [606].MES, [606].PERIODO, [606].ANO, [606].RNC, [606].TIPODOC, [606].NCF, [606].NCFMODIFICA, [606].FECHACOMPRA, [606].FECHAPAGO, [606].ITBIS, [606].ITBISRET, [606].MONTOFACT, [606].RETENCION10PORC'+
                ' FROM 606'+
                ' GROUP BY [606].TIPOTRA, [606].MES, [606].PERIODO, [606].ANO, [606].RNC, [606].TIPODOC, [606].NCF, [606].NCFMODIFICA, [606].FECHACOMPRA, [606].FECHAPAGO, [606].ITBIS, [606].ITBISRET, [606].MONTOFACT, [606].RETENCION10PORC'+
                ' HAVING ((([606].ANO)='+IntToStr(anop)+'))'+
                ' ORDER BY [606].TIPOTRA, [606].MES;';

    Open;

    if dm.sql606.RecordCount < 1 then
      begin
        ShowMessage('No existen datos para este registro');
        Exit;
      end
    else
    begin
      {Crystal report
      rptInforme.DiscardSavedData;
      rptInforme.ReportName := ruta+'Reporte606Acumulado.rpt';
      dm.sql606.SQL.Text := 'SELECT * FROM [606] '+ ' WHERE ano = ' + IntToStr(anop);
      dm.sql606.Open;
      rptInforme.Tables[0].DataPointer := @(dm.sql606.Recordset);
      rptInforme.Execute;      }

      //Fastreport
       frxReport1.LoadFromFile(ruta+'Listado606.fr3');
       frxReport1.PrepareReport;
      If frxReport1.PrepareReport Then
         frxReport1.ShowPreparedReport;
    end;
  end;
end;

Favor ayuden con cualquier conocimiento, ya que no encuentro mucho sobre fastreport, gracais de antemano.

Young 25-03-2013 21:27:41

Amigo espero poder ayudarte un poco, te cuento como haría yo ese ejercicio:

1. Quitaría la clausula group by ya que fast-report posee unas bandas para agrupar.
2. La cláusula order by tiene que ser en el mismo orden que vas a agrupar (eso es obvio). Puedes ir anidando grupos.
3. En tu reporte tira una banda "cabecera de grupo" y seleccionas el campo por el que quieres esa agrupación (o una expresión). Ya aquí puedes poner un label asociado al campo de grupo para que lo pruebes.
4. Colocas un banda de datos maestros y arrastras los campos que necesitas.

Ya con esto verás que fast-report se encarga de agrupar los datos, también puedes colocar un pié de grupo en donde puedes totalizar los campos que quieras.

Puede que los nombres que dí cambien un poco ya que lo estoy haciendo de memoria.

Saludos.

steelha 26-03-2013 15:33:52

Muchas gracias Young, no sabia que era tan facil, pero otra preguntita es como puedo dar un total en la misma linea es decir la suma de dos o mas campo por registro

Young 26-03-2013 15:52:09

Cita:

Empezado por steelha (Mensaje 457623)
Muchas gracias Young, no sabia que era tan facil, pero otra preguntita es como puedo dar un total en la misma linea es decir la suma de dos o mas campo por registro

Bueno yo trabajo con IBX y con campos persistentes por lo tanto eso lo haría con campos calculados en el query. Pero por tu forma de trabajar deberías lograrlo con el mismo fast-report arrastrando un label a la banda de datos he insertando los campos y sumandolos. El resultado algo asi:

Código Delphi [-]
[datos.campo1] + [datos.campo2] + etc...

Saludos.

steelha 26-03-2013 16:21:36

Muchas Gracias


La franja horaria es GMT +2. Ahora son las 16:41:45.

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