2007-11-13 19:36:56 +00:00
unit uRptPresupuestosCliente_Server;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, frxClass, frxDBSet, uDAScriptingProvider,
uDADataTable, uDACDSDataTable, DB, uDAClasses, uDABINAdapter, uROTypes,
uDAInterfaces, uDAMemDataTable, uDADataStreamer, uDABin2DataStreamer,
2007-11-19 15:30:02 +00:00
frxGradient, frxChBox, frxCross, frxOLE, frxBarcode, frxRich, uDAEngine,
2008-08-22 14:52:35 +00:00
IBSQL, IBDatabase, IBCustomDataSet, IBQuery, frxExportPDF, FactuGES_Intf;
2007-11-13 19:36:56 +00:00
type
TRptPresupuestosCliente = class( TDataModule)
2007-12-11 16:24:53 +00:00
DADSCabecera: TDADataSource;
DADSDetalles: TDADataSource;
2007-11-13 19:36:56 +00:00
frxBarCodeObject1: TfrxBarCodeObject;
frxOLEObject1: TfrxOLEObject;
frxCrossObject1: TfrxCrossObject;
frxCheckBoxObject1: TfrxCheckBoxObject;
frxGradientObject1: TfrxGradientObject;
frxDBCabecera: TfrxDBDataset;
frxDBDetalles: TfrxDBDataset;
tbl_Cabecera: TDAMemDataTable;
2007-11-19 15:30:02 +00:00
frxReport: TfrxReport;
IBDatabase1: TIBDatabase;
IBTransaction1: TIBTransaction;
DataSource1: TDataSource;
DataSource2: TDataSource;
2007-12-11 16:24:53 +00:00
capitulos: TIBQuery;
DataSource3: TDataSource;
2007-11-19 15:30:02 +00:00
detalles: TIBQuery;
2007-12-11 16:24:53 +00:00
DataSource4: TDataSource;
resumen: TIBQuery;
resumenID: TIntegerField;
resumenID_PRESUPUESTO: TIntegerField;
resumenPOSICION: TIntegerField;
resumenTIPO_DETALLE: TIBStringField;
resumenCONCEPTO: TIBStringField;
resumenIMPORTE_TOTAL: TIBBCDField;
resumenVISIBLE: TSmallintField;
frxDBCapitulos: TfrxDBDataset;
frxDBResumen: TfrxDBDataset;
DABin2DataStreamer1: TDABin2DataStreamer;
cabecera: TIBQuery;
cabeceraID: TIntegerField;
cabeceraID_EMPRESA: TIntegerField;
cabeceraFECHA_PRESUPUESTO: TDateField;
cabeceraREFERENCIA: TIBStringField;
cabeceraPORTADA: TMemoField;
cabeceraMEMORIA: TMemoField;
cabeceraOBSERVACIONES: TMemoField;
cabeceraIMPORTE_NETO: TIBBCDField;
cabeceraIMPORTE_PORTE: TIBBCDField;
cabeceraDESCUENTO: TFloatField;
cabeceraIMPORTE_DESCUENTO: TIBBCDField;
cabeceraBASE_IMPONIBLE: TIBBCDField;
cabeceraIVA: TFloatField;
cabeceraID_CLIENTE: TIntegerField;
cabeceraREFERENCIA_CLIENTE: TIBStringField;
cabeceraCLIENTE_FINAL: TIBStringField;
cabeceraNIF_CIF: TIBStringField;
cabeceraNOMBRE: TIBStringField;
cabeceraIMPORTE_IVA: TIBBCDField;
cabeceraIMPORTE_TOTAL: TIBBCDField;
cabeceraPERSONA_CONTACTO: TIBStringField;
cabeceraCALLE: TIBStringField;
cabeceraPOBLACION: TIBStringField;
cabeceraPROVINCIA: TIBStringField;
cabeceraCODIGO_POSTAL: TIBStringField;
DADSCapitulos: TDADataSource;
tbl_Capitulos: TDAMemDataTable;
DADSResumen: TDADataSource;
tbl_Resumen: TDAMemDataTable;
2008-09-02 16:21:43 +00:00
frxPDFExport1: TfrxPDFExport;
2008-10-21 17:58:25 +00:00
DADSInformeListadoPresupuestos: TDADataSource;
tbl_InformeListadoPresupuestos: TDAMemDataTable;
frxDBInformeListadoPresupuestos: TfrxDBDataset;
2009-01-23 16:36:53 +00:00
frxDBInformeListadoPresupuestosResumen: TfrxDBDataset;
DADSInformeListadoPresupuestosResumen: TDADataSource;
tbl_InformeListadoPresupuestosResumen: TDAMemDataTable;
2008-11-18 17:54:49 +00:00
schReport: TDASchema;
DataDictionary: TDADataDictionary;
2009-01-29 14:27:14 +00:00
tbl_Detalles: TDAMemDataTable;
2007-11-13 19:36:56 +00:00
procedure DataModuleCreate( Sender: TObject) ;
2009-01-27 09:27:08 +00:00
procedure DataModuleDestroy( Sender: TObject) ;
2007-11-13 19:36:56 +00:00
private
FConnection: IDAConnection;
2009-01-23 16:36:53 +00:00
FIdEmpresa: Integer ;
FFechaInicio: Variant ;
FFechaFin: Variant ;
FListaIDClientes: TIntegerArray;
2009-01-27 09:27:08 +00:00
FListaNombresClientes: TStringList;
2009-01-23 16:36:53 +00:00
FImporteMinimo: Currency ;
2009-01-27 09:27:08 +00:00
FDesglosado : Boolean ;
2008-02-06 14:28:09 +00:00
procedure _GenerarPresupuesto( const AID : Integer ) ;
2009-01-23 16:36:53 +00:00
procedure PrepararTablaInforme( ATabla: TDAMemDataTable) ;
procedure PrepararTablaResumenInforme( ATabla: IDADataset) ;
2009-01-27 09:27:08 +00:00
function _GenerarInforme( const TipoInforme: String ) : Binary;
procedure IniciarParametrosInforme;
procedure RecuperarNombresClientes;
2007-11-13 19:36:56 +00:00
public
2008-08-22 14:52:35 +00:00
function GenerarPresupuesto( const ListaID : TIntegerArray) : Binary;
function GenerarPresupuestoEnPDF( const ListaID : TIntegerArray) : Binary;
2009-01-23 16:36:53 +00:00
function GenerarInformeListadoPresupuestos( const IdEmpresa: Integer ; const FechaInicio: Variant ; const FechaFin: Variant ; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean ; const ImporteMinimo: Currency ) : Binary;
2007-11-13 19:36:56 +00:00
end ;
implementation
{$R *.dfm}
uses
2009-01-27 09:27:08 +00:00
uSistemaFunc, StrUtils, uDataModuleServer, schPresupuestosClienteClient_Intf,
uROServer, DataAbstract4_Intf;
2007-11-13 19:36:56 +00:00
const
rptInforme = 'InfPresupuestoCliente.fr3' ;
2008-10-21 17:58:25 +00:00
rptInformeListadoPresupuestosDesglosado = 'InformeListadoPresupuestosDesglosado.fr3' ;
rptInformeListadoPresupuestos = 'InformeListadoPresupuestos.fr3' ;
2007-11-13 19:36:56 +00:00
2009-01-23 16:36:53 +00:00
{ Dataset names for schReport }
ds_InformeListadoPresupuestosResumen = 'InformeListadoPresupuestosResumen' ;
2007-11-13 19:36:56 +00:00
procedure TRptPresupuestosCliente. DataModuleCreate( Sender: TObject) ;
begin
schReport. ConnectionManager : = dmServer. ConnectionManager;
FConnection : = dmServer. DarNuevaConexion;
frxReport. EngineOptions. NewSilentMode : = simReThrow;
2008-09-24 14:32:09 +00:00
frxDBCabecera. DataSource : = DADSCabecera;
2009-01-29 14:27:14 +00:00
frxDBCabecera. CloseDataSource : = False ;
2008-09-24 14:32:09 +00:00
frxDBCapitulos. DataSource : = DADSCapitulos;
2009-01-29 14:27:14 +00:00
frxDBCapitulos. CloseDataSource : = False ;
2008-09-24 14:32:09 +00:00
frxDBDetalles. DataSource : = DADSDetalles;
2009-01-29 14:27:14 +00:00
frxDBDetalles. CloseDataSource : = False ;
2008-09-24 14:32:09 +00:00
frxDBResumen. DataSource : = DADSResumen;
2009-01-29 14:27:14 +00:00
frxDBResumen. CloseDataSource : = False ;
2008-12-12 09:53:37 +00:00
2009-01-27 09:27:08 +00:00
FListaNombresClientes : = TStringList. Create;
2008-12-12 09:53:37 +00:00
with tbl_Detalles do
begin
MasterSource : = DADSCapitulos;
MasterFields : = 'ID' ;
DetailFields : = 'ID_CAPITULO' ;
2009-01-29 14:27:14 +00:00
MasterMappingMode : = mmWhere;
2008-12-12 09:53:37 +00:00
end ;
2007-11-13 19:36:56 +00:00
end ;
2008-08-22 14:52:35 +00:00
function TRptPresupuestosCliente. GenerarPresupuestoEnPDF( const ListaID: TIntegerArray) : Binary;
2008-08-21 17:01:02 +00:00
var
i: Integer ;
begin
Result : = Binary. Create;
try
//Vamos generando todos y cada uno de los presupuestos recibidos
2008-08-22 14:52:35 +00:00
for i : = 0 to ListaID. Count - 1 do
_GenerarPresupuesto( ListaID. Items[ i] ) ;
2008-08-21 17:01:02 +00:00
frxPDFExport1. Stream : = Result ;
frxReport. Export( frxPDFExport1)
finally
end ;
end ;
2009-01-27 09:27:08 +00:00
procedure TRptPresupuestosCliente. IniciarParametrosInforme;
var
ATextos : TStringList;
ACadena : String ;
begin
ATextos : = TStringList. Create;
try
if ( not VarIsNull( FFechaInicio) ) and ( not VarIsNull( FFechaFin) ) then
ACadena : = Format( 'Fechas de presupuesto desde el %s hasta el %s' , [ VarToStr( FFechaInicio) , VarToStr( FFechaFin) ] )
else
ACadena : = 'Sin rango de fechas' ;
ATextos. Add( ACadena) ;
ACadena : = '' ;
if ( FImporteMinimo > 0 ) then
begin
ACadena : = Format( 'Presupuestos con importe superior a %m' , [ FImporteMinimo] ) ;
ATextos. Add( ACadena) ;
ACadena : = '' ;
end ;
if Assigned( FListaIDClientes) and ( FListaIDClientes. Count > 0 ) then
begin
RecuperarNombresClientes;
ACadena : = FListaNombresClientes. Text ;
end
else begin
ACadena : = 'Todos los clientes' ;
if FDesglosado then
ACadena : = ACadena + ' (desglosados)'
end ;
ATextos. Add( ACadena) ;
ACadena : = '' ;
frxReport. Variables. Variables[ 'TextoParametros' ] : = ATextos. Text ;
finally
FreeAndNil( ATextos) ;
end ;
end ;
2009-01-23 16:36:53 +00:00
procedure TRptPresupuestosCliente. PrepararTablaInforme( ATabla: TDAMemDataTable) ;
var
Condicion: TDAWhereExpression;
i: Integer ;
begin
// Filtrar el informe por empresa
with ATabla. DynamicWhere do
begin
// (ID_EMPRESA >= ID)
Condicion : = NewBinaryExpression( NewField( '' , fld_PresupuestosClienteID_EMPRESA) , NewConstant( FIdEmpresa, datInteger) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
// Filtrar el informe por fechas
if not VarIsNull( FFechaInicio)
and not VarIsNull( FFechaFin) then
begin
with ATabla. DynamicWhere do
begin
// (FECHA_INICIO between FECHA_FIN)
Condicion : = NewBinaryExpression( NewField( '' , fld_PresupuestosClienteFECHA_PRESUPUESTO) , NewConstant( FFechaInicio, datDateTime) , dboGreaterOrEqual) ;
Condicion : = NewBinaryExpression( NewBinaryExpression( NewField( '' , fld_PresupuestosClienteFECHA_PRESUPUESTO) , NewConstant( FFechaFin, datDateTime) , dboLessOrEqual) , Condicion, dboAnd) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
end ;
// Filtrar el informe por proveedor
if Assigned( FListaIDClientes) then
begin
with ATabla. DynamicWhere do
begin
for i : = 0 to FListaIDClientes. Count - 1 do
begin
2009-01-23 17:54:44 +00:00
// (ID_CLIENTE = ID)
2009-01-23 16:36:53 +00:00
Condicion : = NewBinaryExpression( NewField( '' , fld_PresupuestosClienteID_CLIENTE) , NewConstant( FListaIDClientes. Items[ i] , datInteger) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
end ;
end ;
// Filtrar el informe por importe minimo
if ( FImporteMinimo > 0 ) then
begin
with ATabla. DynamicWhere do
begin
// (IMPORTE_TOTAL > ImporteMinimo)
Condicion : = NewBinaryExpression( NewField( '' , fld_PresupuestosClienteIMPORTE_TOTAL) , NewConstant( FImporteMinimo, datCurrency) , dboGreaterOrEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
end ;
end ;
procedure TRptPresupuestosCliente. PrepararTablaResumenInforme( ATabla: IDADataset) ;
var
i: Integer ;
AWhereStr : String ;
begin
// Filtrar el informe por empresa
AWhereStr : = ' (' + fld_PresupuestosClienteID_EMPRESA + ' = ' + IntToStr( FIdEmpresa) + ') ' ;
// Filtrar el informe por fechas
if not VarIsNull( FFechaInicio)
and not VarIsNull( FFechaFin) then
begin
if Length( AWhereStr) > 0 then
AWhereStr : = AWhereStr + 'AND' ;
AWhereStr : = AWhereStr + ' (' + fld_PresupuestosClienteFECHA_PRESUPUESTO + ' between ' '' + ReplaceStr( VarToStr( FFechaInicio) , '/' , '.' ) + '' ' and ' '' + ReplaceStr( VarToStr( FFechaFin) , '/' , '.' ) + '' ') ' ;
end ;
// Filtrar el informe por cliente
if Assigned( FListaIDClientes) then
begin
for i : = 0 to FListaIDClientes. Count - 1 do
begin
if Length( AWhereStr) > 0 then
AWhereStr : = AWhereStr + 'AND' ;
AWhereStr : = AWhereStr + ' (' + fld_PresupuestosClienteID_CLIENTE + ' = ' + IntToStr( FListaIDClientes. Items[ i] ) + ') ' ;
end ;
end ;
// Filtrar el informe por importe minimo
if ( FImporteMinimo > 0 ) then
begin
if Length( AWhereStr) > 0 then
AWhereStr : = AWhereStr + 'AND' ;
AWhereStr : = AWhereStr + ' (' + fld_PresupuestosClienteIMPORTE_TOTAL + ' >= ' + CurrToStr( FImporteMinimo) + ') ' ;
end ;
ATabla. Where. AddText( AWhereStr) ;
end ;
2009-01-27 09:27:08 +00:00
procedure TRptPresupuestosCliente. RecuperarNombresClientes;
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( 'Clientes' ) ;
ATableRequestInfo : = TableRequestInfoV5. Create;
with ATableRequestInfo do
begin
IncludeSchema : = True ;
MaxRecords : = - 1 ;
UserFilter : = '' ;
AWhereBuilder. Clear;
with AWhereBuilder do
for i : = 0 to FListaIDClientes. Count - 1 do
begin
ACondicion : = NewBinaryExpression(
NewBinaryExpression( NewField( '' , 'ID' ) , NewConstant( FListaIDClientes[ 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 : = 'Clientes' ;
ADataTable. LocalDataStreamer : = DABin2DataStreamer1;
ADataTable. RemoteFetchEnabled : = False ;
DABin2DataStreamer1. ReadDataset( AStream, ADataTable, True ) ;
ADataTable. Open;
FListaNombresClientes. Clear;
for i : = 0 to ADataTable. RecordCount - 1 do
begin
FListaNombresClientes. 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 ;
procedure TRptPresupuestosCliente. DataModuleDestroy( Sender: TObject) ;
begin
2009-01-29 14:27:14 +00:00
tbl_Cabecera. Active : = False ;
tbl_Capitulos. Active : = False ;
tbl_Detalles. Active : = False ;
tbl_Resumen. Active : = False ;
2009-01-27 09:27:08 +00:00
FreeANDNIL( FListaNombresClientes) ;
end ;
2008-10-21 17:58:25 +00:00
function TRptPresupuestosCliente. GenerarInformeListadoPresupuestos(
2009-01-23 16:36:53 +00:00
const IdEmpresa: Integer ; const FechaInicio, FechaFin: Variant ;
2008-10-21 17:58:25 +00:00
const ListaIDClientes: TIntegerArray; const Desglosado: Boolean ;
const ImporteMinimo: Currency ) : Binary;
var
ATipoInforme: String ;
2009-01-23 16:36:53 +00:00
AStream: TMemoryStream;
dsMaster: IDADataset;
2008-10-21 17:58:25 +00:00
begin
2009-01-23 16:36:53 +00:00
FConnection. BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
2008-10-21 17:58:25 +00:00
2009-01-23 16:36:53 +00:00
AStream : = TMemoryStream. Create;
try
//Inicializamos parametros
FIdEmpresa : = IdEmpresa;
FFechaInicio : = FechaInicio;
FFechaFin : = FechaFin;
FImporteMinimo : = ImporteMinimo;
if Assigned( FListaIDClientes) then
FListaIDClientes. Free;
FListaIDClientes : = ListaIDClientes;
if tbl_InformeListadoPresupuestos. Active then
tbl_InformeListadoPresupuestos. Active : = False ;
PrepararTablaInforme( tbl_InformeListadoPresupuestos) ;
//Se prepara la tabla del listado resumen del informe
if tbl_InformeListadoPresupuestosResumen. Active then
tbl_InformeListadoPresupuestosResumen. Active : = False ;
dsMaster : = schReport. NewDataset( FConnection, ds_InformeListadoPresupuestosResumen, [ ] , [ ] , False ) ;
PrepararTablaResumenInforme( dsMaster) ;
2009-01-27 09:27:08 +00:00
2009-01-23 16:36:53 +00:00
//Esto se hace para rellenar la tabla del datamodule que usa el informe.
dsMaster. Open;
AStream. Clear;
DABin2DataStreamer1. WriteDataset( AStream, dsMaster, [ woRows, woSchema] , - 1 ) ;
DABin2DataStreamer1. ReadDataset( AStream, tbl_InformeListadoPresupuestosResumen, TRUE , '' , TRUE , TRUE ) ;
//DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSAR<41> POR CLIENTE
2009-01-27 09:27:08 +00:00
FDesglosado : = Desglosado;
if FDesglosado then
2008-10-21 17:58:25 +00:00
ATipoInforme : = rptInformeListadoPresupuestosDesglosado
else
ATipoInforme : = rptInformeListadoPresupuestos;
2009-01-23 16:36:53 +00:00
//Finalmente se abren las tablas del informe
tbl_InformeListadoPresupuestos. Active : = True ;
tbl_InformeListadoPresupuestosResumen. Active : = True ;
Result : = _GenerarInforme( ATipoInforme) ;
finally
AStream. Free;
dsMaster : = Nil ;
FConnection. RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
end ;
2008-10-21 17:58:25 +00:00
end ;
2008-08-22 14:52:35 +00:00
function TRptPresupuestosCliente. GenerarPresupuesto( const ListaID: TIntegerArray) : Binary;
2007-11-13 19:36:56 +00:00
var
i: Integer ;
begin
Result : = Binary. Create;
try
2007-12-20 21:05:11 +00:00
//Vamos generando todos y cada uno de los presupuestos recibidos
2008-08-22 14:52:35 +00:00
for i : = 0 to ListaID. Count - 1 do
_GenerarPresupuesto( ListaID. Items[ i] ) ;
2007-11-13 19:36:56 +00:00
frxReport. PreviewPages. SaveToStream( Result ) ;
finally
end ;
end ;
2009-01-23 16:36:53 +00:00
function TRptPresupuestosCliente. _GenerarInforme( const TipoInforme: String ) : Binary;
2008-10-21 17:58:25 +00:00
var
2008-11-27 09:16:29 +00:00
AInforme: Variant ;
2008-10-21 17:58:25 +00:00
begin
Result : = Binary. Create;
2009-01-23 16:36:53 +00:00
AInforme : = DarRutaFichero( DarRutaInformes, TipoInforme, IntToStr( FIdEmpresa) ) ;
if VarIsNull( AInforme) then
raise Exception. Create ( ( 'Error Servidor: _GenerarInforme, no encuentra informe ' + TipoInforme) ) ;
2008-10-21 17:58:25 +00:00
2009-01-23 16:36:53 +00:00
frxReport. LoadFromFile( AInforme, True ) ;
2009-01-27 09:27:08 +00:00
IniciarParametrosInforme;
2008-10-21 17:58:25 +00:00
2009-01-23 16:36:53 +00:00
frxReport. PrepareReport( False ) ;
frxReport. PreviewPages. SaveToStream( Result ) ;
2008-10-21 17:58:25 +00:00
end ;
2008-02-06 14:28:09 +00:00
procedure TRptPresupuestosCliente. _GenerarPresupuesto( const AID: Integer ) ;
2008-11-27 09:16:29 +00:00
var
AInforme: Variant ;
2007-11-13 19:36:56 +00:00
begin
2008-10-31 18:16:49 +00:00
FConnection. BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
try
tbl_Cabecera. Active : = False ;
tbl_Capitulos. Active : = False ;
tbl_Detalles. Active : = False ;
tbl_Resumen. Active : = False ;
tbl_Cabecera. ParamByName( 'ID' ) . AsInteger : = AID;
tbl_Capitulos. ParamByName( 'ID_PRESUPUESTO' ) . AsInteger : = AID;
tbl_Detalles. ParamByName( 'ID_PRESUPUESTO' ) . AsInteger : = AID;
tbl_Resumen. ParamByName( 'ID_PRESUPUESTO' ) . AsInteger : = AID;
2009-01-29 14:27:14 +00:00
// Se asignan los parametros en este orden para que funcionen
// dentro de las relaciones maestro-detalle (cap<61> tulos y conceptos).
2008-10-31 18:16:49 +00:00
tbl_Cabecera. Active : = True ;
tbl_Capitulos. Active : = True ;
tbl_Detalles. Active : = True ;
tbl_Resumen. Active : = True ;
2008-11-27 09:16:29 +00:00
AInforme : = DarRutaFichero( DarRutaInformes, rptInforme, tbl_Cabecera. FieldByName( 'ID_EMPRESA' ) . AsString) ;
if VarIsNull( AInforme) then
2008-12-01 11:42:52 +00:00
raise Exception. Create ( ( 'Error Servidor: _GenerarPresupuesto, no encuentra informe ' + rptInforme) ) ;
2008-11-27 09:16:29 +00:00
frxReport. LoadFromFile( AInforme, True ) ;
2008-10-31 18:16:49 +00:00
frxReport. PrepareReport( False ) ;
finally
FConnection. RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
end ;
2007-11-13 19:36:56 +00:00
end ;
end .