PDA

Ver la Versión Completa : Ordenar y/o Agrupar por uno o 2 campos


steelha
22-03-2013, 20:06:05
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.

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
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:

[datos.campo1] + [datos.campo2] + etc...

Saludos.

steelha
26-03-2013, 16:21:36
Muchas Gracias