{ =============================================================================== 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.0.8 Fecha versión actual: 26-04-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 01-10-2001 Añadir la pestaña 'Sucursales'. 05-10-2001 Arreglado un fallo con la población principal. No cogía la poblacición seleccionada en la lista modal. 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'. 21-08-2002 P236. No salían las sucursales al consultar o eliminar el proveedor. 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 proveedor, 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-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. =============================================================================== } unit Proveedor; interface uses Windows, Db, StdCtrls, RdxMemo, RdxCampos, RdxTitulos, Forms, RdxPaneles, RdxBotones, Controls, ExtCtrls, RdxBarras, Classes, RdxFrameProveedores, Grids, DBGrids, RXDBCtrl, ComCtrls, RdxPageControl, dxCntner, dxTL, dxDBCtrl, dxDBGrid, dxEditor, dxExEdtr, dxEdLib, cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxButtonEdit, cxDBEdit, cxCheckBox; type TfrProveedor = class(TRdxFrameProveedores) brDoble: TRdxBarraInferior; bAceptar: TRdxBoton; bCancelarGuardar: TRdxBoton; brSimple: TRdxBarraInferior; bSalir: TRdxBoton; pnlScroll: TRdxScrollPanel; pnlProveedor: TRdxPanel; eCodigoAsignado: TLabel; eObservaciones: TLabel; cDatos: TRdxCabecera; eCodigo: TLabel; eNIFCIF: TLabel; NIF: TRdxDBEdit; eNombre: TLabel; Nombre: TRdxDBEdit; Observaciones: TRdxDBMemo; dsProveedor: TDataSource; Titulo: TRdxPanelTituloOperacion; PanelDirecciones: TRdxPanel; Paginas: TRdxPagesControl; TabSheet1: 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; TabSheet2: TTabSheet; pnlGridArticulos: TPanel; pnlBarraGrid: TRdxPanel; bAnadir: TRdxBoton; bEliminar: TRdxBoton; bEliminarTodo: TRdxBoton; dsSucursales: TDataSource; gridSucursales: TdxDBGrid; Codigo: TcxDBButtonEdit; CodigoCliente: TcxTextEdit; cxEtiquetado: TcxDBCheckBox; procedure bSalirClick(Sender: TObject); procedure bCancelarGuardarClick(Sender: TObject); procedure ProvinciaButtonClick(Sender: TObject); procedure PoblacionButtonClick(Sender: TObject); procedure bAceptarClick(Sender: TObject); procedure bAnadirClick(Sender: TObject); procedure bEliminarClick(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 BuscarProveedor; 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 TablaProveedores; property TablaSucursales; property CodigoProveedor; procedure GridBotonProvinciaClick(Sender: TObject); procedure GridBotonPoblacionClick(Sender: TObject); procedure ProvinciaSucursalSetText(Sender: TField; const Text: String); procedure ProvinciaSetText(Sender: TField; const Text: String); procedure SucursalAfterInsert(DataSet: TDataSet); end; var frProveedor: TfrProveedor; implementation {$R *.DFM} uses TablaProveedores, Mensajes, IB, Colores, IBDatabase, Proveedores, Provincias, RdxFrameProvincias, Poblaciones, RdxFramePoblaciones, TablaProvincias, BaseDatos, Tipos, IBCustomDataSet, Sysutils, StrFunc, TablaPoblaciones, Excepciones, IBErrorCodes, NumFunc, TablaSucursalesProveedor, dxDBTLCL, Configuracion, Literales, RdxEmpresaActiva; constructor TfrProveedor.Create (AOwner : TComponent); begin inherited Create(AOwner); FCodigoProvincia := NULL; FCodigoPoblacion := NULL; FCodigoProvinciaDireccion := NULL; FCodigoPoblacionDireccion := NULL; FCodigoProvinciaSucursal := NULL; FCodigoPoblacionSucursal := NULL; Entidad := entProveedor; ConfigurarFrame(Self, Self.Entidad); BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaProveedores := TIBDataSet.Create(Self); TablaSucursales := TIBDataSet.Create(Self); TablaSucursales.AfterInsert := SucursalAfterInsert; dsProveedor.DataSet := TablaProveedores; dsSucursales.DataSet := TablaSucursales; with TablaProveedores do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaProveedores.sqlConsultar); InsertSQL.Assign(dmTablaProveedores.sqlInsertar); ModifySQL.Assign(dmTablaProveedores.sqlModificar); DeleteSQL.Assign(dmTablaProveedores.sqlEliminar); RefreshSQL.Assign(dmTablaProveedores.sqlConsultar); end; with TablaSucursales do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaSucursalesProveedor.sqlGrid); InsertSQL.Assign(dmTablaSucursalesProveedor.sqlInsertar); ModifySQL.Assign(dmTablaSucursalesProveedor.sqlModificar); DeleteSQL.Assign(dmTablaSucursalesProveedor.sqlEliminar); RefreshSQL.Assign(dmTablaSucursalesProveedor.sqlConsultar); end; dmTablaSucursalesProveedor.InicializarGridSucursales(gridSucursales); Paginas.ActivePageIndex := 0; end; procedure TfrProveedor.SetCodigoProvincia(Value: Variant); begin if FCodigoProvincia <> Value then FCodigoProvincia := Value; end; procedure TfrProveedor.SetCodigoPoblacion(Value: Variant); begin if FCodigoPoblacion <> Value then FCodigoPoblacion := Value; end; procedure TfrProveedor.bSalirClick(Sender: TObject); begin try Rollback; CloseFrame; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrProveedor.bCancelarGuardarClick(Sender: TObject); begin if (TratarCambios = IDOK) then CloseFrame; end; function TfrProveedor.AnadirDatos : Boolean; var CodSucursal : Integer; begin Result := False; try CodSucursal := 0; TablaProveedores.Post; TablaSucursales.DisableControls; TablaSucursales.First; while not TablaSucursales.Eof do begin TablaSucursales.Edit; TablaSucursales.FieldByName('CODIGO').AsInteger := CodSucursal; TablaSucursales.FieldByName('CODIGOPROVEEDOR').AsString := Codigo.DataBinding.Field.AsString; CodSucursal := CodSucursal + 1; TablaSucursales.Next; end; TablaSucursales.EnableControls; TablaSucursales.ApplyUpdates; TablaProveedores.ApplyUpdates; dmTablaProveedores.insertarProveedorCliEmp(Codigo.DataBinding.Field.AsString, CodigoCliente.Text); dmTablaProveedores.incrementarCodigo; CodigoProveedor := TablaProveedores.FieldByName('CODIGO').AsString; Commit; TablaProveedores.CachedUpdates := False; TablaSucursales.CachedUpdates := False; TablaProveedores.Close; TablaSucursales.Close; Result := True; except on E : EIBError do begin if E.IBErrorCode = isc_unique_key_violation then begin VerMensajeFmt(msgProCodProvRepetido, [Codigo.DataBinding.Field.AsString]); TablaProveedores.Edit; end else TratarExcepcion(E); end; on E : Exception do TratarExcepcion(E); end; end; function TfrProveedor.ModificarDatos : Boolean; var CodSucursal : Integer; begin Result := False; try CodSucursal := 0; TablaProveedores.Post; if not dmTablaProveedores.modificarProveedorCliEmp(Codigo.DataBinding.Field.AsString, CodigoCliente.Text) then dmTablaProveedores.insertarProveedorCliEmp(Codigo.DataBinding.Field.AsString, CodigoCliente.Text); 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; Commit; TablaSucursales.CachedUpdates := False; TablaSucursales.EnableControls; TablaProveedores.Close; TablaSucursales.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrProveedor.EliminarDatos : Boolean; begin Result := False; try TablaProveedores.Delete; Commit; TablaProveedores.Close; TablaSucursales.Close; Result := True; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : VerMensajeFmt(msgProvBloqueado, [Codigo.DataBinding.Field.AsString]); else TratarExcepcion(E); end; end; on E : Exception do TratarExcepcion(E); end; end; procedure TfrProveedor.ActivarModoAnadir; var CodNuevo : Variant; begin dsProveedor.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 TablaProveedores.Close; TablaProveedores.CachedUpdates := True; TablaProveedores.Open; TablaProveedores.Insert; TablaProveedores.FieldByName('PROVINCIA').OnSetText := ProvinciaSetText; CodigoCliente.Properties.ReadOnly := False; CodigoCliente.Properties.MaxLength := TablaProveedores.FieldByName('CODIGO').Size; CodNuevo := dmTablaProveedores.darNuevoCodigo; Codigo.DataBinding.Field.asString := CodNuevo; cxEtiquetado.DataBinding.Field.AsInteger := 0; TablaSucursales.Close; TablaSucursales.CachedUpdates := True; TablaSucursales.Prepare; TablaSucursales.Params.ByName('CODIGOPROVEEDOR').AsString := CodNuevo; TablaSucursales.Open; TablaSucursales.FieldByName('PROVINCIA').OnSetText := ProvinciaSucursalSetText; Visible := True; NIF.SetFocus; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrProveedor.ActivarModoModificar; begin dsProveedor.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 := 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 TablaProveedores.Open; TablaProveedores.FieldByName('PROVINCIA').OnSetText := ProvinciaSetText; if TablaProveedores.RecordCount = 0 then begin VerMensajeFmt(msgProvNoExisteProv, [CodigoProveedor]); CancelarModificar; CloseFrame; Exit; end; CodigoCliente.Properties.ReadOnly := False; CodigoCliente.Properties.MaxLength := TablaProveedores.FieldByName('CODIGO').Size; CodigoCliente.Text := dmTablaProveedores.darCodigoClienteProveedor(CodigoProveedor); { Antes de aplicar la caché hay que asegurarse de que la tabla está cerrada. } TablaSucursales.Close; TablaSucursales.CachedUpdates := True; TablaSucursales.Params.ByName('CODIGOPROVEEDOR').AsString := Codigo.DataBinding.Field.asString; TablaSucursales.Prepare; TablaSucursales.Open; TablaSucursales.FieldByName('PROVINCIA').OnSetText := ProvinciaSucursalSetText; TablaProveedores.Edit; TablaProveedores.Post; TablaProveedores.Edit; Visible := True; NIF.SetFocus; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : begin VerMensajeFmt(msgProvBloqueado, [CodigoProveedor]); CancelarModificar; CloseFrame; Exit; end else TratarExcepcion(E); end; end; on E : Exception do TratarExcepcion(E); end; end; procedure TfrProveedor.ActivarModoConsultar; begin dsProveedor.AutoEdit := False; dsSucursales.AutoEdit := False; pnlBarraGrid.Visible := True; 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 TablaProveedores.Open; if TablaProveedores.RecordCount = 0 then begin VerMensajeFmt(msgProvNoExisteProv, [CodigoProveedor]); CloseFrame; Exit; end; CodigoCliente.Properties.ReadOnly := True; CodigoCliente.Text := dmTablaProveedores.darCodigoClienteProveedor(CodigoProveedor); TablaProveedores.Cancel; TablaSucursales.Params.ByName('CODIGOPROVEEDOR').AsString := Codigo.DataBinding.Field.asString; TablaSucursales.Prepare; TablaSucursales.Open; Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrProveedor.ActivarModoEliminar; begin dsProveedor.AutoEdit := False; dsSucursales.AutoEdit := False; DesactivarEdicionGridDetalles(gridSucursales); (gridSucursales.ColumnByFieldName('PROVINCIA') as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL; (gridSucursales.ColumnByFieldName('POBLACION') as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL; pnlBarraGrid.Visible := False; Codigo.Properties.Buttons[0].Visible := True; Codigo.Properties.OnValidate := nil; Provincia.VerBoton := False; Poblacion.VerBoton := False; try TablaProveedores.Open; if TablaProveedores.RecordCount = 0 then begin VerMensajeFmt(msgProvNoExisteProv, [CodigoProveedor]); CancelarEliminar; CloseFrame; Exit; end; CodigoCliente.Properties.ReadOnly := True; CodigoCliente.Text := dmTablaProveedores.darCodigoClienteProveedor(CodigoProveedor); TablaProveedores.Cancel; TablaSucursales.Params.ByName('CODIGOPROVEEDOR').AsString := Codigo.DataBinding.Field.asString; TablaSucursales.Prepare; TablaSucursales.Open; Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrProveedor.ProvinciaButtonClick(Sender: TObject); begin CaptionModal := 'Lista de provincias'; WidthModal := 280; HeightModal := 460; ContenidoModal := TfrProvincias.Create(Self); CodigoProvinciaDireccion := CodigoProvincia; end; procedure TfrProveedor.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; destructor TfrProveedor.Destroy; begin TablaProveedores.Close; TablaProveedores.UnPrepare; TablaProveedores.Free; inherited; end; procedure TfrProveedor.bAceptarClick(Sender: TObject); begin if (RealizarOperacion) then CloseFrame; end; procedure TfrProveedor.FreeContenido; begin if (ContenidoModal is TRdxFrameProveedores) then begin CodigoProveedor := (ContenidoModal as TRdxFrameProveedores).CodigoProveedor; 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 TfrProveedor.VerModal; begin if (ContenidoModal is TRdxFramePoblaciones) then (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia := FCodigoProvincia; inherited; end; procedure TfrProveedor.BuscarProveedor; begin if Transaccion = NIL then Exit; try TablaProveedores.DisableControls; TablaProveedores.Close; // Buscar la fila a tratar si es necesario if not EsCadenaVacia(CodigoProveedor) then TablaProveedores.Params.ByName('CODIGO').AsString := CodigoProveedor; TablaProveedores.Prepare; TablaProveedores.Open; TablaProveedores.EnableControls; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrProveedor.CancelarAnadir: Boolean; begin Result := False; try TablaProveedores.CancelUpdates; TablaSucursales.CancelUpdates; RollBack; TablaProveedores.CachedUpdates := False; TablaSucursales.CachedUpdates := False; TablaProveedores.Close; TablaSucursales.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrProveedor.CancelarEliminar: Boolean; begin Result := False; try RollBack; TablaProveedores.Close; TablaSucursales.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrProveedor.CancelarModificar: Boolean; begin Result := False; try TablaSucursales.CancelUpdates; RollBack; TablaSucursales.CachedUpdates := False; TablaProveedores.Close; TablaSucursales.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrProveedor.ComprobarDatos: Boolean; begin Result := False; if EsCadenaVacia(Nombre.Text) then begin VerMensaje(msgProFaltaNombreProv); Nombre.SetFocus; Exit; end; Result := True; end; procedure TfrProveedor.ProvinciaSucursalSetText(Sender: TField; const Text: String); var CampoProvincia : String; begin CampoProvincia := AnsiUpperCase(Text); FCodigoProvinciaSucursal := dmTablaProvincias.darCodigoProvincia(CampoProvincia); Sender.AsString := CampoProvincia; end; procedure TfrProveedor.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 TfrProveedor.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 TfrProveedor.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; procedure TfrProveedor.GridBotonProvinciaClick(Sender: TObject); begin TablaSucursales.Edit; CaptionModal := 'Lista de provincias'; WidthModal := 280; HeightModal := 460; ContenidoModal := TfrProvincias.Create(Self); CodigoProvinciaSucursal := CodigoProvincia; end; procedure TfrProveedor.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 TfrProveedor.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 TfrProveedor.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 TfrProveedor.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 TfrProveedor.SucursalAfterInsert(DataSet: TDataSet); begin DataSet.FieldByName('CODIGOPROVEEDOR').AsString := Codigo.DataBinding.Field.AsString; DataSet.FieldByName('CODIGO').AsInteger := -1; DataSet.FieldByName('DB_KEY').AsString := '-'; end; procedure TfrProveedor.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 TfrProveedor.ProvinciaSetText(Sender: TField; const Text: String); begin FCodigoProvinciaDireccion := dmTablaProvincias.darCodigoProvincia(Text); Sender.AsString := Text; end; procedure TfrProveedor.CodigoPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); begin 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, FCodigoProveedor es NULL y da error al activar modo porque no se inicializa los parámetros de la sql. Lo hace BuscarProveedor. } if not TablaProveedores.Active then BuscarProveedor; ContenidoModal := TfrProveedores.Create(Self); end; procedure TfrProveedor.CodigoPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin if (Modo <> Anadir) or (Visible = false) then exit; if EsCadenaVacia(DisplayValue) then DisplayValue := dmTablaProveedores.darNuevoCodigo; if (dmTablaProveedores.validarCodigo(DisplayValue)) then begin //Comprueba que le numero es lo sufucientemente pequeño para ser un entero if not EsInteger(DisplayValue) then begin VerMensajeFmt(msgProCodProvIncorrecto,[DisplayValue]); Codigo.SetFocus; end else begin DisplayValue := dmTablaProveedores.formatearCodigo(DisplayValue); if (dmTablaProveedores.existeCodigo(DisplayValue)) then begin VerMensajeFmt(msgProCodProvRepetido, [DisplayValue]); Codigo.SetFocus; end; end; end else begin VerMensajeFmt(msgProCodProvIncorrecto, [DisplayValue]); Codigo.SetFocus; end; end; end.