{ =============================================================================== Copyright (©) 2001. 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: 01-10-2001 Versión actual: 1.1.2 Fecha versión actual: 18-03-2005 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 01-10-2001 Desactivar la posibilidad de ordenar las columnas del grid para que no desaparezcan los datos no grabados en tablas. 20-10-2001 Se ha ampliado el campo 'Domiciliación bancaria' porque pasa a tener 100 caracteres. 21-10-2001 Al pasar del modo Consultar/Eliminar a Añadir/Modificar no se activaban algunos botones con lupa. 04-11-2001 No se pueden eliminar clientes con almacenes u obras. 07-04-2002 Se ha adaptado para la transacción única. 09-04-2002 En las funciones 'CancelarAnadir', 'CancelarModificar', 'CancelarEliminar', 'AnadirDatos', 'ModificarDatos', y 'EliminarDatos' cerrar todas las tablas que se usen. 09-04-2002 En el evento 'bCancelarClick' llamar a la función 'TratarCambios' en vez de 'DescartarOperacion'. 06-05-2002 Adaptación al grid 'TdxDBGrid'. 21-08-2002 P237. Revisar los botones de 'Eliminar' y 'Eliminar todo' para que al pulsar 'Esc' cancele la operación y no la ejecute como ahora. 24-09-2002 Se producía una excepción si el cursos estaba en el código del cliente, se pulsaba la tecla 'Esc' y se elegía 'No'. El frame estaba oculto pero saltaba el evento OnExit del campo de código de factura. 21-10-2002 Activar p240. Se ha añadido el campo tipo de cliente 21-12-2002 Se ha eliminado un error con el campo 'PROVINCIA'. Al estar situado en ese campo y dar Esc para salir se puede producir una excepción. 26-04-2004 p272. Adaptación a multiempresa. 18-03-2005 Establecer IVA por defecto al dar de alta un cliente 16% =============================================================================== } unit Cliente; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, RdxBotones, StdCtrls, RdxMemo, RdxComboBox, RdxCampos, ExtCtrls, RdxTitulos, Tipos, ComCtrls, RdxCheckBox, Grids, DBGrids, RdxPaneles, RdxBarras, Db, RdxDBFrame, RdxFrameClientes, RXDBCtrl, RdxPageControl, IB, dxCntner, dxTL, dxDBCtrl, dxDBGrid, dxExEdtr, cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxButtonEdit, cxDBEdit, cxCheckBox; type TfrCliente = class(TRdxFrameClientes) pnlScroll: TRdxScrollPanel; pnlCliente: TRdxPanel; eCodigo: TLabel; eNombre: TLabel; eObservaciones: TLabel; cDatos: TRdxCabecera; eIVA: TLabel; eDto: TLabel; eDomiciliacion: TLabel; eNIFCIF: TLabel; cbxDomiciliacion: TRdxDBComboBox; NIF: TRdxDBEdit; Nombre: TRdxDBEdit; IVA: TRdxDBEdit; Dto: TRdxDBEdit; Observaciones: TRdxDBMemo; brDoble: TRdxBarraInferior; bGuardar: TRdxBoton; bCancelar: TRdxBoton; brSimple: TRdxBarraInferior; bSalir: TRdxBoton; dsCliente: TDataSource; pnlTitulo: TRdxPanelTituloOperacion; dsSucursales: TDataSource; PanelDirecciones: TRdxPanel; Paginas: TRdxPagesControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; pnlDireccion: TRdxPanel; eDireccion: TLabel; eNumero: TLabel; ePiso: TLabel; eCodigoPostal: TLabel; ePoblacion: TLabel; eProvincia: TLabel; eTelefono1: TLabel; eTelefono2: TLabel; eFax: TLabel; eCorreo: TLabel; ePersona: TLabel; Provincia: TRdxDBEdit; Poblacion: TRdxDBEdit; Telefono1: TRdxDBEdit; Telefono2: TRdxDBEdit; Fax: TRdxDBEdit; Calle: TRdxDBEdit; Numero: TRdxDBEdit; Piso: TRdxDBEdit; CodigoPostal: TRdxDBEdit; CorreoElectronico: TRdxDBEdit; PersonaContacto: TRdxDBEdit; pnlGridArticulos: TPanel; pnlBarraGrid: TRdxPanel; bAnadir: TRdxBoton; bEliminar: TRdxBoton; bEliminarTodo: TRdxBoton; gridSucursales: TdxDBGrid; cbxTipoCliente: TRdxDBComboBox; eTipo: TLabel; Codigo: TcxDBButtonEdit; cxEtiquetado: TcxDBCheckBox; procedure bSalirClick(Sender: TObject); procedure bAceptarClick(Sender: TObject); procedure bCancelarClick(Sender: TObject); procedure bAnadirClick(Sender: TObject); procedure bEliminarClick(Sender: TObject); procedure ProvinciaButtonClick(Sender: TObject); procedure PoblacionButtonClick(Sender: TObject); procedure IVAExit(Sender: TObject); procedure DtoExit(Sender: TObject); procedure bEliminarTodoClick(Sender: TObject); procedure CodigoPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure CodigoPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); private FCodigoProvincia : Variant; FCodigoPoblacion : Variant; FCodigoProvinciaDireccion : Variant; FCodigoPoblacionDireccion : Variant; FCodigoProvinciaSucursal : Variant; FCodigoPoblacionSucursal : Variant; protected procedure ActivarModoAnadir; override; procedure ActivarModoModificar; override; procedure ActivarModoConsultar; override; procedure ActivarModoEliminar; override; function AnadirDatos : Boolean; override; function ModificarDatos : Boolean; override; function EliminarDatos : Boolean; override; function CancelarAnadir : Boolean; override; function CancelarModificar : Boolean; override; function CancelarEliminar : Boolean; override; function ComprobarDatos : Boolean; override; procedure VerModal; override; procedure SetCodigoProvincia (Value : Variant); virtual; procedure SetCodigoPoblacion (Value : Variant); virtual; procedure SetCodigoProvinciaDireccion (Value : Variant); virtual; procedure SetCodigoPoblacionDireccion (Value : Variant); virtual; procedure SetCodigoProvinciaSucursal (Value : Variant); virtual; procedure SetCodigoPoblacionSucursal (Value : Variant); virtual; procedure FreeContenido; override; procedure BuscarCliente; override; public property CodigoProvincia : Variant read FCodigoProvincia write SetCodigoProvincia; property CodigoPoblacion : Variant read FCodigoPoblacion write SetCodigoPoblacion; property CodigoProvinciaDireccion : Variant read FCodigoProvinciaDireccion write SetCodigoProvinciaDireccion; property CodigoPoblacionDireccion : Variant read FCodigoPoblacionDireccion write SetCodigoPoblacionDireccion; property CodigoProvinciaSucursal : Variant read FCodigoProvinciaSucursal write SetCodigoProvinciaSucursal; property CodigoPoblacionSucursal : Variant read FCodigoPoblacionSucursal write SetCodigoPoblacionSucursal; constructor Create (AOwner : TComponent); override; destructor Destroy; override; published property TablaClientes; property TablaSucursales; property CodigoCliente; procedure SucursalAfterInsert(DataSet: TDataSet); procedure GridBotonPoblacionClick(Sender: TObject); procedure GridBotonProvinciaClick(Sender: TObject); procedure ProvinciaSucursalSetText(Sender: TField; const Text: String); procedure ProvinciaSetText(Sender: TField; const Text: String); end; var frCliente: TfrCliente; implementation {$R *.DFM} uses IBCustomDataSet, TablaClientes, Mensajes, Provincias, Poblaciones, Clientes, Colores, Configuracion, NumFunc, BaseDatos, TablaSucursalesCliente, RdxFrameProvincias, RdxFramePoblaciones, TablaProvincias, TablaBancos, StrFunc, TablaPoblaciones, Excepciones, IBErrorCodes, dxDBTLCL, TablaTiposCliente, Literales, Constantes; const eRegBloq = -901; constructor TfrCliente.Create (AOwner : TComponent); begin inherited Create(AOwner); FCodigoProvincia := NULL; FCodigoPoblacion := NULL; FCodigoProvinciaDireccion := NULL; FCodigoPoblacionDireccion := NULL; FCodigoProvinciaSucursal := NULL; FCodigoPoblacionSucursal := NULL; Entidad := entCliente; ConfigurarFrame(Self, Self.Entidad); BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaClientes := TIBDataSet.Create(Self); TablaSucursales := TIBDataSet.Create(Self); TablaSucursales.AfterInsert := SucursalAfterInsert; dsCliente.DataSet := TablaClientes; dsSucursales.DataSet := TablaSucursales; with TablaClientes do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaClientes.sqlConsultar); InsertSQL.Assign(dmTablaClientes.sqlInsertar); ModifySQL.Assign(dmTablaClientes.sqlModificar); DeleteSQL.Assign(dmTablaClientes.sqlEliminar); RefreshSQL.Assign(dmTablaClientes.sqlConsultar); end; with TablaSucursales do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaSucursalesCliente.sqlGrid); InsertSQL.Assign(dmTablaSucursalesCliente.sqlInsertar); ModifySQL.Assign(dmTablaSucursalesCliente.sqlModificar); DeleteSQL.Assign(dmTablaSucursalesCliente.sqlEliminar); RefreshSQL.Assign(dmTablaSucursalesCliente.sqlConsultar); end; cbxDomiciliacion.Items := dmTablaBancos.DarBancos; cbxTipoCliente.Items := dmTablaTiposCliente.DarTiposCliente; dmTablaSucursalesCliente.InicializarGridSucursales(gridSucursales); Paginas.ActivePageIndex := 0; end; procedure TfrCliente.bSalirClick(Sender: TObject); begin try Rollback; CloseFrame; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrCliente.bAceptarClick(Sender: TObject); begin if (RealizarOperacion) then CloseFrame; end; function TfrCliente.AnadirDatos : boolean; var CodSucursal : Integer; begin Result := False; try CodSucursal := 0; TablaClientes.Post; TablaSucursales.DisableControls; TablaSucursales.First; while not TablaSucursales.Eof do begin TablaSucursales.Edit; TablaSucursales.FieldByName('CODIGO').AsInteger := CodSucursal; TablaSucursales.FieldByName('CODIGOCLIENTE').AsString := Codigo.DataBinding.Field.AsString; CodSucursal := CodSucursal + 1; TablaSucursales.Next; end; TablaSucursales.EnableControls; TablaClientes.ApplyUpdates; TablaSucursales.ApplyUpdates; dmTablaClientes.incrementarCodigo; FCodigoCliente := TablaClientes.FieldByName('CODIGO').AsString; Commit; TablaClientes.CachedUpdates := False; TablaSucursales.CachedUpdates := False; TablaClientes.Close; TablaSucursales.Close; Result := True; except on E : EIBError do begin if E.IBErrorCode = isc_unique_key_violation then begin VerMensajeFmt(msgCliCodCliRepetido, [Codigo.DataBinding.Field.AsString]); TablaClientes.Edit; end else TratarExcepcion(E); end; on E : Exception do TratarExcepcion(E); end; end; function TfrCliente.ModificarDatos : boolean; var CodSucursal : Integer; begin Result := False; try CodSucursal := 0; TablaClientes.Post; TablaSucursales.DisableControls; TablaSucursales.First; while not TablaSucursales.Eof do begin TablaSucursales.Edit; TablaSucursales.FieldByName('CODIGO').AsInteger := CodSucursal; CodSucursal := CodSucursal + 1; TablaSucursales.Post; TablaSucursales.Next; end; TablaSucursales.ApplyUpdates; TablaSucursales.EnableControls; Commit; TablaSucursales.CachedUpdates := False; TablaClientes.Close; TablaSucursales.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrCliente.EliminarDatos : boolean; begin Result := False; try TablaClientes.Delete; Commit; TablaClientes.Close; TablaSucursales.Close; Result := True; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : VerMensajeFmt(msgCliBloqueado, [Codigo.DataBinding.Field.AsString]); isc_foreign_key : VerMensajeFmt(msgCliConAlmAso, [Codigo.DataBinding.Field.AsString]); else TratarExcepcion(E); end; end; on E : Exception do TratarExcepcion(E); end; end; procedure TfrCliente.ActivarModoAnadir; var CodNuevo : Variant; begin dsCliente.AutoEdit := True; dsSucursales.AutoEdit := True; pnlBarraGrid.Visible := True; ActivarEdicionGridDetalles(gridSucursales); (gridSucursales.ColumnByFieldName('PROVINCIA') as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonProvinciaClick; (gridSucursales.ColumnByFieldName('POBLACION') as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonPoblacionClick; Codigo.Properties.Buttons[0].Visible := False; Codigo.Properties.ReadOnly := False; Codigo.Properties.OnValidate := CodigoPropertiesValidate; Provincia.VerBoton := True; Poblacion.VerBoton := True; try { Antes de aplicar la caché hay que asegurarse de que la tabla está cerrada. } TablaClientes.Close; TablaSucursales.Close; CodNuevo := dmTablaClientes.darNuevoCodigo; TablaClientes.CachedUpdates := True; TablaSucursales.CachedUpdates := True; TablaClientes.Open; TablaClientes.FieldByName('PROVINCIA').OnSetText := ProvinciaSetText; TablaSucursales.Prepare; TablaSucursales.Params.ByName('CODIGOCLIENTE').AsString := CodNuevo; TablaSucursales.Open; TablaSucursales.FieldByName('PROVINCIA').OnSetText := ProvinciaSucursalSetText; TablaClientes.Insert; Codigo.DataBinding.Field.AsString := CodNuevo; cxEtiquetado.DataBinding.Field.AsInteger := 0; TablaClientes.FieldByName('IVA').AsString := CTE_IVA; Visible := True; NIF.SetFocus; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrCliente.ActivarModoModificar; begin dsCliente.AutoEdit := True; dsSucursales.AutoEdit := True; ActivarEdicionGridDetalles(gridSucursales); (gridSucursales.ColumnByFieldName('PROVINCIA') as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonProvinciaClick; (gridSucursales.ColumnByFieldName('POBLACION') as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonPoblacionClick; Codigo.Properties.Buttons[0].Visible := True; Codigo.Properties.ReadOnly := True; Codigo.Properties.OnValidate := nil; Provincia.VerBoton := True; Poblacion.VerBoton := True; // Para que no haga dos accesos a la tabla cuando es consulta FCodigoProvinciaDireccion := dmTablaProvincias.darCodigoProvincia(Provincia.Text); try TablaClientes.Open; TablaClientes.FieldByName('PROVINCIA').OnSetText := ProvinciaSetText; if TablaClientes.RecordCount = 0 then begin VerMensajeFmt(msgCliNoExiste, [CodigoCliente]); CancelarModificar; CloseFrame; Exit; end; { Antes de aplicar la caché hay que asegurarse de que la tabla está cerrada. } TablaSucursales.Close; TablaSucursales.CachedUpdates := True; TablaSucursales.Params.ByName('CODIGOCLIENTE').AsString := Codigo.DataBinding.Field.AsString; TablaSucursales.Prepare; TablaSucursales.Open; TablaSucursales.FieldByName('PROVINCIA').OnSetText := ProvinciaSucursalSetText; TablaClientes.Edit; TablaClientes.Post; TablaClientes.Edit; Visible := True; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : begin VerMensajeFmt(msgCliBloqueado, [CodigoCliente]); CancelarModificar; CloseFrame; Exit; end else TratarExcepcion(E); end; end; on E : Exception do TratarExcepcion(E); end; end; procedure TfrCliente.ActivarModoConsultar; begin dsCliente.AutoEdit := False; dsSucursales.AutoEdit := False; pnlBarraGrid.Visible := False; DesactivarEdicionGridDetalles(gridSucursales); (gridSucursales.ColumnByFieldName('PROVINCIA') as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL; (gridSucursales.ColumnByFieldName('POBLACION') as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL; Codigo.Properties.Buttons[0].Visible := True; Codigo.Properties.OnValidate := nil; Provincia.VerBoton := False; Poblacion.VerBoton := False; try TablaClientes.Open; if TablaClientes.RecordCount = 0 then begin VerMensajeFmt(msgCliNoExiste, [CodigoCliente]); CloseFrame; Exit; end; TablaSucursales.Open; TablaSucursales.Params.ByName('CODIGOCLIENTE').AsString := Codigo.DataBinding.Field.AsString; TablaClientes.Cancel; Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrCliente.ActivarModoEliminar; begin dsCliente.AutoEdit := False; dsSucursales.AutoEdit := False; pnlBarraGrid.Visible := False; DesactivarEdicionGridDetalles(gridSucursales); (gridSucursales.ColumnByFieldName('PROVINCIA') as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL; (gridSucursales.ColumnByFieldName('POBLACION') as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL; Codigo.Properties.Buttons[0].Visible := True; Codigo.Properties.OnValidate := nil; Provincia.VerBoton := False; Poblacion.VerBoton := False; try TablaClientes.Open; if TablaClientes.RecordCount = 0 then begin VerMensajeFmt(msgCliNoExiste, [CodigoCliente]); CancelarEliminar; CloseFrame; Exit; end; TablaSucursales.Open; TablaSucursales.Params.ByName('CODIGOCLIENTE').AsString := CodigoCliente; TablaClientes.Cancel; Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrCliente.BuscarCliente; begin if Transaccion = NIL then exit; try TablaClientes.Close; // Buscar la fila a tratar si es necesario if not VarIsNull(CodigoCliente) then begin TablaClientes.Params.ByName('CODIGO').AsString := CodigoCliente; TablaSucursales.Params.ByName('CODIGOCLIENTE').AsString := CodigoCliente; end; TablaClientes.Prepare; TablaSucursales.Prepare; TablaClientes.Open; TablaSucursales.Open; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrCliente.CancelarAnadir: Boolean; begin Result := False; try TablaClientes.CancelUpdates; TablaSucursales.CancelUpdates; RollBack; TablaClientes.CachedUpdates := False; TablaSucursales.CachedUpdates := False; TablaClientes.Close; TablaSucursales.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrCliente.CancelarEliminar: Boolean; begin Result := False; try RollBack; TablaClientes.Close; TablaSucursales.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrCliente.CancelarModificar: Boolean; begin Result := False; try TablaSucursales.CancelUpdates; RollBack; TablaSucursales.CachedUpdates := False; TablaClientes.Close; TablaSucursales.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; destructor TfrCliente.Destroy; begin TablaSucursales.Close; TablaSucursales.UnPrepare; TablaSucursales.Free; TablaClientes.Close; TablaClientes.UnPrepare; TablaClientes.Free; inherited; end; procedure TfrCliente.FreeContenido; begin if (ContenidoModal is TRdxFrameClientes) then begin CodigoCliente := (ContenidoModal as TRdxFrameClientes).CodigoCliente; ActivarModo; end; if (ContenidoModal is TRdxFrameProvincias) then CodigoProvincia := (ContenidoModal as TRdxFrameProvincias).CodigoProvincia; if (ContenidoModal is TRdxFramePoblaciones) then begin CodigoProvincia := (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia; CodigoPoblacion := (ContenidoModal as TRdxFramePoblaciones).CodigoPoblacion; end; inherited FreeContenido; end; procedure TfrCliente.SetCodigoPoblacion(Value: Variant); begin if FCodigoPoblacion <> Value then FCodigoPoblacion := Value; end; procedure TfrCliente.SetCodigoProvincia(Value: Variant); begin if FCodigoProvincia <> Value then FCodigoProvincia := Value; end; procedure TfrCliente.VerModal; begin if (ContenidoModal is TRdxFramePoblaciones) then (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia := CodigoProvincia; inherited; end; procedure TfrCliente.bCancelarClick(Sender: TObject); begin if (TratarCambios = IDOK) then CloseFrame; end; procedure TfrCliente.bAnadirClick(Sender: TObject); begin try TablaSucursales.Append; Paginas.ActivePageIndex := 1; gridSucursales.SetFocus; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrCliente.bEliminarClick(Sender: TObject); begin if (VerMensajePregunta(msgDeseaBorrar) <> IDYES) then Exit; if TablaSucursales.RecordCount = 0 then begin { Hacemos un cancel de la tabla por si el registro actual estuviera recien creado } TablaSucursales.Cancel; exit; end; try TablaSucursales.Delete; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrCliente.GridBotonPoblacionClick(Sender: TObject); begin FCodigoProvinciaSucursal := dmTablaProvincias.darCodigoProvincia(TablaSucursales.FieldByName('PROVINCIA').AsString); if (VarIsNull(CodigoProvinciaSucursal)) then begin VerMensaje(msgSinProvincia); Exit; end; TablaSucursales.Edit; CodigoProvincia := CodigoProvinciaSucursal; CaptionModal := Format(msgListaPoblaciones, [dmTablaProvincias.darNombreProvincia(CodigoProvincia)]); WidthModal := 280; HeightModal := 460; ContenidoModal := TfrPoblaciones.Create(Self); CodigoPoblacionSucursal := CodigoPoblacion; end; procedure TfrCliente.ProvinciaButtonClick(Sender: TObject); begin CaptionModal := 'Lista de provincias'; WidthModal := 280; HeightModal := 460; ContenidoModal := TfrProvincias.Create(Self); CodigoProvinciaDireccion := CodigoProvincia; end; procedure TfrCliente.PoblacionButtonClick(Sender: TObject); begin if (VarIsNull(CodigoProvinciaDireccion)) then begin VerMensaje(msgSinProvincia); Paginas.ActivePageIndex := 0; Provincia.SetFocus; Exit; end; CodigoProvincia := CodigoProvinciaDireccion; CaptionModal := Format(msgListaPoblaciones, [dmTablaProvincias.darNombreProvincia(CodigoProvincia)]); WidthModal := 280; HeightModal := 460; ContenidoModal := TfrPoblaciones.Create(Self); CodigoPoblacionDireccion := CodigoPoblacion; end; procedure TfrCliente.SetCodigoPoblacionDireccion(Value: Variant); begin if (not VarIsNull(FCodigoPoblacionDireccion)) and (FCodigoPoblacionDireccion = Value) then exit; if (not VarIsNull(Value)) then begin FCodigoPoblacionDireccion := Value; Poblacion.Field.AsString := dmTablaPoblaciones.darNombrePoblacion(FCodigoProvinciaDireccion, FCodigoPoblacionDireccion); end; end; procedure TfrCliente.SetCodigoPoblacionSucursal(Value: Variant); begin if (not VarIsNull(FCodigoPoblacionSucursal)) and (FCodigoPoblacionSucursal = Value) then exit; if (not VarIsNull(Value)) then begin FCodigoPoblacionSucursal := Value; TablaSucursales.FieldByName('POBLACION').AsString := dmTablaPoblaciones.darNombrePoblacion(FCodigoProvinciaSucursal, FCodigoPoblacionSucursal); end; end; procedure TfrCliente.SetCodigoProvinciaDireccion(Value: Variant); begin if (not VarIsNull(FCodigoProvinciaDireccion)) and (FCodigoProvinciaDireccion = Value) then exit; if (not VarIsNull(Value)) then begin FCodigoProvinciaDireccion := Value; Provincia.Field.AsString := dmTablaProvincias.darNombreProvincia(FCodigoProvinciaDireccion); end; end; procedure TfrCliente.SetCodigoProvinciaSucursal(Value: Variant); begin if (not VarIsNull(FCodigoProvinciaSucursal)) and (FCodigoProvinciaSucursal = Value) then exit; if (not VarIsNull(Value)) then begin FCodigoProvinciaSucursal := Value; TablaSucursales.FieldByName('PROVINCIA').AsString := dmTablaProvincias.darNombreProvincia(FCodigoProvinciaSucursal); end; end; procedure TfrCliente.IVAExit(Sender: TObject); begin if not (Modo in [Anadir, Modificar]) then Exit; try validarIVA(IVA.Text); except on E : Exception do begin IVA.SetFocus; VerMensaje(E.Message); end; end; end; procedure TfrCliente.DtoExit(Sender: TObject); begin if not (Modo in [Anadir, Modificar]) then Exit; try validarDto(Dto.Text); except on E : Exception do begin Dto.SetFocus; VerMensaje(E.Message); end; end; end; procedure TfrCliente.SucursalAfterInsert(DataSet: TDataSet); begin DataSet.FieldByName('CODIGOCLIENTE').AsString := Codigo.DataBinding.Field.AsString; DataSet.FieldByName('CODIGO').AsInteger := -1; DataSet.FieldByName('DB_KEY').AsString := '-'; end; procedure TfrCliente.bEliminarTodoClick(Sender: TObject); begin if (VerMensajePregunta(msgDeseaBorrarTodo) <> IDYES) then Exit; try TablaSucursales.DisableControls; TablaSucursales.Last; while TablaSucursales.RecordCount > 0 do begin TablaSucursales.Delete; TablaSucursales.Prior; end; TablaSucursales.EnableControls; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrCliente.ComprobarDatos: Boolean; begin Result := False; if EsCadenaVacia(Nombre.Text) then begin VerMensaje(msgCliFaltaNombreCli); Nombre.SetFocus; Exit; end; if EsCadenaVacia(Calle.Text) then begin VerMensaje(msgCliFaltaCalle); Paginas.ActivePageIndex := 0; Calle.SetFocus; Exit; end; Result := True; end; procedure TfrCliente.ProvinciaSucursalSetText(Sender: TField; const Text: String); var CampoProvincia : String; begin CampoProvincia := AnsiUpperCase(Text); FCodigoProvinciaSucursal := dmTablaProvincias.darCodigoProvincia(CampoProvincia); Sender.AsString := CampoProvincia; end; procedure TfrCliente.GridBotonProvinciaClick(Sender: TObject); begin TablaSucursales.Edit; CaptionModal := 'Lista de provincias'; WidthModal := 280; HeightModal := 460; ContenidoModal := TfrProvincias.Create(Self); CodigoProvinciaSucursal := CodigoProvincia; end; procedure TfrCliente.ProvinciaSetText(Sender: TField; const Text: String); begin FCodigoProvinciaDireccion := dmTablaProvincias.darCodigoProvincia(Text); Sender.AsString := Text; end; procedure TfrCliente.CodigoPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); begin inherited; if (TratarCambios = IDCANCEL) then exit; { Esto es porque en modo 'Modificar' hacemos un cambio y pulsamos este botón se cierra la tabla y si en el frame hijo (el del grid) damos a cancelar, FCodigoCliente es NULL y da error al activar modo porque no se inicializa los parámetros de la sql. Lo hace BuscarCliente. } if not TablaClientes.Active then BuscarCliente; ContenidoModal := TfrClientes.Create(Self); end; procedure TfrCliente.CodigoPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin inherited; if (Modo <> Anadir) or (Visible = false) then exit; if EsCadenaVacia(DisplayValue) then DisplayValue := dmTablaClientes.darNuevoCodigo; if (dmTablaClientes.validarCodigo(DisplayValue)) then begin //Comprueba que le numero es lo sufucientemente pequeño para ser un entero if not EsInteger(DisplayValue) then begin VerMensajeFmt(msgCliCodCliIncorrecto,[DisplayValue]); Codigo.SetFocus; end else begin DisplayValue := dmTablaClientes.formatearCodigo(DisplayValue); if (dmTablaClientes.existeCodigo(DisplayValue)) then begin VerMensajeFmt(msgCliCodCliRepetido, [DisplayValue]); Codigo.SetFocus; end; end; end else begin VerMensajeFmt(msgCliCodCliIncorrecto, [DisplayValue]); Codigo.SetFocus; end; end; end.