Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Datos se muestran repetidos (https://www.clubdelphi.com/foros/showthread.php?t=65792)

elarys 13-01-2010 14:25:46

Datos repetidos con FastReport
 
Necesito hacer un reporte con 3 paginas
Estas son las tablas que tengo

Código SQL [-]
DailyStatements
Number  PrintDate   TotDuty  TotTax
170925  09/15/2009  1154.55    0.00

Shipment_ABI
Number  Importer  Broker  EstDuty  EstTax
170925  58-23945  176178   533.85    0.00
170925  58-23945  176178   620.70    0.00

ABI_STMT_MSG
Number  ENTRY   SOURCE
170925  11111   ABI

Shipment_ABIFees
Number  Shipment  FeeCode  Amount
170925  10120     499      25.00
170925  20254     501      13.86
170925  20247     499      25.00
170925  20178     501      11.92

Codes
Code  Description
499   Merchandise
501   Harbor Fee


Tengo echa esta consulta
Código SQL [-]
SELECT SUM(FeeAmount) Total, C.Description, D.Number, D.PrintDate, D.TotDuty,
D.TotTax, S.Importer, S.Broker, S.EstDuty, S.EstiTax, M.Entry, M.Source
FROM DailyStatements D
LEFT JOIN Shipment_ABI S ON (D.Number = S.Number)
LEFT JOIN ABI_STMT_MSG M ON (D.Number = M.Number)
LEFT JOIN Shipment_ABIFees F ON (D.Number = F.Number)
LEFT JOIN BASICO.dbo.Codes C ON (C.Code=F.FeeCode)
WHERE D.Number ='170925'
GROUP BY F.FeeCode, C.Description,
D.Number, D.PrintDate, D.TotDuty, D.TotTax,
S.Importer, S.Broker, S.EstDuty, S.EstiTax,
M.Entry, M.Source
ORDER BY Number

Esto me devuelve
Código SQL [-]
Total  Description  Number  PrintDate   TotDuty  TotTax  Importer  Broker  EstDuty  EstTax  Entry  Source
50.00  Merchandise  170925  09/15/2009  1154.55    0.00  58-23945  176178   533.85    0.00  11111  ABI
50.00  Merchandise  170925  09/15/2009  1154.55    0.00  58-23945  176178   620.70    0.00  11111  ABI
25.78  Harbor Fee   170925  09/15/2009  1154.55    0.00  58-23945  176178   533.85    0.00  11111  ABI
25.78  Harbor Fee   170925  09/15/2009  1154.55    0.00  58-23945  176178   620.70    0.00  11111  ABI

Bueno quiero saber que estoy haciendo mal o que me falta para que los datos no se repitan en el informe.
Aunque si se repiten en la consulta porque esta devuelve el producto cartesiano

Este seria el informe que me muestra en este momento

Código SQL [-]
PAGE: 1

STATEMENT: 170925
PRINT DATE: 09/15/2009     
                                                                                            
BROKER  EST. DUTY  EST. TAX
176178     533.85      0.00
176178     620.70      0.00
176178     533.85      0.00
176178     620.70      0.00

------------------------------

PAGE: 2

STATEMENT: 170925
PRINT DATE: 09/15/2009 

Totals
Total Duty   1,154.55
Total Taxes      0.00
Merchandise     50.00
Merchandise     50.00
Harbor Fee      25.78
Harbor Fee      25.78

------------------------------

PAGE: 3

STATEMENT: 170925
PRINT DATE: 09/15/2009 

ENTRY   SOURCE
11111   ABI
11111   ABI
11111   ABI
11111   ABI

Se repite los datos en detalle...

Tendria que mostrar asi
Código SQL [-]
PAGE: 1

STATEMENT: 170925
PRINT DATE: 09/15/2009     
                                                                                            
BROKER  EST. DUTY  EST. TAX
176178     533.85      0.00
176178     620.70      0.00

------------------------------

PAGE: 2

STATEMENT: 170925
PRINT DATE: 09/15/2009 

Totals
Total Duty   1,154.55
Total Taxes      0.00
Merchandise     50.00
Harbor Fee      25.78

------------------------------

PAGE: 3

STATEMENT: 170925
PRINT DATE: 09/15/2009 

ENTRY   SOURCE
11111   ABI

Repito por las dudas que el reporte esta en FastReport
Bueno y seguramente le estoy errando en algo o me esta faltando algo

El reporte tiene la cabecera que se repite en las 3 paginas
Con un GroupHeader con el DataSet filtrando por Number

El detalle apuntando al DataSet = DS
Mas o menos asi

Código SQL [-]
PAGE: 1

GroupHeader        DS."Number"

STATEMENT: DS."Number"
PRINT DATE: DS."PrintDate"
                               
En detalle
MasterData         DS
Broker        EST. DUTY      EST. TAX
DS."Broker"   DS."EstDuty"   S."EstTax"

Igual para la pagina2 y pagina3 pero cambia lo que va dentro del masterdata
------------------------------

PAGE: 2

STATEMENT: DS."Number"
PRINT DATE: DS."PrintDate"

Totals
Total Duty    DS."TotDuty"
Total Taxes   DS."TotTax"

MasterData         DS
DS."Description"   DS."Total"

------------------------------

PAGE: 3

STATEMENT: DS."Number"
PRINT DATE: DS."PrintDate"

Entry        Source
DS."Entry"   DS."Source"

Espero que me puedan dar una idea si estoy mal en mi consulta o en FastReport, creo que el 2do es donde fallo
Noten que el reporte tiene 3 paginas en donde se repite la cabecera y lo que va cambiando es el detalle

Page 1
Cabecera igual
Detalle Page1

Page 2
Cabecera igual
Detalle Page2

Page 3
Cabecera igual
Detalle Page3

Lo de mostrar los reportes con [ SQL ] [ / SQL ] es porque no sabia como mostrar los ejemplos
si tengo algun error en los datos, es porque resumi de lo que tengo hecho, seria muy engorroso ya que muestro 10 veces mas datos

elarys 14-01-2010 20:11:30

Se me ocurre hacer una consulta por pagina a mostrar como si fueran reportes diferentes

Código SQL [-]
SELECT D.Number, D.PrintDate, D.TotDuty, D.TotTax, S.Importer, S.Broker, S.EstDuty, S.EstiTax,
FROM DailyStatements D
LEFT JOIN Shipment_ABI S ON (D.Number = S.Number)
WHERE D.Number ='170925'
ORDER BY Number

Código SQL [-]
SELECT SUM(FeeAmount) Total, C.Description, D.Number, D.PrintDate, D.TotDuty, D.TotTax
FROM DailyStatements D
LEFT JOIN Shipment_ABIFees F ON (D.Number = F.Number)
LEFT JOIN BASICO.dbo.Codes C ON (C.Code=F.FeeCode)
WHERE D.Number ='170925'
GROUP BY F.FeeCode, C.Description, D.Number, D.PrintDate, D.TotDuty, D.TotTax,
ORDER BY Number

Código SQL [-]
SELECT D.Number, D.PrintDate, D.TotDuty, D.TotTax, M.Entry, M.Source
FROM DailyStatements D
LEFT JOIN ABI_STMT_MSG M ON (D.Number = M.Number)
WHERE D.Number ='170925'
ORDER BY Number

Esto funciona bien pero al cambiarle el WHERE y pasarle muchos registros
Me esta mostrando
Page 1
1º registro
2º registro
etc

Page 2
1º registro
2º registro
etc

Page 3
1º registro
2º registro
etc


Y tengo que mostrar el reporte asi:
1º registro
Page 1
Page 2
Page 3

2º registro
Page 1
Page 2
Page 3

y asi n registros, nadie me da una mano

elarys 15-01-2010 18:34:37

Mi funcion para mostrar el reporte
Suprimido el reporte tiene 10 veces mas datos, solo muestro pocos datos aca, asi se entiende


Código Delphi [-]
procedure PrintDailyStatement(number:string;filter:string);
var
  sql:string;
  MyReport:TfrxReport;
  RptFr3:string;
  QryAux1:TADOQuery;
  DsrAux1:TDataSource;
  QryAux2:TADOQuery;
  DsrAux2:TDataSource;
  QryAux3:TADOQuery;
  DsrAux3:TDataSource;
begin
  QryAux1:=tadoquery.Create(nil);
  DsrAux1:=TDataSource.Create(nil);
  QryAux2:=tadoquery.Create(nil);
  DsrAux2:=TDataSource.Create(nil);
  QryAux3:=tadoquery.Create(nil);
  DsrAux3:=TDataSource.Create(nil);

  sql:= ' SELECT D.Number, D.PrintDate, D.TotDuty, D.TotTax,'+
        ' S.Importer, S.Broker, S.EstDuty, S.EstiTax'+
        ' FROM DailyStatements D'+
        ' LEFT JOIN Shipment_ABI S ON (D.Number = S.Number)'+
        ' WHERE D.Number <> '+QuotedStr('');

  if filter = '' then
    sql:= sql +
        ' AND D.Number='+QuotedStr(number)+
        ' ORDER BY D.Number'
  else
    sql:= sql + filter + ' ORDER BY D.Number';

  dressqueries(QryAux1,sql,Datafiles.dbBROKERAGE);
  DsrAux1.DataSet:=QryAux1;
  Datafiles.frxDBDataset1.DataSource := DsrAux1;

  sql:= ' SELECT SUM(FeeAmount) Total, C.Description,'+
        ' D.Number, D.PrintDate, D.TotDuty, D.TotTax'+
        ' FROM DailyStatements D'+
        ' LEFT JOIN Shipment_ABIFees F ON (D.Number = F.Number)'+
        ' LEFT JOIN BASICO.dbo.Codes C ON (C.Code=F.FeeCode)'+
        ' WHERE D.Number <> '+QuotedStr('');

  if filter = '' then
    sql:= sql +
        ' AND D.Number='+QuotedStr(number)+
        ' GROUP BY F.FeeCode, C.Description,'+
        ' D.Number, D.PrintDate, D.TotDuty, D.TotTax'+
        ' ORDER BY D.Number'
  else
    sql:= sql + filter +
        ' GROUP BY F.FeeCode, C.Description,'+
        ' D.Number, D.PrintDate, D.TotDuty, D.TotTax'+
        ' ORDER BY D.StatementNumber';

  dressqueries(QryAux2,sql,Datafiles.dbBROKERAGE);
  DsrAux2.DataSet:=QryAux2;
  Datafiles.frxDBDataset2.DataSource := DsrAux2;

  sql:= ' SELECT'+
        ' D.Number, D.PrintDate, D.TotDuty, D.TotTax,'+
        ' M.Entry, M.Source'+
        ' FROM DailyStatements D'+
        ' LEFT JOIN ABI_STMT_MSG M ON (D.Number = M.Number)'+
        ' WHERE M.Entry <> '+QuotedStr('');

  if filter = '' then
    sql:= sql +
        ' AND D.Number='+QuotedStr(number)+
        ' ORDER BY D.Number'
  else
    sql:= sql + filter + ' ORDER BY D.Number';

  dressqueries(QryAux3,sql,Datafiles.dbBROKERAGE);
  DsrAux3.DataSet:=QryAux3;
  Datafiles.frxDBDataset3.DataSource := DsrAux3;

  RptFr3 := Datafiles.StrPath+Datafiles.dbbasico.DLLCommon_Path + 'reports\DailyStatement.fr3';

  MyReport := Datafiles.Report;
  MyReport.LoadFromFile(RptFr3);
  MyReport.PreviewOptions.Modal := true;
  MyReport.PreviewOptions.AllowEdit := false;
  MyReport.PreviewOptions.OutlineVisible := false;
  MyReport.PrintOptions.ShowDialog := false;
  MyReport.ReportOptions.Compressed := true;

  frmPreviewer := TfrmPreviewer.Create(nil);
  frmPreviewer.form_name:='Daily Statement';
  MyReport.PrepareReport;
  MyReport.Preview := frmPreviewer.Preview;
  frmPreviewer.ShowModal;
end;

Me lei la ayuda de Fast Report 4 y solo tiene explicado un informe con Group Header y un Master Data al estilo de una factura.


La franja horaria es GMT +2. Ahora son las 19:14:25.

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