{ =============================================================================== Copyright (©) 2002. Rodax Software. =============================================================================== Los contenidos de este fichero son propiedad de Rodax Software titular del copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado, en su totalidad o en parte, con el permiso escrito de Rodax Software, o de acuerdo con los términos y condiciones establecidas en el acuerdo/contrato bajo el que se suministra. ----------------------------------------------------------------------------- Web: www.rodax-software.com =============================================================================== Fecha primera versión: 25-12-2002 Versión actual: 1.0.3 Fecha versión actual: 06-10-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 08-06-2003 Revisión del método 'EsUltimaFactura' porque no se tenía en cuenta la serie a la que pertenece la factura. 02-02-2004 Se ha eliminado el atributo SERIE (P8 MULTIEMPRESA) Se ha adaptado a los nuevos contadores 06-10-2004 p26. Se ha eliminado la tabla DETALLESFACTURASCLIPROPIEDADES. =============================================================================== } unit TablaFacturasCliente; interface uses //Generales SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB, //Particulares IBCustomDataSet, cxGrid, StdCtrls, cxButtonEdit, cxEdit, cxMemo, cxCheckBox, //Aplicacion Framework, StrFunc, Entidades, Constantes, BaseDatos, RdxEmpresaActiva, // Contador Contadores, RdxGestorContadores; type TDatosFacturaCliente = class(TObjeto) private // protected procedure ObtenerDatos; override; procedure AssignTo(Dest: TPersistent); override; public Codigo : String; FechaAlta : TDateTime; Usuario : String; FechaFactura : TDateTime; Situacion : String; ClaseFactura : String; CodigoCliente : String; NIFCIF : String; Nombre : String; Calle : String; Numero : String; Piso : String; CodigoPostal : String; Poblacion : String; Provincia : String; Telefono1 : String; Telefono2 : String; Movil1 : String; Movil2 : String; Fax : String; PersonaContacto : String; BaseImponible : double; Descuento : integer; ImporteDescuento : double; Iva : integer; ImporteIva : double; Re : integer; ImporteRe : double; ImporteTotal : double; FormaPago : String; Observaciones : String; TipoFactura : String; CodigoTrimestre : String; constructor Create(CodigoFactura : String); overload; constructor Create; overload; override; destructor Destroy; override; end; TListaFacturasCliente = class(TListaObjetos) private FSQL : String; function GetFactura(Index: Integer): TDatosFacturaCliente; protected procedure AssignTo(Dest: TPersistent); override; procedure ObtenerLista; override; public constructor Create(oSQL : String); overload; constructor Create; overload; override; property Items[Index: Integer] : TDatosFacturaCliente read GetFactura; end; ///////////////////////////////////////////////////////////////////////////////// TdmTablaFacturasCliente = class(TDataModule) private procedure IniciarSQLFactura; procedure IniciarSQLDetalles; procedure IniciarSQLGrids; public sqlInsertarFactura : TStrings; sqlModificarFactura : TStrings; sqlConsultarFactura : TStrings; sqlEliminarFactura : TStrings; sqlConsultarGridFacturas : TStrings; sqlInsertarDetalles : TStrings; sqlModificarDetalles : TStrings; sqlConsultarDetalles : TStrings; sqlEliminarDetalles : TStrings; sqlConsultarGridDetalles : TStrings; sqlConsultarGridFacturasComisiones : TStrings; sqlConsultarGridFacturasTrimestre : TStrings; sqlConsultarGridFacturasCliente : TStrings; sqlConsultarGridFacturasCliContrato : TStrings; sqlInsertarPropiedades : TStrings; sqlModificarPropiedades : TStrings; sqlConsultarPropiedades : TStrings; sqlEliminarPropiedades : TStrings; sqlConsultarGridPropiedades : TStrings; sqlConsultarGridPropiedadesModal : TStrings; //Metodos que llamaran a contador function DarNuevoCodigo : String; function IncrementarCodigo : boolean; function DecrementarCodigo : boolean; function InsertarContador : boolean; function ValidarCodigo(Codigo : String) : Boolean; function FormatearCodigo(Codigo : String) : String; function CrearFactura(CodigoContrato, TipoFactura: String) : String; function ExisteFacturaConContrato(CodigoContrato : String) : Boolean; function ExisteFacturaConCliente(Codigo : Variant) : Boolean; function RecalcularPreciosFactura(CodigoFactura : String) : Boolean; function DarDatosFactura(Datos : TDatosFacturaCliente): Boolean; function FormatearNumConcepto(NumConcepto : String) : String; function ExisteCodigo(Codigo : String) : Boolean; procedure InicializarGridDetalles(var Grid: TcxGridDBTableView); procedure InicializarGridFacturas(var Grid: TcxGrid); procedure InicializarGridListadoFacturasCliente(var Grid: TcxGrid); procedure InicializarGridFacturasComisiones(var Grid: TcxGridDBTableView); procedure InicializarTablaFacturas(Tabla: TPTabla); procedure InicializarTablaDetalles(Tabla: TPTabla); procedure InicializarGridFacturasTrimestre(var Grid: TcxGrid); procedure InicializarGridFacturasCliContrato(var Grid: TcxGrid); constructor Create (AOwner : TComponent); override; destructor Destroy; override; function DarSituaciones : TStrings; function ModificarSituacionFactura(Codigo, Situacion, FormaPago : String): Boolean; function ModificarSituacionFacturas(Codigos: TStrings; Situacion: String): Boolean; function EsUltimaFactura(Codigo : String): Boolean; function DarListaAnos: TStrings; function ExistenFacturas: Boolean; //Trimestres function DarIvas : TStrings; function DarIvasR : TStrings; function DarTiposOp : TStrings; function DarTiposOpDesTrimestral(var ListaCodigos: TStrings): TStrings; function ComprobarTrimestreFactura(CodigoFactura: String): Boolean; function AsignarTrimestre(CodigoFactura: String; CodigoTrimestre: String): Boolean; end; var dmTablaFacturasCliente: TdmTablaFacturasCliente; implementation {$R *.DFM} uses Variants, TablaContratos, TablaEmpresas, TablaTrimestres, TablaDocumentos, Literales; { TdmTablaFacturas } constructor TdmTablaFacturasCliente.Create(AOwner: TComponent); begin inherited; { Cabecera } sqlInsertarFactura := TStringList.Create; sqlModificarFactura := TStringList.Create; sqlConsultarFactura := TStringList.Create; sqlEliminarFactura := TStringList.Create; { Detalles } sqlInsertarDetalles := TStringList.Create; sqlModificarDetalles := TStringList.Create; sqlConsultarDetalles := TStringList.Create; sqlEliminarDetalles := TStringList.Create; { Propiedades } sqlInsertarPropiedades := TStringList.Create; sqlModificarPropiedades := TStringList.Create; sqlConsultarPropiedades := TStringList.Create; sqlEliminarPropiedades := TStringList.Create; sqlConsultarGridPropiedades := TStringList.Create; sqlConsultarGridPropiedadesModal := TStringList.Create; { Grids } sqlConsultarGridFacturas := TStringList.Create; sqlConsultarGridDetalles := TStringList.Create; sqlConsultarGridFacturasComisiones := TStringList.Create; sqlConsultarGridFacturasTrimestre := TStringList.Create; sqlConsultarGridFacturasCliente := TStringList.Create; sqlConsultarGridFacturasCliContrato := TStringList.Create; IniciarSQLFactura; IniciarSQLDetalles; IniciarSQLGrids; end; function TdmTablaFacturasCliente.DarNuevoCodigo: String; begin Result := GestorContadores.darNuevoCodigo(contFacturasCliente); end; function TdmTablaFacturasCliente.DarSituaciones: TStrings; var Lista : TStringList; begin Result := NIL; Lista := TStringList.Create; with Lista do begin Clear; Append('PENDIENTE'); Append('PAGADA'); end; Result := Lista; end; destructor TdmTablaFacturasCliente.Destroy; begin { Cabecera } sqlInsertarFactura.Free; sqlModificarFactura.Free; sqlConsultarFactura.Free; sqlEliminarFactura.Free; { Detalles } sqlInsertarDetalles.Free; sqlModificarDetalles.Free; sqlConsultarDetalles.Free; sqlEliminarDetalles.Free; { Propiedades } sqlInsertarPropiedades.Free; sqlModificarPropiedades.Free; sqlConsultarPropiedades.Free; sqlEliminarPropiedades.Free; sqlConsultarGridPropiedades.Free; sqlConsultarGridPropiedadesModal.Free; { Grids } sqlConsultarGridFacturas.Free; sqlConsultarGridDetalles.Free; sqlConsultarGridFacturasComisiones.Free; sqlConsultarGridFacturasTrimestre.Free; sqlConsultarGridFacturasCliente.Free; sqlConsultarGridFacturasCliContrato.Free; inherited; end; function TdmTablaFacturasCliente.ExisteCodigo(Codigo: String): Boolean; var oSQL : TIBSQL; Contador : String; begin Result := False; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGO '); SQL.Add('from FACTURASCLIENTE '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add(' and CODIGO = :CODIGO'); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGO').AsString := Codigo; try Prepare; ExecQuery; Contador := Fields[0].AsString; Result := (Codigo = Contador); finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaFacturasCliente.FormatearCodigo(Codigo: String): String; begin Result := GestorContadores.formatearCodigo(contFacturasCliente, Codigo); end; function TdmTablaFacturasCliente.FormatearNumConcepto( NumConcepto: String): String; var Concepto : Integer; begin Concepto := StrToInt(NumConcepto); Result := format('%.10d', [Concepto]); end; function TdmTablaFacturasCliente.IncrementarCodigo: boolean; begin Result := GestorContadores.IncrementarValor(contFacturasCliente); end; procedure TdmTablaFacturasCliente.InicializarGridDetalles(var Grid: TcxGridDBTableView); var Columna : TcxGridDBColumn; begin with Grid do begin OptionsView.Footer := True; {Columna CODIGOEMPRESA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOEMPRESA'; Columna.Visible := False; Columna.Options.Filtering := False; Columna.Options.Sorting := False; {Columna CODIGOFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOFACTURA'; Columna.Visible := False; Columna.Options.Filtering := False; Columna.Options.Sorting := False; {Columna NUMCONCEPTO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NUMCONCEPTO'; Columna.Visible := False; Columna.Options.Filtering := False; Columna.Options.Sorting := False; {Columna CODIGOARTICULO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOARTICULO'; Columna.Caption := 'Cód. artículo'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; Columna.Options.Sorting := False; Columna.PropertiesClassName := 'TcxButtonEditProperties'; with TcxButtonEditProperties(Columna.Properties) do begin Buttons[0].Kind := bkEllipsis; end; Columna.Visible := False; {Columna REFERENCIA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'REFERENCIA'; Columna.Caption := 'Referencia'; Columna.Width := tamColReferencia; Columna.Options.Filtering := False; Columna.Options.Sorting := False; Columna.PropertiesClassName := 'TcxButtonEditProperties'; with TcxButtonEditProperties(Columna.Properties) do begin Buttons[0].Kind := bkEllipsis; end; {Columna DESCRIPCION} Columna := CreateColumn; Columna.DataBinding.FieldName := 'DESCRIPCION'; Columna.Caption := 'Descripción servicio/artículo'; Columna.Width := tamColDescripcion; Columna.Options.Filtering := False; Columna.Options.Sorting := False; Columna.PropertiesClassName := 'TcxMemoProperties'; with TcxMemoProperties(Columna.Properties) do ScrollBars := ssVertical; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := 'Total: #,0 conceptos'; Kind := skCount; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna CANTIDAD} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CANTIDAD'; Columna.Caption := 'Cantidad'; Columna.Width := tamColCantidad; Columna.Options.Filtering := False; Columna.Options.Sorting := False; Columna.PropertiesClassName := 'TcxCalcEditProperties'; {Columna IMPORTEUNIDAD} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTEUNIDAD'; Columna.Caption := 'Importe unidad'; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.Options.Sorting := False; Columna.PropertiesClassName := 'TcxCalcEditProperties'; {Columna IMPORTETOTAL} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTETOTAL'; Columna.Caption := 'Importe total'; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.Options.Sorting := False; Columna.Options.Editing := False; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '#,0.00 €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; end; end; procedure TdmTablaFacturasCliente.InicializarGridFacturas(var Grid: TcxGrid); var Columna : TcxGridDBColumn; begin with (Grid.ActiveView as TcxGridDBTableView) do begin OptionsView.Footer := True; {Columna CODIGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGO'; Columna.Caption := 'Código'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; Columna.SortOrder := soDescending; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := 'Total: 0 facturas'; Kind := skCount; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna CLASEFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CLASEFACTURA'; Columna.Caption := 'Clase factura'; Columna.Options.Filtering := False; Columna.Visible := False; {Columna FECHAFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FECHAFACTURA'; Columna.Caption := 'Fecha'; Columna.Width := tamColFecha; Columna.Options.Filtering := False; {Columna DESCRIPCION} Columna := CreateColumn; Columna.DataBinding.FieldName := 'DESCRIPCION'; Columna.Caption := 'Documento'; Columna.Width := tamColDocumentos; Columna.Options.Filtering := False; {Columna CODIGOCLIENTE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOCLIENTE'; Columna.Caption := 'Cód. cliente'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; {Columna NIFCIF} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NIFCIF'; Columna.Caption := 'NIF/CIF'; Columna.Width := tamColNIFCIF; Columna.Options.Filtering := False; {Columna NOMBRE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NOMBRE'; Columna.Caption := 'Nombre'; Columna.Width := tamColNombre; Columna.Options.Filtering := False; {Columna SITUACION} Columna := CreateColumn; Columna.DataBinding.FieldName := 'SITUACION'; Columna.Caption := 'Situación'; Columna.Width := tamColSituacion; Columna.Options.Filtering := False; {Columna IMPORTETOTAL} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTETOTAL'; Columna.Caption := 'Importe total'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; {Columna CODIGOCONTRATO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOCONTRATO'; Columna.Caption := 'Contrato'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; end; end; procedure TdmTablaFacturasCliente.InicializarTablaDetalles(Tabla: TPTabla); begin with Tabla^.Fields do begin if FindField('CANTIDAD') <> NIL then with (FieldByName('CANTIDAD') as TNumericField) do begin DisplayFormat := DISPLAY_CANTIDAD; EditFormat := EDIT_CANTIDAD; end; if FindField('IMPORTEUNIDAD') <> NIL then with (FieldByName('IMPORTEUNIDAD') as TFloatField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; if FindField('IMPORTETOTAL') <> NIL then with (FieldByName('IMPORTETOTAL') as TFloatField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; end; end; procedure TdmTablaFacturasCliente.InicializarTablaFacturas( Tabla: TPTabla); begin with Tabla^.Fields do begin if FindField('BASEIMPONIBLE') <> NIL then with (FieldByName('BASEIMPONIBLE') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; if FindField('DESCUENTO') <> NIL then with (FieldByName('DESCUENTO') as TFloatField) do begin DisplayFormat := DISPLAY_DTO; EditFormat := EDIT_DTO; end; if FindField('IMPORTEDESCUENTO') <> NIL then with (FieldByName('IMPORTEDESCUENTO') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; if FindField('IVA') <> NIL then with (FieldByName('IVA') as TFloatField) do begin DisplayFormat := DISPLAY_DTO; EditFormat := EDIT_DTO; end; if FindField('IMPORTEIVA') <> NIL then with (FieldByName('IMPORTEIVA') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; if FindField('RE') <> NIL then with (FieldByName('RE') as TFloatField) do begin DisplayFormat := DISPLAY_DTO; EditFormat := EDIT_DTO; end; if FindField('IMPORTERE') <> NIL then with (FieldByName('IMPORTERE') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; if FindField('IMPORTETOTAL') <> NIL then with (FieldByName('IMPORTETOTAL') as TNumericField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; end; end; procedure TdmTablaFacturasCliente.IniciarSQLDetalles; begin with sqlInsertarDetalles do begin Add('INSERT INTO DETALLESFACTURASCLIARTICULOS ( '); Add('CODIGOEMPRESA, CODIGOFACTURA, NUMCONCEPTO, '); Add('CODIGOARTICULO, REFERENCIA, '); Add('DESCRIPCION, CANTIDAD, '); Add('IMPORTEUNIDAD, IMPORTETOTAL) '); Add('VALUES ( '); Add(':CODIGOEMPRESA, :CODIGOFACTURA, :NUMCONCEPTO, '); Add(':CODIGOARTICULO, :REFERENCIA, '); Add(':DESCRIPCION, :CANTIDAD, '); Add(':IMPORTEUNIDAD, :IMPORTETOTAL) '); end; with sqlModificarDetalles do begin Add('UPDATE DETALLESFACTURASCLIARTICULOS SET '); Add('CODIGOARTICULO = :CODIGOARTICULO, '); Add('REFERENCIA = :REFERENCIA, '); Add('DESCRIPCION = :DESCRIPCION, '); Add('CANTIDAD = :CANTIDAD, '); Add('IMPORTEUNIDAD = :IMPORTEUNIDAD, '); Add('IMPORTETOTAL = :IMPORTETOTAL '); Add('WHERE (CODIGOEMPRESA = :CODIGOEMPRESA) AND '); Add('(CODIGOFACTURA = :CODIGOFACTURA) AND '); Add('(NUMCONCEPTO = :NUMCONCEPTO) '); end; with sqlEliminarDetalles do begin Add('delete from DETALLESFACTURASCLIARTICULOS '); Add('WHERE (CODIGOEMPRESA = :CODIGOEMPRESA) AND '); Add('(CODIGOFACTURA = :CODIGOFACTURA) AND '); Add('(NUMCONCEPTO = :NUMCONCEPTO) '); end; with sqlConsultarDetalles do begin Add('select CODIGOFACTURA, NUMCONCEPTO, CODIGOARTICULO, REFERENCIA, '); Add('DESCRIPCION, CANTIDAD, IMPORTEUNIDAD, IMPORTETOTAL '); Add('from DETALLESFACTURASCLIARTICULOS '); Add('WHERE (CODIGOEMPRESA = :CODIGOEMPRESA) AND '); Add('(CODIGOFACTURA = :CODIGOFACTURA) AND '); Add('(NUMCONCEPTO = :NUMCONCEPTO) '); end; end; procedure TdmTablaFacturasCliente.IniciarSQLGrids; begin with sqlConsultarGridFacturas do begin Add('select FAC.CODIGO, FAC.CLASEFACTURA, FAC.SITUACION, '); Add('FAC.FECHAALTA, FAC.FECHAFACTURA, FAC.CODIGOCLIENTE, FAC.NIFCIF, '); Add('FAC.NOMBRE, FAC.IMPORTETOTAL, FAC.CODIGODOCUMENTO, DOC.DESCRIPCION, '); Add('FAC.CODIGOCONTRATO '); Add('from FACTURASCLIENTE FAC, DOCUMENTOS DOC '); Add('WHERE (FAC.CODIGOEMPRESA = :CODIGOEMPRESA) AND '); Add('(DOC.CODIGO = FAC.CODIGODOCUMENTO)'); end; with sqlConsultarGridDetalles do begin Add('select CODIGOEMPRESA, CODIGOFACTURA, NUMCONCEPTO, CODIGOARTICULO, REFERENCIA, '); Add('DESCRIPCION, CANTIDAD, IMPORTEUNIDAD, IMPORTETOTAL '); Add('from DETALLESFACTURASCLIARTICULOS '); Add('WHERE (CODIGOEMPRESA = :CODIGOEMPRESA) AND '); Add('(CODIGOFACTURA = :CODIGOFACTURA) '); Add('order by CODIGOFACTURA, NUMCONCEPTO'); end; with sqlConsultarGridFacturasComisiones do begin Add('select 1 as SELECCION, CODIGO, SITUACION, FECHAALTA, FECHAFACTURA,'); Add('CODIGOCLIENTE, NIFCIF, NOMBRE, IMPORTETOTAL, CLASEFACTURA '); Add('from FACTURASCLIENTE '); Add('WHERE (CODIGOEMPRESA = :CODIGOEMPRESA)'); Add('AND (COMISION = 1)'); Add('AND (FECHAFACTURA between :FECHAINI and :FECHAFIN)'); end; with sqlConsultarGridFacturasTrimestre do begin Add('select FC.CODIGO, FC.SITUACION, FC.FECHAFACTURA, FC.CODIGOCLIENTE, '); Add('FC.TIPOFACTURA, FC.CLASEFACTURA, FC.NIFCIF, FC.NOMBRE, FC.BASEIMPONIBLE, '); Add('FC.IMPORTEDESCUENTO, FC.IMPORTEIVA, FC.IMPORTERE, '); Add('FC.IMPORTETOTAL, FC.CODIGOTRIMESTRE, T.SITUACION as SITUACIONTRIMESTRE '); Add('from FACTURASCLIENTE FC, TRIMESTRES T'); Add('WHERE (FC.CODIGOEMPRESA = T.CODIGOEMPRESA) AND '); Add('(FC.CODIGOTRIMESTRE = T.CODIGO) AND '); Add('(FC.CODIGOEMPRESA = :CODIGOEMPRESA)'); end; with sqlConsultarGridFacturasCliente do begin Add('select CODIGO, CLASEFACTURA, SITUACION, FECHAALTA, FECHAFACTURA,'); Add('CODIGOCLIENTE, NIFCIF, NOMBRE, IMPORTETOTAL '); Add('from FACTURASCLIENTE '); Add('WHERE (CODIGOEMPRESA = :CODIGOEMPRESA) AND '); Add('(CODIGOCLIENTE = :CODIGOCLIENTE)'); end; with sqlConsultarGridFacturasCliContrato do begin Add('select codigo, fechafactura, nifcif, nombre, importetotal, codigocontrato '); Add('from facturascliente '); Add('WHERE (CODIGOEMPRESA = :CODIGOEMPRESA) AND '); Add('(codigocontrato = :CODIGOCONTRATO)'); Add('order by CODIGO'); end; end; procedure TdmTablaFacturasCliente.IniciarSQLFactura; begin with sqlInsertarFactura do begin Add('INSERT INTO FACTURASCLIENTE '); Add('(CODIGOEMPRESA, CODIGO, FECHAALTA, FECHAFACTURA, '); Add('SITUACION, CLASEFACTURA, '); Add('CODIGOCLIENTE, NIFCIF, NOMBRE, '); Add('CALLE, NUMERO, PISO, '); Add('CODIGOPOSTAL, POBLACION, PROVINCIA, '); Add('TELEFONO1, TELEFONO2, MOVIL1, '); Add('MOVIL2, FAX, PERSONACONTACTO, '); Add('BASEIMPONIBLE, DESCUENTO, IMPORTEDESCUENTO, '); Add('IVA, IMPORTEIVA, IMPORTETOTAL, RE, IMPORTERE, '); Add('FORMAPAGO, OBSERVACIONES, '); Add('USUARIO, CODIGOTRIMESTRE, TIPOFACTURA, CODIGODOCUMENTO, COMISION) VALUES '); Add('(:CODIGOEMPRESA, :CODIGO, :FECHAALTA, '); Add(':FECHAFACTURA, '); Add(':SITUACION, :CLASEFACTURA, '); Add(':CODIGOCLIENTE, :NIFCIF, '); Add(':NOMBRE, :CALLE, :NUMERO, '); Add(':PISO, :CODIGOPOSTAL, '); Add(':POBLACION, :PROVINCIA, '); Add(':TELEFONO1, :TELEFONO2, '); Add(':MOVIL1, :MOVIL2, '); Add(':FAX, :PERSONACONTACTO, '); Add(':BASEIMPONIBLE, :DESCUENTO, '); Add(':IMPORTEDESCUENTO, :IVA, '); Add(':IMPORTEIVA, :IMPORTETOTAL, '); Add(':RE, :IMPORTERE, '); Add(':FORMAPAGO, :OBSERVACIONES, '); Add(':USUARIO, :CODIGOTRIMESTRE, :TIPOFACTURA, :CODIGODOCUMENTO, :COMISION) '); end; with sqlModificarFactura do begin Add('UPDATE FACTURASCLIENTE SET '); Add('FECHAFACTURA = :FECHAFACTURA, '); Add('SITUACION = :SITUACION, '); Add('CLASEFACTURA = :CLASEFACTURA, '); Add('CODIGOCLIENTE = :CODIGOCLIENTE, '); Add('NIFCIF = :NIFCIF, '); Add('NOMBRE = :NOMBRE, '); Add('CALLE = :CALLE, '); Add('NUMERO = :NUMERO, '); Add('PISO = :PISO, '); Add('CODIGOPOSTAL = :CODIGOPOSTAL, '); Add('POBLACION = :POBLACION, '); Add('PROVINCIA = :PROVINCIA, '); Add('TELEFONO1 = :TELEFONO1, '); Add('TELEFONO2 = :TELEFONO2, '); Add('MOVIL1 = :MOVIL1, '); Add('MOVIL2 = :MOVIL2, '); Add('FAX = :FAX, '); Add('PERSONACONTACTO = :PERSONACONTACTO, '); Add('BASEIMPONIBLE = :BASEIMPONIBLE, '); Add('DESCUENTO = :DESCUENTO, '); Add('IMPORTEDESCUENTO = :IMPORTEDESCUENTO, '); Add('IVA = :IVA, '); Add('IMPORTEIVA = :IMPORTEIVA, '); Add('RE = :RE, '); Add('IMPORTERE = :IMPORTERE, '); Add('IMPORTETOTAL = :IMPORTETOTAL, '); Add('FORMAPAGO = :FORMAPAGO, '); Add('OBSERVACIONES = :OBSERVACIONES, '); Add('CODIGOTRIMESTRE = :CODIGOTRIMESTRE, '); Add('CODIGODOCUMENTO = :CODIGODOCUMENTO, '); Add('COMISION = :COMISION '); Add('WHERE CODIGOEMPRESA = :CODIGOEMPRESA'); Add(' AND (CODIGO = :CODIGO)'); end; with sqlEliminarFactura do begin Add('delete from FACTURASCLIENTE '); Add('WHERE CODIGOEMPRESA = :CODIGOEMPRESA'); Add(' AND CODIGO = :CODIGO'); end; with sqlConsultarFactura do begin Add('SELECT * FROM FACTURASCLIENTE '); Add('WHERE CODIGOEMPRESA = :CODIGOEMPRESA'); Add(' and CODIGO = :CODIGO'); end; end; function TdmTablaFacturasCliente.InsertarContador: boolean; begin Result := GestorContadores.InsertarContador(contFacturasCliente); end; function TdmTablaFacturasCliente.ValidarCodigo(Codigo: String): Boolean; begin Result := GestorContadores.validarCodigo(contFacturasCliente, Codigo); end; function TdmTablaFacturasCliente.ModificarSituacionFactura(Codigo, Situacion, FormaPago: String): Boolean; var oSQL : TIBSQL; begin Result := False; if EsCadenaVacia(Codigo) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update FACTURASCLIENTE '); SQL.Add('set SITUACION = :SITUACION, '); SQL.Add('FORMAPAGO = :FORMAPAGO '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add(' and CODIGO = :CODIGO'); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGO').AsString := Codigo; ParamByName('SITUACION').AsString := Situacion; ParamByName('FORMAPAGO').AsString := FormaPago; try Prepare; ExecQuery; Result := True; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaFacturasCliente.DecrementarCodigo: boolean; begin Result := GestorContadores.decrementarValor(contFacturasCliente); end; function TdmTablaFacturasCliente.DarDatosFactura(Datos: TDatosFacturaCliente): Boolean; var oSQL : TIBSQL; begin Result := False; if EsCadenaVacia(Datos.Codigo) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select * from FACTURASCLIENTE '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add('and CODIGO = :CODIGO'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGO').AsString := Datos.Codigo; Prepare; ExecQuery; if (RecordCount > 0) then begin with Datos do begin FechaAlta := FieldByName('FECHAALTA').AsDateTime; Usuario := FieldByName('USUARIO').AsString; FechaFactura := FieldByName('FECHAFACTURA').AsDateTime; Situacion := FieldByName('SITUACION').AsString; ClaseFactura := FieldByName('CLASEFACTURA').AsString; CodigoCliente := FieldByName('CODIGOCLIENTE').AsString; NifCif := FieldByName('NIFCIF').AsString; Nombre := FieldByName('NOMBRE').AsString; Calle := FieldByName('CALLE').AsString; Numero := FieldByName('NUMERO').AsString; Piso := FieldByName('PISO').AsString; CodigoPostal := FieldByName('CODIGOPOSTAL').AsString; Poblacion := FieldByName('POBLACION').AsString; Provincia := FieldByName('PROVINCIA').AsString; Telefono1 := FieldByName('TELEFONO1').AsString; Telefono2 := FieldByName('TELEFONO2').AsString; Movil1 := FieldByName('MOVIL1').AsString; Movil2 := FieldByName('MOVIL2').AsString; Fax := FieldByName('FAX').AsString; PersonaContacto := FieldByName('PERSONACONTACTO').AsString; BaseImponible := FieldByName('BASEIMPONIBLE').AsDouble; Descuento := FieldByName('DESCUENTO').AsInteger; ImporteDescuento := FieldByName('IMPORTEDESCUENTO').AsDouble; Iva := FieldByName('IVA').AsInteger; ImporteIva := FieldByName('IMPORTEIVA').AsDouble; Re := FieldByName('RE').AsInteger; ImporteRe := FieldByName('IMPORTERE').AsDouble; ImporteTotal := FieldByName('IMPORTETOTAL').AsDouble; FormaPago := FieldByName('FORMAPAGO').AsString; TipoFactura := FieldByName('TIPOFACTURA').AsString; CodigoTrimestre := FieldByName('CODIGOTRIMESTRE').AsString; Observaciones := FieldByName('OBSERVACIONES').AsString; Result := True; end; end; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaFacturasCliente.EsUltimaFactura(Codigo: String): Boolean; var oSQL : TIBSQL; begin Result := False; if EsCadenaVacia(Codigo) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select count(*) '); SQL.Add('from FACTURASCLIENTE '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add(' and CODIGO > :CODIGO'); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGO').AsString := Codigo; try Prepare; ExecQuery; if Fields[0].AsInteger = 0 then Result := True; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaFacturasCliente.InicializarGridFacturasComisiones(var Grid: TcxGridDBTableView); var Columna : TcxGridDBColumn; begin with Grid do begin {Columna SELECCION} Columna := CreateColumn; Columna.DataBinding.FieldName := 'SELECCION'; Columna.Caption := ' '; Columna.Width := 20; Columna.PropertiesClassName := 'TcxCheckBoxProperties'; Columna.Options.Filtering := False; with TcxCheckBoxProperties(Columna.Properties) do begin DisplayUnchecked := 'False'; ImmediatePost := True; ValueChecked := 1; ValueUnchecked := 0; end; {Columna CODIGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGO'; Columna.Caption := 'Código'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; Columna.Options.Editing := False; {Columna CLASEFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CLASEFACTURA'; Columna.Caption := 'Clase factura'; Columna.Options.Filtering := False; Columna.Visible := False; {Columna SITUACION} Columna := CreateColumn; Columna.DataBinding.FieldName := 'SITUACION'; Columna.Caption := 'Situación'; Columna.Width := tamColSituacion; Columna.Options.Filtering := False; Columna.Options.Editing := False; {Columna FECHAFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FECHAFACTURA'; Columna.Caption := 'Fecha'; Columna.Width := tamColFecha; Columna.Options.Filtering := False; Columna.Options.Editing := False; Columna.SortOrder := soDescending; {Columna CODIGOCLIENTE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOCLIENTE'; Columna.Caption := 'Cód. cliente'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; Columna.Options.Editing := False; {Columna NIFCIF} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NIFCIF'; Columna.Caption := 'NIF/CIF'; Columna.Width := tamColNIFCIF; Columna.Options.Filtering := False; Columna.Options.Editing := False; {Columna NOMBRE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NOMBRE'; Columna.Caption := 'Nombre'; Columna.Width := tamColNombre; Columna.Options.Filtering := False; Columna.Options.Editing := False; {Columna IMPORTETOTAL} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTETOTAL'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Caption := 'Importe total'; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.Options.Editing := False; end; end; function TdmTablaFacturasCliente.DarIvas: TStrings; var oSQL : TIBSQL; Lista : TStringList; begin Result := NIL; oSQL := TIBSQL.Create(Self); Lista := TStringList.Create; with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select distinct(IVA) '); SQL.Add('from FACTURASCLIENTE '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add(' and IVA is not null '); SQL.Add('order by IVA descending'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; ExecQuery; while not EOF do begin Lista.Append(Fields[0].AsString); Next; end; Result := Lista; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaFacturasCliente.DarIvasR: TStrings; var oSQL : TIBSQL; Lista : TStringList; begin Result := NIL; oSQL := TIBSQL.Create(Self); Lista := TStringList.Create; with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select distinct(RE) '); SQL.Add('from FACTURASCLIENTE '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add(' and RE is not null '); SQL.Add('order by RE descending'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; ExecQuery; while not EOF do begin Lista.Append(Fields[0].AsString); Next; end; Result := Lista; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaFacturasCliente.AsignarTrimestre(CodigoFactura, CodigoTrimestre: String): Boolean; var oSQL : TIBSQL; begin Result := False; if EsCadenaVacia(CodigoFactura) or EsCadenaVacia(CodigoTrimestre) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update FACTURASCLIENTE '); SQL.Add('set CODIGOTRIMESTRE = :CODIGOTRIMESTRE '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add(' and CODIGO = :CODIGO'); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGO').AsString := CodigoFactura; ParamByName('CODIGOTRIMESTRE').AsString := CodigoTrimestre; try Prepare; ExecQuery; Result := True; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaFacturasCliente.ComprobarTrimestreFactura(CodigoFactura: String): Boolean; var oSQL : TIBSQL; begin Result := False; if EsCadenaVacia(CodigoFactura) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select TR.SITUACION '); SQL.Add('from FACTURASCLIENTE FC, TRIMESTRES TR '); SQL.Add('where FC.CODIGOEMPRESA = TR.CODIGOEMPRESA'); SQL.Add(' and FC.CODIGOTRIMESTRE = TR.CODIGO'); SQL.Add(' and FC.CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add(' and FC.CODIGO = :CODIGO '); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGO').AsString := CodigoFactura; try Prepare; ExecQuery; Result := (Fields[0].AsString = 'A'); finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaFacturasCliente.DarTiposOp: TStrings; var oSQL : TIBSQL; Lista : TStringList; begin Result := NIL; oSQL := TIBSQL.Create(Self); Lista := TStringList.Create; with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select DESCRIPCION '); SQL.Add('from TIPOSFACTURAS '); SQL.Add('where ENTIDAD = ''CLIENTE'' '); SQL.Add('order by CODIGO'); try Prepare; ExecQuery; while not EOF do begin Lista.Append(Fields[0].AsString); Next; end; Result := Lista; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaFacturasCliente.InicializarGridFacturasTrimestre(var Grid: TcxGrid); var Columna : TcxGridDBColumn; begin with (Grid.ActiveView as TcxGridDBTableView) do begin ClearItems; OptionsView.Footer := True; {Columna CODIGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGO'; Columna.Caption := 'Código'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := 'Total: 0 facturas'; Kind := skCount; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna CODIGOCLIENTE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOTRIMESTRE'; Columna.Caption := 'Cód. Trie'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; Columna.Visible := False; {Columna CLASEFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CLASEFACTURA'; Columna.Caption := 'Clase factura'; Columna.Options.Filtering := False; Columna.Visible := False; {Columna TIPOFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'TIPOFACTURA'; Columna.Caption := 'Tipo factura'; Columna.Options.Filtering := False; Columna.Visible := False; {Columna FECHAFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FECHAFACTURA'; Columna.Caption := 'Fecha'; Columna.Width := tamColFecha; Columna.Options.Filtering := False; Columna.SortOrder := soDescending; {Columna CODIGOCLIENTE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOCLIENTE'; Columna.Caption := 'Cód. cliente'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; {Columna NIFCIF} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NIFCIF'; Columna.Caption := 'NIF/CIF'; Columna.Width := tamColNIFCIF; Columna.Options.Filtering := False; {Columna NOMBRE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NOMBRE'; Columna.Caption := 'Nombre'; Columna.Width := tamColNombreCorto; Columna.Options.Filtering := False; {Columna SITUACION} Columna := CreateColumn; Columna.DataBinding.FieldName := 'SITUACION'; Columna.Caption := 'Situación'; Columna.Width := tamColSituacion; Columna.Options.Filtering := False; {Columna BASEIMPONIBLE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'BASEIMPONIBLE'; Columna.Caption := 'Base imponible'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.PropertiesClassName := 'TcxCurrencyEdit'; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '0,0.00 €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna IMPORTEDESCUENTO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTEDESCUENTO'; Columna.Caption := 'Importe DTO.'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.PropertiesClassName := 'TcxCurrencyEdit'; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '0,0.00 €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna IMPORTEIVA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTEIVA'; Columna.Caption := 'Importe IVA'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.PropertiesClassName := 'TcxCurrencyEdit'; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '0,0.00 €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna IMPORTERE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTERE'; Columna.Caption := 'Importe RE.'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.PropertiesClassName := 'TcxCurrencyEdit'; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '0,0.00 €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna IMPORTETOTAL} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTETOTAL'; Columna.Caption := 'Importe total'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.PropertiesClassName := 'TcxCurrencyEdit'; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '0,0.00 €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; end; end; { TDatosFacturaCliente } procedure TDatosFacturaCliente.AssignTo(Dest: TPersistent); begin inherited; // end; constructor TDatosFacturaCliente.Create(CodigoFactura: String); begin inherited Create; Codigo := CodigoFactura; ObtenerDatos; end; constructor TDatosFacturaCliente.Create; begin inherited Create; end; destructor TDatosFacturaCliente.Destroy; begin inherited; end; procedure TDatosFacturaCliente.ObtenerDatos; var oSQL : TIBSQL; begin if EsCadenaVacia(Codigo) then Exit; oSQL := TIBSQL.Create(nil); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select * from FACTURASCLIENTE '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add(' and CODIGO = :CODIGO'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGO').AsString := Codigo; Prepare; ExecQuery; if (RecordCount > 0) then begin FechaAlta := FieldByName('FECHAALTA').AsDateTime; FechaFactura := FieldByName('FECHAFACTURA').AsDateTime; FormaPago := FieldByName('FORMAPAGO').AsString; Situacion := FieldByName('SITUACION').AsString; Usuario := FieldByName('USUARIO').AsString; CodigoCliente := FieldByName('CODIGOCLIENTE').AsString; NifCif := FieldByName('NIFCIF').AsString; Nombre := FieldByName('NOMBRE').AsString; Calle := FieldByName('CALLE').AsString; Numero := FieldByName('NUMERO').AsString; Piso := FieldByName('PISO').AsString; CodigoPostal := FieldByName('CODIGOPOSTAL').AsString; Poblacion := FieldByName('POBLACION').AsString; Provincia := FieldByName('PROVINCIA').AsString; PersonaContacto := FieldByName('PERSONACONTACTO').AsString; Telefono1 := FieldByName('TELEFONO1').AsString; Telefono2 := FieldByName('TELEFONO2').AsString; Movil1 := FieldByName('MOVIL1').AsString; Movil2 := FieldByName('MOVIL2').AsString; Fax := FieldByName('FAX').AsString; BaseImponible := FieldByName('BASEIMPONIBLE').AsFloat; Descuento := FieldByName('DESCUENTO').AsInteger; Iva := FieldByName('IVA').AsInteger; ImporteDescuento := FieldByName('IMPORTEDESCUENTO').AsFloat; ImporteIva := FieldByName('IMPORTEIVA').AsFloat; RE := FieldByName('RE').AsInteger; ImporteRE := FieldByName('IMPORTERE').AsFloat; ImporteTotal := FieldByName('IMPORTETOTAL').AsFloat; ClaseFactura := FieldByName('CLASEFACTURA').AsString; CodigoTrimestre := FieldByName('CODIGOTRIMESTRE').AsString; end; finally Close; Transaction := NIL; Free; end; end; end; { TListaFacturasCliente } procedure TListaFacturasCliente.AssignTo(Dest: TPersistent); begin inherited; end; constructor TListaFacturasCliente.Create(oSQL: String); begin inherited Create; FSQL := oSQL; ObtenerLista; end; constructor TListaFacturasCliente.Create; begin inherited Create; FSQL := 'select CODIGO from FACTURASCLIENTE'; FSQL := FSQL + ' where CODIGOEMPRESA = :CODIGOEMPRESA'; ObtenerLista; end; function TListaFacturasCliente.GetFactura( Index: Integer): TDatosFacturaCliente; begin Result := TDatosFacturaCliente(FLista.Items[Index]); end; procedure TListaFacturasCliente.ObtenerLista; var oSQL : TIBSQL; Factura : TDatosFacturaCliente; begin oSQL := TIBSQL.Create(nil); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Text := FSQL; try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; ExecQuery; while not EOF do begin Factura := TDatosFacturaCliente.Create(FieldByName('CODIGO').AsString); FLista.Add(Factura); Next; end; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaFacturasCliente.InicializarGridListadoFacturasCliente(var Grid: TcxGrid); var Columna : TcxGridDBColumn; begin with (Grid.ActiveView as TcxGridDBTableView) do begin OptionsView.Footer := True; {Columna CODIGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGO'; Columna.Caption := 'Código'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; {Columna CLASEFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CLASEFACTURA'; Columna.Caption := 'Clase factura'; Columna.Options.Filtering := False; Columna.Visible := False; {Columna FECHAFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FECHAFACTURA'; Columna.Caption := 'Fecha'; Columna.Width := tamColFecha; Columna.Options.Filtering := False; Columna.SortOrder := soDescending; {Columna SITUACION} Columna := CreateColumn; Columna.DataBinding.FieldName := 'SITUACION'; Columna.Caption := 'Situación'; Columna.Width := tamColSituacion; Columna.Options.Filtering := False; {Columna IMPORTETOTAL} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTETOTAL'; Columna.Caption := 'Importe total'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := 'Total: #,0.00# €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; end; end; function TdmTablaFacturasCliente.CrearFactura(CodigoContrato, TipoFactura: String): String; var oSQL : TIBSQL; oSQL2 : TIBSQL; CodigoAux : String; CodigoEmpAux : Integer; CodDoc : String; Cadena : String; begin Result := ''; CodigoAux := dmTablaFacturasCliente.DarNuevoCodigo; CodigoEmpAux := EmpresaActiva.Codigo; oSQL := TIBSQL.Create(Self); try with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('insert into FACTURASCLIENTE ('); SQL.Add('CODIGOEMPRESA, CODIGO, FECHAALTA,'); SQL.Add('USUARIO, CODIGODOCUMENTO,'); SQL.Add('FECHAFACTURA, SITUACION, CLASEFACTURA, COMISION,'); SQL.Add('CODIGOCLIENTE, NIFCIF,'); SQL.Add('NOMBRE, CALLE,'); SQL.Add('NUMERO, PISO,'); SQL.Add('CODIGOPOSTAL, POBLACION,'); SQL.Add('PROVINCIA, PERSONACONTACTO,'); SQL.Add('OBSERVACIONES, FORMAPAGO, '); SQL.Add('DESCUENTO, IVA,'); SQL.Add('BASEIMPONIBLE, IMPORTEDESCUENTO, '); SQL.Add('IMPORTEIVA, IMPORTETOTAL, '); SQL.Add('TIPOFACTURA, CODIGOTRIMESTRE, CODIGOCONTRATO) '); SQL.Add('select ' + IntToStr(CodigoEmpAux) + ', ''' + CodigoAux + ''', current_date,'); SQL.Add('''' + dmBaseDatos.Usuario + ''', CODIGODOCUMENTO,'); SQL.Add('current_date, ''PENDIENTE'', ''' + TipoFactura + ''', 1,'); SQL.Add('CODIGOCLIENTE,'); SQL.Add('NIFCIF, NOMBRE,'); SQL.Add('CALLE, NUMERO,'); SQL.Add('PISO, CODIGOPOSTAL,'); SQL.Add('POBLACION, PROVINCIA,'); SQL.Add('PERSONACONTACTO, null, null, DESCUENTO, ' + EmpresaActiva.IvaDefecto + ', '); if TipoFactura = CTE_CF_ABONO then SQL.Add('BASEIMPONIBLE * (-1), IMPORTEDESCUENTO * (-1), IMPORTEIVA * (-1), IMPORTETOTAL * (-1), ') else SQL.Add('BASEIMPONIBLE, IMPORTEDESCUENTO, IMPORTEIVA, IMPORTETOTAL, '); SQL.Add(IntToStr(CTE_TIPFAC_VENTA) + ', ''' + EmpresaActiva.CodigoTrimestre + ''', '); SQL.Add('''' + CODIGOCONTRATO + ''' '); SQL.Add('from CONTRATOSCLIENTE '); SQL.Add('where CODIGO = ''' + CodigoContrato + ''''); Prepare; ExecQuery; Close; end; // Averiguar qué tipo de documento estamos tratando with oSQL do begin SQL.Clear; SQL.Add('select CODIGODOCUMENTO from FACTURASCLIENTE '); SQL.Add('where CODIGO = :CODIGO'); ParamByName('CODIGO').AsString := CodigoAux; Prepare; ExecQuery; CodDoc := FieldByName('CODIGODOCUMENTO').AsString; end; oSQL2 := TIBSQL.Create(Self); oSQL2.Database := dmBaseDatos.BD; oSQL2.Transaction := dmBaseDatos.Transaccion; if dmTablaDocumentos.TienePropiedades(CodDoc) then begin with oSQL2 do begin // Insertar los registros de precio SQL.Add('insert into DETALLESFACTURASCLIARTICULOS ('); SQL.Add('CODIGOEMPRESA, CODIGOFACTURA, NUMCONCEPTO,'); SQL.Add('CODIGOARTICULO, REFERENCIA, '); SQL.Add('DESCRIPCION, CANTIDAD,'); SQL.Add('IMPORTEUNIDAD, IMPORTETOTAL)'); SQL.Add('select ' + IntToStr(CodigoEmpAux) + ', ''' + CodigoAux + ''', NUMCONCEPTO,'); SQL.Add('CODIGOARTICULO, REFERENCIA, '); SQL.Add('DESCRIPCION, CANTIDAD,'); if TipoFactura = CTE_CF_ABONO then SQL.Add('IMPORTEUNIDAD * (-1), IMPORTETOTAL * (-1) ') else SQL.Add('IMPORTEUNIDAD, IMPORTETOTAL '); SQL.Add('from DETALLESCONTRATOSARTICULOS '); SQL.Add('where CODIGOCONTRATO = :CODIGOCONTRATO and '); SQL.Add('TIPOCONCEPTO = ''PRECIO'''); ParamByName('CODIGOCONTRATO').AsString := CodigoContrato; Prepare; ExecQuery; end; // Insertar los conceptos que tienen propiedades with oSQL do begin Close; SQL.Clear; // Averiguar cuales son los conceptos con propiedades SQL.Add('select NUMCONCEPTO, TIPOCONCEPTO '); SQL.Add('from DETALLESCONTRATOSARTICULOS '); SQL.Add('where CODIGOCONTRATO = :CODIGOCONTRATO and '); SQL.Add('TIPOCONCEPTO <> ''PRECIO'' and TIPOCONCEPTO is not null'); ParamByName('CODIGOCONTRATO').AsString := CodigoContrato; Prepare; ExecQuery; end; // Construir una cadena con los textos de las propiedades while not oSQL.EOF do begin with oSQL2 do begin SQL.Clear; SQL.Add('select DESCRIPCION, VALOR '); SQL.Add('from DETALLESCONTRATOSPROPIEDADES, PROPIEDADES '); SQL.Add('where CODIGOCONTRATO = :CODIGOCONTRATO and '); SQL.Add('NUMCONCEPTO = :NUMCONCEPTO and '); SQL.Add('CODIGO = CODIGOPROPIEDAD '); SQL.Add('order by NUMPROPIEDAD '); ParamByName('CODIGOCONTRATO').AsString := CodigoContrato; ParamByName('NUMCONCEPTO').AsInteger := oSQL.FieldByName('NUMCONCEPTO').AsInteger; Prepare; ExecQuery; Cadena := ''; if oSQL.FieldByName('TIPOCONCEPTO').AsString = 'FRENTE' then Cadena := 'FRENTE DE ARMARIO' + #13; if oSQL.FieldByName('TIPOCONCEPTO').AsString = 'INTERIOR' then Cadena := 'INTERIOR DE ARMARIO' + #13; while not EOF do begin Cadena := Cadena + Fields[0].AsString + ': ' + Fields[1].AsString + #13; Next; end; Close; end; // Insertar el concepto con la cadena de propiedades with oSQL2 do begin Close; SQL.Clear; SQL.Add('insert into DETALLESFACTURASCLIARTICULOS ('); SQL.Add('CODIGOEMPRESA, CODIGOFACTURA, NUMCONCEPTO,'); SQL.Add('CODIGOARTICULO, '); SQL.Add('DESCRIPCION, CANTIDAD,'); SQL.Add('IMPORTEUNIDAD, IMPORTETOTAL)'); SQL.Add('select ' + IntToStr(CodigoEmpAux) + ', ''' + CodigoAux + ''', NUMCONCEPTO,'); SQL.Add('CODIGOARTICULO, '); SQL.Add('''' + Cadena + ''', CANTIDAD,'); if TipoFactura = CTE_CF_ABONO then SQL.Add('IMPORTEUNIDAD * (-1), IMPORTETOTAL * (-1) ') else SQL.Add('IMPORTEUNIDAD, IMPORTETOTAL '); SQL.Add('from DETALLESCONTRATOSARTICULOS '); SQL.Add('where CODIGOCONTRATO = :CODIGOCONTRATO and '); SQL.Add('TIPOCONCEPTO <> ''PRECIO'' and TIPOCONCEPTO is not null and '); SQL.Add('NUMCONCEPTO = :NUMCONCEPTO '); ParamByName('CODIGOCONTRATO').AsString := CodigoContrato; ParamByName('NUMCONCEPTO').AsInteger := oSQL.FieldByName('NUMCONCEPTO').AsInteger; Prepare; ExecQuery; end; oSQL.Next; end; // while not oSQL.EOF do end else begin // Insertar todos los registros with oSQL2 do begin SQL.Add('insert into DETALLESFACTURASCLIARTICULOS ('); SQL.Add('CODIGOEMPRESA, CODIGOFACTURA, NUMCONCEPTO,'); SQL.Add('CODIGOARTICULO, REFERENCIA, '); SQL.Add('DESCRIPCION, CANTIDAD,'); SQL.Add('IMPORTEUNIDAD, IMPORTETOTAL)'); SQL.Add('select ' + IntToStr(CodigoEmpAux) + ', ''' + CodigoAux + ''', NUMCONCEPTO,'); SQL.Add('CODIGOARTICULO, REFERENCIA, '); SQL.Add('DESCRIPCION, CANTIDAD,'); if TipoFactura = CTE_CF_ABONO then SQL.Add('IMPORTEUNIDAD * (-1), IMPORTETOTAL * (-1) ') else SQL.Add('IMPORTEUNIDAD, IMPORTETOTAL '); SQL.Add('from DETALLESCONTRATOSARTICULOS '); SQL.Add('where CODIGOCONTRATO = :CODIGOCONTRATO'); ParamByName('CODIGOCONTRATO').AsString := CodigoContrato; Prepare; ExecQuery; end; end; RecalcularPreciosFactura(CodigoAux); dmTablaFacturasCliente.IncrementarCodigo; Result := CodigoAux; finally oSQL.Close; oSQL.Transaction := NIL; oSQL.Free; oSQL2.Close; oSQL2.Transaction := NIL; oSQL2.Free; end; end; function TdmTablaFacturasCliente.ExisteFacturaConContrato( CodigoContrato: String): Boolean; var oSQL : TIBSQL; begin Result := False; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select count(CODIGO) '); SQL.Add('from FACTURASCLIENTE '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add(' and CODIGOCONTRATO = :CODIGOCONTRATO'); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGOCONTRATO').AsString := CodigoContrato; try Prepare; ExecQuery; Result := not (Fields[0].AsInteger = 0); finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaFacturasCliente.InicializarGridFacturasCliContrato(var Grid: TcxGrid); var Columna : TcxGridDBColumn; begin with (Grid.ActiveView as TcxGridDBTableView) do begin ClearItems; OptionsView.Footer := True; {Columna CODIGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGO'; Columna.Caption := 'Código'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; {Columna FECHAFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FECHAFACTURA'; Columna.Caption := 'Fecha'; Columna.Width := tamColFecha; Columna.Options.Filtering := False; Columna.SortOrder := soDescending; {Columna NIFCIF} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NIFCIF'; Columna.Caption := 'NIF/CIF'; Columna.Width := tamColNIFCIF; Columna.Options.Filtering := False; {Columna NOMBRE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NOMBRE'; Columna.Caption := 'Nombre'; Columna.Width := tamColNombreCorto; Columna.Options.Filtering := False; {Columna IMPORTETOTAL} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTETOTAL'; Columna.Caption := 'Importe'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporteLargo; Columna.Options.Filtering := False; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := 'Total: #,0.00# €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; end; end; function TdmTablaFacturasCliente.RecalcularPreciosFactura( CodigoFactura: String): Boolean; var oSQL : TIBSQL; RE, Dto, IVA : Integer; BaseImponible, ImporteRE, ImporteIVA, ImporteDto, ImporteTotal : Double; CodigoAux : String; CodigoEmpAux : String; begin Result := False; BaseImponible := 0; ImporteTotal := 0; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; try // Calcular el total de los conceptos with SQL do begin Add('select sum(IMPORTETOTAL) as TOTAL '); Add('from DETALLESFACTURASCLIARTICULOS '); Add('where CODIGOFACTURA = :CODIGOFACTURA'); end; ParamByName('CODIGOFACTURA').AsString := CodigoFactura; Prepare; ExecQuery; BaseImponible := FieldByName('TOTAL').AsDouble; // Recuperar el RE, dto, IVA y tipo de factura (normal o abono) Close; with SQL do begin Clear; Add('select RE, DESCUENTO, IVA '); Add('from FACTURASCLIENTE '); Add('where CODIGO = :CODIGO'); end; ParamByName('CODIGO').AsString := CodigoFactura; Prepare; ExecQuery; RE := FieldByName('RE').AsInteger; Dto := FieldByName('DESCUENTO').AsInteger; IVA := FieldByName('IVA').AsInteger; ImporteRE := BaseImponible * (RE/100); ImporteDto := BaseImponible * (Dto/100); ImporteTotal := BaseImponible - ImporteDto; ImporteIVA := ImporteTotal * (IVA/100); ImporteTotal := ImporteTotal + ImporteIVA + ImporteRE; // Actualizar la factura Close; with SQL do begin Clear; Add('update FACTURASCLIENTE set '); Add('BASEIMPONIBLE = :BASEIMPONIBLE, '); Add('IMPORTERE = :IMPORTERE, '); Add('IMPORTEDESCUENTO = :IMPORTEDESCUENTO, '); Add('IMPORTEIVA = :IMPORTEIVA, '); Add('IMPORTETOTAL = :IMPORTETOTAL '); Add('where CODIGO = :CODIGO'); end; ParamByName('CODIGO').AsString := CodigoFactura; ParamByName('BASEIMPONIBLE').AsDouble := BaseImponible; ParamByName('IMPORTERE').AsDouble := ImporteRE; ParamByName('IMPORTEDESCUENTO').AsDouble := ImporteDto; ParamByName('IMPORTEIVA').AsDouble := ImporteIVA; ParamByName('IMPORTETOTAL').AsDouble := ImporteTotal; Prepare; ExecQuery; Result := True; finally oSQL.Close; oSQL.Transaction := NIL; oSQL.Free; end; end; end; function TdmTablaFacturasCliente.ExisteFacturaConCliente(Codigo: Variant): Boolean; var oSQL : TIBSQL; begin Result := False; if VarIsNull(Codigo) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGOCLIENTE '); SQL.Add('from FACTURASCLIENTE '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add(' and CODIGOCLIENTE = :CODIGOCLIENTE'); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGOCLIENTE').AsString := Codigo; try Prepare; ExecQuery; Result := (RecordCount > 0); finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaFacturasCliente.ModificarSituacionFacturas( Codigos: TStrings; Situacion: String): Boolean; var oSQL : TIBSQL; Indice : Integer; Cadena : String; begin Result := False; if Codigos.Count = 0 then Exit; //Formateamos los códigos para optimizar la sentencia SQL for Indice:=0 to Codigos.Count-1 do begin if (Indice <> 0) then Cadena := Cadena + ','; Cadena := Cadena + '''' + Codigos.Strings[Indice] + ''''; end; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update FACTURASCLIENTE '); SQL.Add('set SITUACION = :SITUACION '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA '); SQL.Add('and CODIGO IN (' + Cadena + ')'); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('SITUACION').AsString := Situacion; try Prepare; ExecQuery; Result := True; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaFacturasCliente.DarTiposOpDesTrimestral( var ListaCodigos: TStrings): TStrings; var oSQL : TIBSQL; Lista : TStringList; begin Result := NIL; oSQL := TIBSQL.Create(Self); ListaCodigos := TStringList.Create; Lista := TStringList.Create; //tipTodas Lista.Append(msgTipFacturas0); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGO, DESCRIPCION '); SQL.Add('from TIPOSFACTURAS '); SQL.Add('where ENTIDAD = ''CLIENTE'' '); SQL.Add('order by CODIGO'); try Prepare; ExecQuery; while not EOF do begin ListaCodigos.Append(Fields[0].AsString); Lista.Append(Fields[1].AsString); Next; end; Result := Lista; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaFacturasCliente.DarListaAnos: TStrings; var oSQL : TIBSQL; Lista : TStringList; begin Result := NIL; oSQL := TIBSQL.Create(Self); Lista := TStringList.Create; with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select distinct(extract(year from FECHAFACTURA)) as ANO '); SQL.Add('from FACTURASCLIENTE '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add('order by FECHAFACTURA'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; ExecQuery; while not EOF do begin Lista.Append(Fields[0].AsString); Next; end; Result := Lista; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaFacturasCliente.ExistenFacturas: Boolean; var oSQL : TIBSQL; begin Result := False; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select count(*) '); SQL.Add('from FACTURASCLIENTE '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; try Prepare; ExecQuery; Result := (Fields[0].AsInteger <> 0); finally Close; Transaction := NIL; Free; end; end; end; end.