Lista de facturas de proveedor pendientes -> Arreglos estéticos

git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@882 0c75b7a4-871f-7646-8a2f-f78d34cc349f
This commit is contained in:
David Arranz 2009-01-23 19:19:31 +00:00
parent a8fd42f4df
commit 84eb766751
4 changed files with 235 additions and 64 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,7 @@
object RptFacturasProveedor: TRptFacturasProveedor object RptFacturasProveedor: TRptFacturasProveedor
OldCreateOrder = True OldCreateOrder = True
OnCreate = DataModuleCreate OnCreate = DataModuleCreate
OnDestroy = DataModuleDestroy
Height = 513 Height = 513
Width = 933 Width = 933
object schReport: TDASchema object schReport: TDASchema
@ -933,7 +934,7 @@ object RptFacturasProveedor: TRptFacturasProveedor
RelationShips = <> RelationShips = <>
UpdateRules = <> UpdateRules = <>
Version = 0 Version = 0
Left = 48 Left = 64
Top = 16 Top = 16
end end
object DataDictionary: TDADataDictionary object DataDictionary: TDADataDictionary
@ -1127,7 +1128,7 @@ object RptFacturasProveedor: TRptFacturasProveedor
DataType = datInteger DataType = datInteger
DisplayLabel = 'Cantidad' DisplayLabel = 'Cantidad'
end> end>
Left = 46 Left = 62
Top = 142 Top = 142
end end
object frxDBCabecera: TfrxDBDataset object frxDBCabecera: TfrxDBDataset
@ -1710,52 +1711,58 @@ object RptFacturasProveedor: TRptFacturasProveedor
PrintOptions.Printer = 'Por defecto' PrintOptions.Printer = 'Por defecto'
PrintOptions.PrintOnSheet = 0 PrintOptions.PrintOnSheet = 0
ReportOptions.CreateDate = 37800.807714351900000000 ReportOptions.CreateDate = 37800.807714351900000000
ReportOptions.LastChange = 39835.653141990740000000 ReportOptions.LastChange = 39836.719287280100000000
ScriptLanguage = 'PascalScript' ScriptLanguage = 'PascalScript'
ScriptText.Strings = ( ScriptText.Strings = (
'procedure frxReportOnStartReport(Sender: TfrxComponent);'
'begin'
' Set('#39'Pagina'#39', 0);'
' Set('#39'TotalPaginas'#39', 0); '
'end;'
''
'procedure Band1OnBeforePrint(Sender: TfrxComponent);'
'begin'
' if not Engine.FinalPass then'
' Set('#39'TotalPaginas'#39', (<TotalPaginas> + 1));'
''
' if Engine.FinalPass then'
' Set('#39'Pagina'#39', (<Pagina> + 1)); '
'end;'
''
'procedure mContinuaOnBeforePrint(Sender: TfrxComponent);' 'procedure mContinuaOnBeforePrint(Sender: TfrxComponent);'
'begin' 'begin'
' if Engine.FinalPass then' ' if Engine.FinalPass then'
' begin' ' begin'
' if (<Page#> = <TotalPages#>) then'
' //A la vez que salta este salta la asignacion de pagina por ' +
'lo que no coincide nunca si no suponemos +1 ' +
' ' +
' ' +
' ' +
' '
' if ((<Pagina> + 1) = <TotalPaginas>) then'
' begin ' ' begin '
' mContinua.Visible := True;' ' mContinua.Visible := False;'
' end ' ' end '
' else' ' else'
' begin ' ' begin '
' mContinua.Visible := False;' ' mContinua.Visible := True;'
' end ' ' end '
' end; ' ' end; '
'end;' 'end;'
'' ''
'procedure CabParametrosOnBeforePrint(Sender: TfrxComponent);' 'procedure Memo11OnBeforePrint(Sender: TfrxComponent);'
'begin' 'var'
' if <FechaInicio> = null then'
' CabParametros.Visible := False; ' + ' ACadena : String; ' +
' ' ' '
'begin'
' ACadena := <frxDBInformeListadoFacturasPendResumen."DATOS_BAN' +
'CARIOS">; '
' if Pos('#39'N'#186' de cuenta: '#39', ACadena) > 0 then'
' begin'
' Delete(ACadena, 1, 14);'
' Memo11.Lines.Text := '#39' '#39' + ACadena; ' +
' '
' end;'
'end;'
''
'procedure Memo10OnBeforePrint(Sender: TfrxComponent);'
'var'
' ACadena : String; ' +
' '
'begin'
' ACadena := <frxDBInformeListadoFacturasPendientes."DATOS_BANC' +
'ARIOS">; '
' if Pos('#39'N'#186' de cuenta: '#39', ACadena) > 0 then'
' begin'
' Delete(ACadena, 1, 14);'
' Memo10.Lines.Text := '#39' '#39' + ACadena; ' +
' '
' end;'
'end;' 'end;'
'' ''
'begin' 'begin'
@ -1764,7 +1771,7 @@ object RptFacturasProveedor: TRptFacturasProveedor
ShowProgress = False ShowProgress = False
StoreInDFM = False StoreInDFM = False
OnStartReport = 'frxReportOnStartReport' OnStartReport = 'frxReportOnStartReport'
Left = 145 Left = 153
Top = 16 Top = 16
end end
object vencimientos: TIBQuery object vencimientos: TIBQuery
@ -2053,7 +2060,11 @@ object RptFacturasProveedor: TRptFacturasProveedor
Top = 328 Top = 328
end end
object Bin2DataStreamer: TDABin2DataStreamer object Bin2DataStreamer: TDABin2DataStreamer
Left = 48 Left = 64
Top = 88 Top = 88
end end
object DARemoteDataAdapter: TDARemoteDataAdapter
Left = 64
Top = 200
end
end end

View File

@ -8,7 +8,8 @@ uses
uDADataTable, uDACDSDataTable, DB, uDAClasses, frxChart, frxGradient, uDADataTable, uDACDSDataTable, DB, uDAClasses, frxChart, frxGradient,
frxChBox, frxCross, frxOLE, frxBarcode, frxRich, uDABINAdapter, uROTypes, frxChBox, frxCross, frxOLE, frxBarcode, frxRich, uDABINAdapter, uROTypes,
uDAInterfaces, uDADataStreamer, IBCustomDataSet, IBQuery, IBDatabase, uDAInterfaces, uDADataStreamer, IBCustomDataSet, IBQuery, IBDatabase,
uDAMemDataTable, FactuGES_Intf, frxExportPDF, uDABin2DataStreamer; uDAMemDataTable, FactuGES_Intf, frxExportPDF, uDABin2DataStreamer,
uDARemoteDataAdapter;
type type
TRptFacturasProveedor = class(TDataModule) TRptFacturasProveedor = class(TDataModule)
@ -90,7 +91,9 @@ type
tbl_InformeListadoFacturasPendResumen: TDAMemDataTable; tbl_InformeListadoFacturasPendResumen: TDAMemDataTable;
Bin2DataStreamer: TDABin2DataStreamer; Bin2DataStreamer: TDABin2DataStreamer;
schReport: TDASchema; schReport: TDASchema;
DARemoteDataAdapter: TDARemoteDataAdapter;
procedure DataModuleCreate(Sender: TObject); procedure DataModuleCreate(Sender: TObject);
procedure DataModuleDestroy(Sender: TObject);
private private
FConnection: IDAConnection; FConnection: IDAConnection;
FIdEmpresa: Integer; FIdEmpresa: Integer;
@ -99,12 +102,14 @@ type
FFechaVenInicio: Variant; FFechaVenInicio: Variant;
FFechaVenFin: Variant; FFechaVenFin: Variant;
FListaIDProveedores: TIntegerArray; FListaIDProveedores: TIntegerArray;
FListaNombresProveedores: TStringList;
FImporteMinimo: Currency; FImporteMinimo: Currency;
FDesglosado : Boolean;
procedure RecuperarNombresProveedores;
procedure PrepararTablaInforme(ATabla: TDAMemDataTable); procedure PrepararTablaInforme(ATabla: TDAMemDataTable);
procedure PrepararTablaResumenInforme(ATabla: IDADataset); procedure PrepararTablaResumenInforme(ATabla: IDADataset);
procedure IniciarParametrosInforme;
function _GenerarInforme(const TipoInforme: String): Binary; function _GenerarInforme(const TipoInforme: String): Binary;
public public
function GenerarInformeIVA(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const ListaIDProveedores: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; function GenerarInformeIVA(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const ListaIDProveedores: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary;
function GenerarInformeListadoFacturas(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const FechaVenInicio: Variant; const FechaVenFin: Variant; const ListaIDProveedores: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary; function GenerarInformeListadoFacturas(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const FechaVenInicio: Variant; const FechaVenFin: Variant; const ListaIDProveedores: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary;
@ -116,7 +121,8 @@ implementation
{$R *.dfm} {$R *.dfm}
uses uses
uSistemaFunc, StrUtils, uDataModuleServer, schFacturasProveedorClient_Intf; uSistemaFunc, StrUtils, uDataModuleServer, schFacturasProveedorClient_Intf,
uROServer, DataAbstract4_Intf;
const const
rptInformeIVA = 'InformeIVAProveedores.fr3'; rptInformeIVA = 'InformeIVAProveedores.fr3';
@ -141,6 +147,13 @@ begin
frxDBCabecera.DataSource := DADSCabecera; frxDBCabecera.DataSource := DADSCabecera;
frxDBDetalles.DataSource := DADSDetalles; frxDBDetalles.DataSource := DADSDetalles;
FListaNombresProveedores := TStringList.Create;
end;
procedure TRptFacturasProveedor.DataModuleDestroy(Sender: TObject);
begin
FreeANDNIL(FListaNombresProveedores);
end; end;
function TRptFacturasProveedor.GenerarInformeIVA(const IdEmpresa: Integer; function TRptFacturasProveedor.GenerarInformeIVA(const IdEmpresa: Integer;
@ -164,21 +177,26 @@ begin
FFechaVenInicio := Null; FFechaVenInicio := Null;
FFechaVenFin := Null; FFechaVenFin := Null;
FImporteMinimo := ImporteMinimo; FImporteMinimo := ImporteMinimo;
FDesglosado := Desglosado;
if Assigned(FListaIDProveedores) then if Assigned(FListaIDProveedores) then
FListaIDProveedores.Free; FListaIDProveedores.Free;
FListaIDProveedores := ListaIDProveedores; FListaIDProveedores := ListaIDProveedores;
//Se van a prepara las tablas del informe //Se van a prepara las tablas del informe
if tbl_InformeListadoFacturas.Active then if tbl_InformeListadoFacturas.Active then
tbl_InformeListadoFacturas.Active := False; tbl_InformeListadoFacturas.Active := False;
PrepararTablaInforme(tbl_InformeListadoFacturas); PrepararTablaInforme(tbl_InformeListadoFacturas);
//Se prepara la tabla del listado resumen del informe //Se prepara la tabla del listado resumen del informe
if tbl_InformeListadoFacturasResumen.Active then if tbl_InformeListadoFacturasResumen.Active then
tbl_InformeListadoFacturasResumen.Active := False; tbl_InformeListadoFacturasResumen.Active := False;
dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoFacturasResumen, [], [], False); dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoFacturasResumen, [], [], False);
PrepararTablaResumenInforme(dsMaster); PrepararTablaResumenInforme(dsMaster);
//Esto se hace para rellenar la tabla del datamodule que usa el informe. //Esto se hace para rellenar la tabla del datamodule que usa el informe.
dsMaster.Open; dsMaster.Open;
AStream.Clear; AStream.Clear;
@ -186,7 +204,7 @@ begin
Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasResumen, TRUE, '', TRUE, TRUE); Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasResumen, TRUE, '', TRUE, TRUE);
//DESGLOSADO POR PROVEEDOR EN ESTE INFORME NO SE DESGLOSARÁ POR PROVEEDOR //DESGLOSADO POR PROVEEDOR EN ESTE INFORME NO SE DESGLOSARÁ POR PROVEEDOR
if Desglosado then if FDesglosado then
ATipoInforme := rptInformeIVADesglosado ATipoInforme := rptInformeIVADesglosado
else else
ATipoInforme := rptInformeIVA; ATipoInforme := rptInformeIVA;
@ -226,6 +244,7 @@ begin
FFechaVenInicio := FechaVenInicio; FFechaVenInicio := FechaVenInicio;
FFechaVenFin := FechaVenFin; FFechaVenFin := FechaVenFin;
FImporteMinimo := ImporteMinimo; FImporteMinimo := ImporteMinimo;
FDesglosado := Desglosado;
if Assigned(FListaIDProveedores) then if Assigned(FListaIDProveedores) then
FListaIDProveedores.Free; FListaIDProveedores.Free;
@ -234,13 +253,16 @@ begin
//Se prepara la tabla del listado general del informe //Se prepara la tabla del listado general del informe
if tbl_InformeListadoFacturas.Active then if tbl_InformeListadoFacturas.Active then
tbl_InformeListadoFacturas.Active := False; tbl_InformeListadoFacturas.Active := False;
PrepararTablaInforme(tbl_InformeListadoFacturas); PrepararTablaInforme(tbl_InformeListadoFacturas);
//Se prepara la tabla del listado resumen del informe //Se prepara la tabla del listado resumen del informe
if tbl_InformeListadoFacturasResumen.Active then if tbl_InformeListadoFacturasResumen.Active then
tbl_InformeListadoFacturasResumen.Active := False; tbl_InformeListadoFacturasResumen.Active := False;
dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoFacturasResumen, [], [], False); dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoFacturasResumen, [], [], False);
PrepararTablaResumenInforme(dsMaster); PrepararTablaResumenInforme(dsMaster);
//Esto se hace para rellenar la tabla del datamodule que usa el informe. //Esto se hace para rellenar la tabla del datamodule que usa el informe.
dsMaster.Open; dsMaster.Open;
AStream.Clear; AStream.Clear;
@ -248,7 +270,7 @@ begin
Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasResumen, TRUE, '', TRUE, TRUE); Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasResumen, TRUE, '', TRUE, TRUE);
//DESGLOSADO POR PROVEEDOR EN ESTE INFORME NO SE DESGLOSARÁ POR PROVEEDOR //DESGLOSADO POR PROVEEDOR EN ESTE INFORME NO SE DESGLOSARÁ POR PROVEEDOR
if Desglosado then if FDesglosado then
ATipoInforme := rptInformeListadoFacturasProveedorDesglosado ATipoInforme := rptInformeListadoFacturasProveedorDesglosado
else else
ATipoInforme := rptInformeListadoFacturasProveedor; ATipoInforme := rptInformeListadoFacturasProveedor;
@ -289,6 +311,7 @@ begin
FFechaVenInicio := FechaVenInicio; FFechaVenInicio := FechaVenInicio;
FFechaVenFin := FechaVenFin; FFechaVenFin := FechaVenFin;
FImporteMinimo := ImporteMinimo; FImporteMinimo := ImporteMinimo;
FDesglosado := Desglosado;
if Assigned(FListaIDProveedores) then if Assigned(FListaIDProveedores) then
FListaIDProveedores.Free; FListaIDProveedores.Free;
@ -298,6 +321,7 @@ begin
//Se prepara la tabla del listado general del informe //Se prepara la tabla del listado general del informe
if tbl_InformeListadoFacturasPendientes.Active then if tbl_InformeListadoFacturasPendientes.Active then
tbl_InformeListadoFacturasPendientes.Active := False; tbl_InformeListadoFacturasPendientes.Active := False;
PrepararTablaInforme(tbl_InformeListadoFacturasPendientes); PrepararTablaInforme(tbl_InformeListadoFacturasPendientes);
// Filtrar el informe por situacion // Filtrar el informe por situacion
@ -317,8 +341,10 @@ begin
dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoFacturasPendientesResumen, [], [], False); dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoFacturasPendientesResumen, [], [], False);
PrepararTablaResumenInforme(dsMaster); PrepararTablaResumenInforme(dsMaster);
// Filtrar el informe por situacion // Filtrar el informe por situacion
dsMaster.Where.AddText(' AND (SITUACION <> ''PAGADA'')'); dsMaster.Where.AddText(' AND (SITUACION <> ''PAGADA'')');
//Esto se hace para rellenar la tabla del datamodule que usa el informe. //Esto se hace para rellenar la tabla del datamodule que usa el informe.
dsMaster.Open; dsMaster.Open;
AStream.Clear; AStream.Clear;
@ -326,7 +352,7 @@ begin
Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasPendResumen, TRUE, '', TRUE, TRUE); Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasPendResumen, TRUE, '', TRUE, TRUE);
//DESGLOSADO POR PROVEEDOR EN ESTE INFORME //DESGLOSADO POR PROVEEDOR EN ESTE INFORME
if Desglosado then if FDesglosado then
ATipoInforme := rptInformeListadoFactuasProveedorPendienteDesglosado ATipoInforme := rptInformeListadoFactuasProveedorPendienteDesglosado
else else
ATipoInforme := rptInformeListadoFactuasProveedorPendiente; ATipoInforme := rptInformeListadoFactuasProveedorPendiente;
@ -344,6 +370,56 @@ begin
end; end;
end; end;
procedure TRptFacturasProveedor.IniciarParametrosInforme;
var
ATextos : TStringList;
ACadena : String;
begin
ATextos := TStringList.Create;
try
if (not VarIsNull(FFechaInicio)) and (not VarIsNull(FFechaFin)) then
ACadena := Format('Fechas de factura desde el %s hasta el %s', [VarToStr(FFechaInicio), VarToStr(FFechaFin)])
else
ACadena := 'Sin rango de fechas';
ATextos.Add(ACadena);
ACadena := '';
// Filtrar el informe por fechas de vencimiento
if (not VarIsNull(FFechaVenInicio)) and (not VarIsNull(FFechaVenFin)) then
begin
ACadena := Format('Vencimientos desde el %s hasta el %s', [VarToStr(FFechaVenInicio), VarToStr(FFechaVenFin)]);
ATextos.Add(ACadena);
ACadena := '';
end;
if (FImporteMinimo > 0) then
begin
ACadena := Format('Facturas con importe superior a %m', [FImporteMinimo]);
ATextos.Add(ACadena);
ACadena := '';
end;
if Assigned(FListaIDProveedores) and (FListaIDProveedores.Count > 0) then
begin
RecuperarNombresProveedores;
ACadena := FListaNombresProveedores.Text;
end
else begin
ACadena := 'Todos los proveedores';
if FDesglosado then
ACadena := ACadena + ' (desglosados)'
end;
ATextos.Add(ACadena);
ACadena := '';
frxReport.Variables.Variables['TextoParametros'] := ATextos.Text;
finally
FreeAndNil(ATextos);
end;
end;
procedure TRptFacturasProveedor.PrepararTablaInforme(ATabla: TDAMemDataTable); procedure TRptFacturasProveedor.PrepararTablaInforme(ATabla: TDAMemDataTable);
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;
@ -362,8 +438,8 @@ begin
end; end;
// Filtrar el informe por fechas // Filtrar el informe por fechas
if not VarIsNull(FFechaInicio) if not VarIsNull(FFechaInicio) and
and not VarIsNull(FFechaFin) then not VarIsNull(FFechaFin) then
begin begin
with ATabla.DynamicWhere do with ATabla.DynamicWhere do
begin begin
@ -475,19 +551,109 @@ begin
ATabla.Where.AddText(AWhereStr); ATabla.Where.AddText(AWhereStr);
end; end;
procedure TRptFacturasProveedor.RecuperarNombresProveedores;
var
AContactosService : IsrvContactos;
Intf : IInterface;
AClientID : TGUID;
ATableNameArray: StringArray;
ATableRequestInfoArray: TableRequestInfoArray;
ATableRequestInfo: TableRequestInfoV5;
AStream: TMemoryStream;
ADataTable: TDAMemDataTable;
i: Integer;
AWhereBuilder : TDAWhereBuilder;
ACondicion : TDAWhereExpression;
begin
CreateGUID(AClientID);
GetClassFactory('srvContactos').CreateInstance(AClientID, Intf);
if Assigned(Intf) then
begin
AContactosService := Intf as IsrvContactos;
ATableNameArray := StringArray.Create;
ATableRequestInfoArray := TableRequestInfoArray.Create;
AWhereBuilder := TDAWhereBuilder.Create;
try
ATableNameArray.Add('Proveedores');
ATableRequestInfo := TableRequestInfoV5.Create;
with ATableRequestInfo do
begin
IncludeSchema := True;
MaxRecords := -1;
UserFilter := '';
AWhereBuilder.Clear;
with AWhereBuilder do
for i := 0 to FListaIDProveedores.Count - 1 do
begin
ACondicion := NewBinaryExpression(
NewBinaryExpression(NewField('', 'ID'), NewConstant(FListaIDProveedores[i], datInteger), dboEqual),
NewBinaryExpression(NewField('', 'ID_EMPRESA'), NewConstant(FIdEmpresa, datInteger), dboEqual),
dboAnd);
if not AWhereBuilder.IsEmpty then
Expression := NewBinaryExpression(Expression, ACondicion, dboOr)
else
Expression := ACondicion;
end;
WhereClause := AWhereBuilder.ExpressionToXmlNode(AWhereBuilder.Expression);
end;
try
ATableRequestInfoArray.Add(ATableRequestInfo);
AStream := AContactosService.GetData(ATableNameArray, ATableRequestInfoArray);
if Assigned(AStream) then
begin
ADataTable := TDAMemDataTable.Create(nil);
try
ADataTable.Name := 'Proveedores';
ADataTable.LocalDataStreamer := Bin2DataStreamer;
ADataTable.RemoteFetchEnabled := False;
Bin2DataStreamer.ReadDataset(AStream, ADataTable, True);
ADataTable.Open;
FListaNombresProveedores.Clear;
for i := 0 to ADataTable.RecordCount - 1 do
begin
FListaNombresProveedores.Add(ADataTable.FieldByName('NOMBRE').AsString);
ADataTable.Next;
end;
finally
FreeANDNil(ADataTable);
end;
end;
except
on e: Exception do
dmServer.EscribirLog(e.Message);
end;
finally
FreeANDNIL(ATableRequestInfoArray);
FreeANDNIL(ATableNameArray);
FreeANDNIL(AWhereBuilder);
end;
end;
end;
function TRptFacturasProveedor._GenerarInforme(const TipoInforme: String): Binary; function TRptFacturasProveedor._GenerarInforme(const TipoInforme: String): Binary;
var var
AInforme: Variant; AInforme: Variant;
begin begin
Result := Binary.Create; Result := Binary.Create;
AInforme := DarRutaFichero(DarRutaInformes, TipoInforme, IntTostr(FIdEmpresa)); AInforme := DarRutaFichero(DarRutaInformes, TipoInforme, IntTostr(FIdEmpresa));
if VarIsNull(AInforme) then if VarIsNull(AInforme) then
raise Exception.Create (('Error Servidor: _GenerarInforme, no encuentra informe ' + TipoInforme)); raise Exception.Create (('Error Servidor: _GenerarInforme, no encuentra informe ' + TipoInforme));
frxReport.LoadFromFile(AInforme, True); frxReport.LoadFromFile(AInforme, True);
frxReport.Variables.Variables['FechaInicio'] := FFechaInicio; IniciarParametrosInforme;
frxReport.Variables.Variables['FechaFin'] := FFechaFin;
frxReport.PrepareReport(False); frxReport.PrepareReport(False);
frxReport.PreviewPages.SaveToStream(Result); frxReport.PreviewPages.SaveToStream(Result);