PDA

Ver la Versión Completa : Datos se muestran repetidos


elarys
13-01-2010, 14:25:46
Necesito hacer un reporte con 3 paginas
Estas son las tablas que tengo


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

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

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


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

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


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


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



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



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



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.