2007-11-05 18:00:22 +00:00
unit uRptFacturasCliente_Server;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
2009-01-23 15:19:26 +00:00
Dialogs, frxClass, frxDBSet, uDAScriptingProvider,
2007-11-05 18:00:22 +00:00
uDADataTable, uDACDSDataTable, DB, uDAClasses, frxChart, frxGradient,
frxChBox, frxCross, frxOLE, frxBarcode, frxRich, uDABINAdapter, uROTypes,
2008-01-15 10:31:41 +00:00
uDAInterfaces, uDADataStreamer, IBCustomDataSet, IBQuery, IBDatabase,
2009-01-23 15:19:26 +00:00
uDAMemDataTable, FactuGES_Intf, frxExportPDF, uDABin2DataStreamer;
2007-11-05 18:00:22 +00:00
type
TRptFacturasCliente = class( TDataModule)
frxDBCabecera: TfrxDBDataset;
frxDBDetalles: TfrxDBDataset;
DataDictionary: TDADataDictionary;
2007-12-11 16:24:53 +00:00
IBDatabase1: TIBDatabase;
IBTransaction1: TIBTransaction;
DataSource1: TDataSource;
DataSource2: TDataSource;
cabecera: TIBQuery;
detalles: TIBQuery;
2008-01-15 10:31:41 +00:00
DADSCabecera: TDADataSource;
DADSDetalles: TDADataSource;
tbl_Detalles: TDAMemDataTable;
tbl_Cabecera: TDAMemDataTable;
frxCheckBoxObject1: TfrxCheckBoxObject;
frxChartObject1: TfrxChartObject;
frxGradientObject1: TfrxGradientObject;
frxCrossObject1: TfrxCrossObject;
frxOLEObject1: TfrxOLEObject;
frxBarCodeObject1: TfrxBarCodeObject;
frxRichObject1: TfrxRichObject;
frxReport: TfrxReport;
cabeceraID: TIntegerField;
cabeceraID_EMPRESA: TIntegerField;
cabeceraREFERENCIA: TIBStringField;
cabeceraTIPO: TIBStringField;
cabeceraFECHA_FACTURA: TDateField;
cabeceraBASE_IMPONIBLE: TIBBCDField;
cabeceraSITUACION: TIBStringField;
cabeceraDESCUENTO: TFloatField;
cabeceraIMPORTE_DESCUENTO: TIBBCDField;
cabeceraIVA: TFloatField;
cabeceraIMPORTE_IVA: TIBBCDField;
cabeceraRE: TFloatField;
cabeceraIMPORTE_RE: TIBBCDField;
cabeceraIMPORTE_TOTAL: TIBBCDField;
cabeceraOBSERVACIONES: TMemoField;
cabeceraNIF_CIF: TIBStringField;
cabeceraID_CLIENTE: TIntegerField;
cabeceraNOMBRE: TIBStringField;
cabeceraCALLE: TIBStringField;
cabeceraPROVINCIA: TIBStringField;
cabeceraPOBLACION: TIBStringField;
cabeceraCODIGO_POSTAL: TIBStringField;
cabeceraRECARGO_EQUIVALENCIA: TSmallintField;
cabeceraIMPORTE_NETO: TIBBCDField;
cabeceraIMPORTE_PORTE: TIBBCDField;
cabeceraFORMA_PAGO: TIBStringField;
detallesID: TIntegerField;
detallesID_FACTURA: TIntegerField;
detallesPOSICION: TIntegerField;
detallesTIPO_DETALLE: TIBStringField;
detallesCONCEPTO: TIBStringField;
detallesCANTIDAD: TIntegerField;
detallesIMPORTE_UNIDAD: TIBBCDField;
detallesDESCUENTO: TFloatField;
detallesIMPORTE_TOTAL: TIBBCDField;
detallesVISIBLE: TSmallintField;
2008-02-28 19:39:33 +00:00
detallesREFERENCIA: TIBStringField;
2008-06-11 16:35:39 +00:00
frxDBVencimientos: TfrxDBDataset;
DADSVencimientos: TDADataSource;
tbl_Vencimientos: TDAMemDataTable;
vencimientos: TIBQuery;
DataSource3: TDataSource;
cabeceraDATOS_BANCARIOS: TIBStringField;
vencimientosFECHA_VENCIMIENTO: TDateField;
vencimientosIMPORTE_TOTAL: TIBBCDField;
2008-08-22 14:52:35 +00:00
frxPDFExport1: TfrxPDFExport;
2008-10-17 14:07:42 +00:00
tbl_InformeListadoFacturas: TDAMemDataTable;
DADSInformeListadoFacturas: TDADataSource;
frxDBInformeListadoFacturas: TfrxDBDataset;
2009-01-16 15:00:06 +00:00
frxDBInformeListadoFacturasPendientes: TfrxDBDataset;
DADSInformeListadoFacturasPendientes: TDADataSource;
tbl_InformeListadoFacturasPendientes: TDAMemDataTable;
2008-09-08 15:46:28 +00:00
schReport: TDASchema;
2009-01-23 15:19:26 +00:00
frxDBInformeListadoFacturasResumen: TfrxDBDataset;
DADSInformeListadoFacturasResumen: TDADataSource;
tbl_InformeListadoFacturasResumen: TDAMemDataTable;
Bin2DataStreamer: TDABin2DataStreamer;
2007-11-05 18:00:22 +00:00
procedure DataModuleCreate( Sender: TObject) ;
2009-01-27 18:25:51 +00:00
procedure DataModuleDestroy( Sender: TObject) ;
2007-11-05 18:00:22 +00:00
private
FConnection: IDAConnection;
2009-01-23 15:19:26 +00:00
FIdEmpresa: Integer ;
FFechaInicio: Variant ;
FFechaFin: Variant ;
FFechaVenInicio: Variant ;
FFechaVenFin: Variant ;
FListaIDClientes: TIntegerArray;
2009-01-27 18:25:51 +00:00
FListaNombresClientes : TStringList;
2009-01-23 15:19:26 +00:00
FImporteMinimo: Currency ;
2009-01-27 18:25:51 +00:00
FDesglosado : Boolean ;
2009-01-23 15:19:26 +00:00
2007-12-11 16:24:53 +00:00
//Genera cada una de las facturas a imprimir
2009-04-17 09:34:26 +00:00
procedure _GenerarFactura( const ID: Integer ; const VerSello: Boolean = True ; const VerCopia: Boolean = True ) ;
2009-01-23 15:19:26 +00:00
procedure PrepararTablaInforme( ATabla: TDAMemDataTable) ;
procedure PrepararTablaResumenInforme( ATabla: IDADataset) ;
function _GenerarInforme( const TipoInforme: String ) : Binary;
2009-01-27 18:25:51 +00:00
procedure IniciarParametrosInforme;
procedure RecuperarNombresClientes;
2007-11-05 18:00:22 +00:00
public
2009-04-17 09:34:26 +00:00
function GenerarFactura( const ListaID : TIntegerArray; const VerSello: Boolean = True ; const VerCopia: Boolean = True ) : Binary;
2008-11-13 10:33:06 +00:00
function GenerarFacturaEnPDF( const ListaID : TIntegerArray; const VerSello: Boolean = True ) : Binary;
2008-12-15 09:03:56 +00:00
function GenerarInformeIVA( const IdEmpresa: Integer ; const FechaInicio: Variant ; const FechaFin: Variant ; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean ; const ImporteMinimo: Currency ) : Binary;
2009-01-08 17:45:28 +00:00
function GenerarInformeListadoFacturas( const IdEmpresa: Integer ; const FechaInicio: Variant ; const FechaFin: Variant ; const FechaVenInicio: Variant ; const FechaVenFin: Variant ; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean ; const ImporteMinimo: Currency ) : Binary;
function GenerarInformeListadoFacturasPendientes( const IdEmpresa: Integer ; const FechaInicio: Variant ; const FechaFin: Variant ; const FechaVenInicio: Variant ; const FechaVenFin: Variant ; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean ; const ImporteMinimo: Currency ) : Binary;
2007-11-05 18:00:22 +00:00
end ;
implementation
{$R *.dfm}
uses
2009-01-27 18:25:51 +00:00
uSistemaFunc, StrUtils, uDataModuleServer, schFacturasClienteClient_Intf,
uROServer, DataAbstract4_Intf;
2007-11-05 18:00:22 +00:00
const
rptFacturaCliente = 'InfFacturaCliente.fr3' ;
2008-10-15 18:50:09 +00:00
rptInformeIVA = 'InformeIVAClientes.fr3' ;
2008-10-20 10:42:48 +00:00
rptInformeIVADesglosado = 'InformeIVAClientesDesglosado.fr3' ;
2008-10-17 14:07:42 +00:00
rptInformeListadoFacturasCliente = 'InformeListadoFacturasCliente.fr3' ;
rptInformeListadoFacturasClienteDesglosado = 'InformeListadoFacturasClienteDesglosado.fr3' ;
rptInformeListadoFactuasClientePendiente = 'InformeListadoFacturasClientePendientes.fr3' ;
2008-10-20 10:42:48 +00:00
rptInformeListadoFactuasClientePendienteDesglosado = 'InformeListadoFacturasClientePendientesDesglosado.fr3' ;
2007-11-05 18:00:22 +00:00
{ Dataset names for schReport }
2009-01-23 15:19:26 +00:00
ds_InformeListadoFacturasResumen = 'InformeListadoFacturasResumen' ;
2007-11-05 18:00:22 +00:00
{ TRptFacturasCliente }
procedure TRptFacturasCliente. DataModuleCreate( Sender: TObject) ;
begin
schReport. ConnectionManager : = dmServer. ConnectionManager;
FConnection : = dmServer. DarNuevaConexion;
2008-09-24 14:41:41 +00:00
frxReport. EngineOptions. NewSilentMode : = simReThrow;
2009-01-27 18:25:51 +00:00
FListaNombresClientes : = TStringList. Create;
2008-09-24 14:41:41 +00:00
frxDBCabecera. DataSource : = DADSCabecera;
2009-01-29 14:27:14 +00:00
frxDBCabecera. CloseDataSource : = False ;
2008-09-24 14:41:41 +00:00
frxDBDetalles. DataSource : = DADSDetalles;
2009-01-29 14:27:14 +00:00
frxDBDetalles. CloseDataSource : = False ;
2008-09-24 14:41:41 +00:00
frxDBVencimientos. DataSource : = DADSVencimientos;
2009-01-29 14:27:14 +00:00
frxDBVencimientos. CloseDataSource : = False ;
2007-11-05 18:00:22 +00:00
end ;
2009-01-27 18:25:51 +00:00
procedure TRptFacturasCliente. DataModuleDestroy( Sender: TObject) ;
begin
2009-01-29 14:27:14 +00:00
tbl_Cabecera. Active : = False ;
tbl_Detalles. Active : = False ;
tbl_Vencimientos. Active : = False ;
2009-01-27 18:25:51 +00:00
FreeANDNIL( FListaNombresClientes) ;
end ;
2009-04-17 09:34:26 +00:00
function TRptFacturasCliente. GenerarFactura( const ListaID: TIntegerArray; const VerSello: Boolean = True ; const VerCopia: Boolean = True ) : Binary;
2007-11-05 18:00:22 +00:00
var
i: Integer ;
begin
Result : = Binary. Create;
try
2007-12-11 16:24:53 +00:00
//Vamos generando todos y cada una de las facturas recibidas
2008-08-22 14:52:35 +00:00
for i : = 0 to ListaID. Count - 1 do
2009-04-17 09:34:26 +00:00
_GenerarFactura( ListaID. Items[ i] , VerSello, VerCopia) ;
2007-11-05 18:00:22 +00:00
frxReport. PreviewPages. SaveToStream( Result ) ;
2008-08-22 14:52:35 +00:00
finally
end ;
end ;
2008-11-13 10:33:06 +00:00
function TRptFacturasCliente. GenerarFacturaEnPDF( const ListaID: TIntegerArray; const VerSello: Boolean = True ) : Binary;
2008-08-22 14:52:35 +00:00
var
i: Integer ;
begin
Result : = Binary. Create;
try
//Vamos generando todos y cada una de las facturas recibidas
for i : = 0 to ListaID. Count - 1 do
2008-11-13 10:33:06 +00:00
_GenerarFactura( ListaID. Items[ i] , VerSello) ;
2007-11-05 18:00:22 +00:00
2008-08-22 14:52:35 +00:00
frxPDFExport1. Stream : = Result ;
frxReport. Export( frxPDFExport1)
2007-11-05 18:00:22 +00:00
finally
end ;
end ;
2008-12-15 09:03:56 +00:00
function TRptFacturasCliente. GenerarInformeIVA( const IdEmpresa: Integer ; const FechaInicio: Variant ; const FechaFin: Variant ; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean ; const ImporteMinimo: Currency ) : Binary;
2008-10-20 10:42:48 +00:00
var
ATipoInforme: String ;
2009-01-23 15:19:26 +00:00
AStream: TMemoryStream;
dsMaster: IDADataset;
2008-10-20 10:42:48 +00:00
2008-10-17 14:07:42 +00:00
begin
2009-01-23 15:19:26 +00:00
FConnection. BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
AStream : = TMemoryStream. Create;
try
//Inicializamos parametros
FIdEmpresa : = IdEmpresa;
FFechaInicio : = FechaInicio;
FFechaFin : = FechaFin;
FFechaVenInicio : = Null;
FFechaVenFin : = Null;
FImporteMinimo : = ImporteMinimo;
if Assigned( FListaIDClientes) then
FListaIDClientes. Free;
FListaIDClientes : = ListaIDClientes;
//Se van a prepara las tablas del informe
if tbl_InformeListadoFacturas. Active then
tbl_InformeListadoFacturas. Active : = False ;
PrepararTablaInforme( tbl_InformeListadoFacturas) ;
//Se prepara la tabla del listado resumen del informe
if tbl_InformeListadoFacturasResumen. Active then
tbl_InformeListadoFacturasResumen. Active : = False ;
dsMaster : = schReport. NewDataset( FConnection, ds_InformeListadoFacturasResumen, [ ] , [ ] , False ) ;
PrepararTablaResumenInforme( dsMaster) ;
//Esto se hace para rellenar la tabla del datamodule que usa el informe.
dsMaster. Open;
AStream. Clear;
Bin2DataStreamer. WriteDataset( AStream, dsMaster, [ woRows, woSchema] , - 1 ) ;
Bin2DataStreamer. ReadDataset( AStream, tbl_InformeListadoFacturasResumen, TRUE , '' , TRUE , TRUE ) ;
//DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSAR<41> POR CLIENTE
2008-10-20 10:42:48 +00:00
if Desglosado then
ATipoInforme : = rptInformeIVADesglosado
else
ATipoInforme : = rptInformeIVA;
2008-10-17 14:07:42 +00:00
2009-01-23 15:19:26 +00:00
//Finalmente se abren las tablas del informe
tbl_InformeListadoFacturas. Active : = True ;
tbl_InformeListadoFacturasResumen. 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-17 14:07:42 +00:00
end ;
2008-10-21 17:58:25 +00:00
function TRptFacturasCliente. GenerarInformeListadoFacturas( const IdEmpresa: Integer ;
2009-01-08 17:45:28 +00:00
const FechaInicio, FechaFin: Variant ; const FechaVenInicio: Variant ; const FechaVenFin: Variant ;
const ListaIDClientes: TIntegerArray; const Desglosado: Boolean ; const ImporteMinimo: Currency ) : Binary;
2008-10-17 14:07:42 +00:00
var
ATipoInforme: String ;
2009-01-23 15:19:26 +00:00
AStream: TMemoryStream;
dsMaster: IDADataset;
2009-01-08 17:45:28 +00:00
2008-10-17 14:07:42 +00:00
begin
2009-01-23 15:19:26 +00:00
FConnection. BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
2008-10-17 14:07:42 +00:00
2009-01-23 15:19:26 +00:00
AStream : = TMemoryStream. Create;
try
//Inicializamos parametros
FIdEmpresa : = IdEmpresa;
FFechaInicio : = FechaInicio;
FFechaFin : = FechaFin;
FFechaVenInicio : = FechaVenInicio;
FFechaVenFin : = FechaVenFin;
FImporteMinimo : = ImporteMinimo;
if Assigned( FListaIDClientes) then
FListaIDClientes. Free;
FListaIDClientes : = ListaIDClientes;
//Se prepara la tabla del listado general del informe
if tbl_InformeListadoFacturas. Active then
tbl_InformeListadoFacturas. Active : = False ;
PrepararTablaInforme( tbl_InformeListadoFacturas) ;
//Se prepara la tabla del listado resumen del informe
if tbl_InformeListadoFacturasResumen. Active then
tbl_InformeListadoFacturasResumen. Active : = False ;
dsMaster : = schReport. NewDataset( FConnection, ds_InformeListadoFacturasResumen, [ ] , [ ] , False ) ;
PrepararTablaResumenInforme( dsMaster) ;
//Esto se hace para rellenar la tabla del datamodule que usa el informe.
dsMaster. Open;
AStream. Clear;
Bin2DataStreamer. WriteDataset( AStream, dsMaster, [ woRows, woSchema] , - 1 ) ;
Bin2DataStreamer. ReadDataset( AStream, tbl_InformeListadoFacturasResumen, TRUE , '' , TRUE , TRUE ) ;
//DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSAR<41> POR CLIENTE
2009-01-27 18:25:51 +00:00
FDesglosado : = Desglosado;
if FDesglosado then
2008-10-17 14:07:42 +00:00
ATipoInforme : = rptInformeListadoFacturasClienteDesglosado
else
ATipoInforme : = rptInformeListadoFacturasCliente;
2009-01-23 15:19:26 +00:00
//Finalmente se abren las tablas del informe
tbl_InformeListadoFacturas. Active : = True ;
tbl_InformeListadoFacturasResumen. 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-17 14:07:42 +00:00
end ;
2008-10-21 17:58:25 +00:00
function TRptFacturasCliente. GenerarInformeListadoFacturasPendientes(
2008-12-15 09:03:56 +00:00
const IdEmpresa: Integer ; const FechaInicio, FechaFin: Variant ;
2009-01-08 17:45:28 +00:00
const FechaVenInicio: Variant ; const FechaVenFin: Variant ;
2008-10-17 14:07:42 +00:00
const ListaIDClientes: TIntegerArray; const Desglosado: Boolean ;
const ImporteMinimo: Currency ) : Binary;
var
Condicion: TDAWhereExpression;
2008-10-20 10:42:48 +00:00
ATipoInforme: String ;
2009-01-23 15:19:26 +00:00
AStream: TMemoryStream;
dsMaster: IDADataset;
2008-10-17 14:07:42 +00:00
begin
2009-01-23 15:19:26 +00:00
FConnection. BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
AStream : = TMemoryStream. Create;
try
//Inicializamos parametros
FIdEmpresa : = IdEmpresa;
FFechaInicio : = FechaInicio;
FFechaFin : = FechaFin;
FFechaVenInicio : = FechaVenInicio;
FFechaVenFin : = FechaVenFin;
FImporteMinimo : = ImporteMinimo;
FListaIDClientes : = ListaIDClientes;
//Se prepara la tabla del listado general del informe
2009-01-16 15:00:06 +00:00
if tbl_InformeListadoFacturasPendientes. Active then
2009-01-23 15:19:26 +00:00
tbl_InformeListadoFacturasPendientes. Active : = False ;
PrepararTablaInforme( tbl_InformeListadoFacturasPendientes) ;
2008-10-17 14:07:42 +00:00
// Filtrar el informe por situacion
2009-01-16 15:00:06 +00:00
with tbl_InformeListadoFacturasPendientes. DynamicWhere do
2008-10-17 14:07:42 +00:00
begin
// (ID_EMPRESA >= ID)
Condicion : = NewBinaryExpression( NewField( '' , fld_FacturasClienteSITUACION) , NewConstant( 'PAGADA' , datString) , dboNotEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
2009-01-23 15:19:26 +00:00
//DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSAR<41> POR CLIENTE
2009-01-27 18:25:51 +00:00
FDesglosado : = Desglosado;
if FDesglosado then
2008-10-20 10:42:48 +00:00
ATipoInforme : = rptInformeListadoFactuasClientePendienteDesglosado
else
ATipoInforme : = rptInformeListadoFactuasClientePendiente;
2008-10-17 14:07:42 +00:00
2009-01-23 15:19:26 +00:00
//Finalmente se abren las tablas del informe
tbl_InformeListadoFacturasPendientes. Active : = True ;
2008-10-20 10:42:48 +00:00
2009-01-23 15:19:26 +00:00
Result : = _GenerarInforme( ATipoInforme) ;
2008-11-26 19:25:27 +00:00
2008-10-31 18:16:49 +00:00
finally
2009-01-23 15:19:26 +00:00
AStream. Free;
dsMaster : = Nil ;
2008-10-31 18:16:49 +00:00
FConnection. RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
end ;
2008-10-17 14:07:42 +00:00
end ;
2009-01-27 18:25:51 +00:00
procedure TRptFacturasCliente. 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( 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 15:19:26 +00:00
procedure TRptFacturasCliente. PrepararTablaInforme( ATabla: TDAMemDataTable) ;
2008-10-15 18:50:09 +00:00
var
Condicion: TDAWhereExpression;
i: Integer ;
2009-01-08 17:45:28 +00:00
2008-10-15 18:50:09 +00:00
begin
2009-01-23 15:19:26 +00:00
// Filtrar el informe por empresa
with ATabla. DynamicWhere do
begin
// (ID_EMPRESA >= ID)
Condicion : = NewBinaryExpression( NewField( '' , fld_FacturasClienteID_EMPRESA) , NewConstant( FIdEmpresa, datInteger) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
2008-10-15 18:50:09 +00:00
2009-01-23 15:19:26 +00:00
// Filtrar el informe por fechas
if not VarIsNull( FFechaInicio)
and not VarIsNull( FFechaFin) then
begin
2009-01-16 15:00:06 +00:00
with ATabla. DynamicWhere do
2008-10-15 18:50:09 +00:00
begin
2009-01-23 15:19:26 +00:00
// (FECHA_INICIO between FECHA_FIN)
Condicion : = NewBinaryExpression( NewField( '' , fld_FacturasClienteFECHA_FACTURA) , NewConstant( FFechaInicio, datDateTime) , dboGreaterOrEqual) ;
Condicion : = NewBinaryExpression( NewBinaryExpression( NewField( '' , fld_FacturasClienteFECHA_FACTURA) , NewConstant( FFechaFin, datDateTime) , dboLessOrEqual) , Condicion, dboAnd) ;
2008-10-15 18:50:09 +00:00
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
2009-01-23 15:19:26 +00:00
end ;
2008-10-15 18:50:09 +00:00
2009-01-23 15:19:26 +00:00
// Filtrar el informe por fechas de vencimiento
if not VarIsNull( FFechaVenInicio)
and not VarIsNull( FFechaVenFin) then
begin
with ATabla. DynamicWhere do
2008-10-15 18:50:09 +00:00
begin
2009-01-23 15:19:26 +00:00
// (FECHA_VENCIMIENTO_INICIO between FECHA_VENCIMIENTO_FIN)
Condicion : = NewBinaryExpression( NewField( '' , fld_FacturasClienteFECHA_VENCIMIENTO) , NewConstant( FFechaVenInicio, datDateTime) , dboGreaterOrEqual) ;
Condicion : = NewBinaryExpression( NewBinaryExpression( NewField( '' , fld_FacturasClienteFECHA_VENCIMIENTO) , NewConstant( FFechaVenFin, datDateTime) , dboLessOrEqual) , Condicion, dboAnd) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
2008-10-15 18:50:09 +00:00
end ;
2009-01-23 15:19:26 +00:00
end ;
2008-10-15 18:50:09 +00:00
2009-01-23 15:19:26 +00:00
// Filtrar el informe por proveedor
if Assigned( FListaIDClientes) then
begin
with ATabla. DynamicWhere do
2009-01-08 17:45:28 +00:00
begin
2009-01-23 15:19:26 +00:00
for i : = 0 to FListaIDClientes. Count - 1 do
2009-01-08 17:45:28 +00:00
begin
2009-01-23 15:19:26 +00:00
// (ID_CLIENTE = ID)
Condicion : = NewBinaryExpression( NewField( '' , fld_FacturasClienteID_CLIENTE) , NewConstant( FListaIDClientes. Items[ i] , datInteger) , dboEqual) ;
2009-01-08 17:45:28 +00:00
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
2009-01-23 15:19:26 +00:00
end ;
2009-01-08 17:45:28 +00:00
end ;
2009-01-23 15:19:26 +00:00
end ;
2009-01-08 17:45:28 +00:00
2009-01-23 15:19:26 +00:00
// Filtrar el informe por importe minimo
if ( FImporteMinimo > 0 ) then
begin
with ATabla. DynamicWhere do
2008-10-15 18:50:09 +00:00
begin
2009-01-23 15:19:26 +00:00
// (IMPORTE_TOTAL > ImporteMinimo)
Condicion : = NewBinaryExpression( NewField( '' , fld_FacturasCLienteIMPORTE_TOTAL) , NewConstant( FImporteMinimo, datCurrency) , dboGreaterOrEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
2008-10-15 18:50:09 +00:00
end ;
2009-01-23 15:19:26 +00:00
end ;
end ;
procedure TRptFacturasCliente. PrepararTablaResumenInforme( ATabla: IDADataset) ;
var
i: Integer ;
AWhereStr : String ;
2008-10-15 18:50:09 +00:00
2009-01-23 15:19:26 +00:00
begin
// Filtrar el informe por empresa
AWhereStr : = ' (' + fld_FacturasCLienteID_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_FacturasCLienteFECHA_FACTURA + ' between ' '' + ReplaceStr( VarToStr( FFechaInicio) , '/' , '.' ) + '' ' and ' '' + ReplaceStr( VarToStr( FFechaFin) , '/' , '.' ) + '' ') ' ;
end ;
// Filtrar el informe por fechas de vencimiento
if not VarIsNull( FFechaVenInicio)
and not VarIsNull( FFechaVenFin) then
begin
if Length( AWhereStr) > 0 then
AWhereStr : = AWhereStr + 'AND' ;
AWhereStr : = AWhereStr + ' (' + fld_FacturasCLienteFECHA_VENCIMIENTO + ' between ' '' + ReplaceStr( VarToStr( FFechaVenInicio) , '/' , '.' ) + '' ' and ' '' + ReplaceStr( VarToStr( FFechaVenFin) , '/' , '.' ) + '' ') ' ;
end ;
// Filtrar el informe por proveedor
if Assigned( FListaIDClientes) then
begin
for i : = 0 to FListaIDClientes. Count - 1 do
2008-10-15 18:50:09 +00:00
begin
2009-01-23 15:19:26 +00:00
if Length( AWhereStr) > 0 then
AWhereStr : = AWhereStr + 'AND' ;
AWhereStr : = AWhereStr + ' (' + fld_FacturasCLienteID_CLIENTE + ' = ' + IntToStr( FListaIDClientes. Items[ i] ) + ') ' ;
2008-10-15 18:50:09 +00:00
end ;
2009-01-23 15:19:26 +00:00
end ;
// Filtrar el informe por importe minimo
if ( FImporteMinimo > 0 ) then
begin
if Length( AWhereStr) > 0 then
AWhereStr : = AWhereStr + 'AND' ;
AWhereStr : = AWhereStr + ' (' + fld_FacturasCLienteIMPORTE_TOTAL + ' >= ' + CurrToStr( FImporteMinimo) + ') ' ;
end ;
ATabla. Where. AddText( AWhereStr) ;
end ;
2009-01-27 18:25:51 +00:00
procedure TRptFacturasCliente. 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 : = Bin2DataStreamer;
ADataTable. RemoteFetchEnabled : = False ;
Bin2DataStreamer. 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 ;
2009-04-17 09:34:26 +00:00
procedure TRptFacturasCliente. _GenerarFactura( const ID: Integer ; const VerSello: Boolean = True ; const VerCopia: Boolean = True ) ;
2009-01-23 15:19:26 +00:00
var
AInforme: Variant ;
2008-10-15 18:50:09 +00:00
2009-01-23 15:19:26 +00:00
begin
FConnection. BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
try
tbl_Cabecera. Active : = False ;
tbl_Detalles. Active : = False ;
tbl_Vencimientos. Active : = False ;
2008-10-15 18:50:09 +00:00
2009-01-23 15:19:26 +00:00
tbl_Cabecera. ParamByName( 'ID' ) . AsInteger : = ID;
tbl_Detalles. ParamByName( 'ID_FACTURA' ) . AsInteger : = ID;
tbl_Vencimientos. ParamByName( 'ID_FACTURA' ) . AsInteger : = ID;
tbl_Cabecera. Active : = True ;
tbl_Detalles. Active : = True ;
tbl_Vencimientos. Active : = True ;
2008-10-15 18:50:09 +00:00
2009-01-23 15:19:26 +00:00
AInforme : = DarRutaFichero( DarRutaInformes, rptFacturaCliente, tbl_Cabecera. FieldByName( 'ID_EMPRESA' ) . AsString) ;
2008-11-26 19:25:27 +00:00
if VarIsNull( AInforme) then
2009-01-23 15:19:26 +00:00
raise Exception. Create ( ( 'Error Servidor: _GenerarFactura, no encuentra informe ' + rptFacturaCliente) ) ;
2008-11-26 19:25:27 +00:00
frxReport. LoadFromFile( AInforme, True ) ;
2009-01-23 15:19:26 +00:00
if VerSello then
frxReport. Variables. Variables[ 'VerSello' ] : = 1
else
frxReport. Variables. Variables[ 'VerSello' ] : = 0 ;
2009-04-17 09:34:26 +00:00
//La primera impresion siempre es sin la etiqueta copia
frxReport. Variables. Variables[ 'VerCopia' ] : = 0 ;
2008-10-15 18:50:09 +00:00
frxReport. PrepareReport( False ) ;
2009-04-17 09:34:26 +00:00
if VerCopia then
begin
frxReport. Variables. Variables[ 'VerCopia' ] : = 1 ;
frxReport. PrepareReport( False ) ;
end ;
2008-10-15 18:50:09 +00:00
finally
2008-10-31 18:16:49 +00:00
FConnection. RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
2008-10-15 18:50:09 +00:00
end ;
end ;
2009-01-23 15:19:26 +00:00
function TRptFacturasCliente. _GenerarInforme( const TipoInforme: String ) : Binary;
var
AInforme: Variant ;
begin
Result : = Binary. Create;
AInforme : = DarRutaFichero( DarRutaInformes, TipoInforme, IntToStr( FIdEmpresa) ) ;
if VarIsNull( AInforme) then
raise Exception. Create ( ( 'Error Servidor: _GenerarInforme, no encuentra informe ' + TipoInforme) ) ;
frxReport. LoadFromFile( AInforme, True ) ;
2009-01-27 18:25:51 +00:00
IniciarParametrosInforme;
2009-01-23 15:19:26 +00:00
frxReport. PrepareReport( False ) ;
frxReport. PreviewPages. SaveToStream( Result ) ;
end ;
2007-11-05 18:00:22 +00:00
end .