{ =============================================================================== 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: 13-10-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 08-10-2001 Se ha añadido en ActivarModoAñadir la comprobación de si es entidad entAlmacen y si es asi sacar pantalla de elección de tipo de almacén. 27-11-2001 Se ha modificado CambiarEntidad para que cuando la entidad sea obra los titulos correspondientes cambien. 07-04-2002 Se ha adaptado a una unica transacción. 24-09-2002 Se producía una excepción si el cursos estaba en el código del almacén, 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. 06-03-2004 Se ha eliminado el tratamiento de perfiles de usuario. 07-03-2004 P272. Adaptación a multiempresa. 04-10-2004 Cambio CambiarEntidad para que soporte otro color. 13-10-2004 Se añade la lista de presupuestos asociados =============================================================================== } unit Almacen; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Db, IBCustomDataSet, Mask, DBCtrls, Buttons, ToolEdit, IB, IBSQL, IBDatabase, RdxBarras, RdxBotones, RdxCampos, RdxMemo, RdxComboBox, RdxCheckBox, RdxTitulos, RdxPaneles, Colores, Mensajes, Tipos, RdxFrameAlmacenes, cxControls, cxContainer, cxEdit, cxTextEdit, cxDBEdit, cxMaskEdit, cxButtonEdit, dxCntner, dxTL, dxDBCtrl, dxDBGrid, dxDBTLCL; type TfrAlmacen = class(TRdxFrameAlmacenes) pnlScroll: TRdxScrollPanel; pnlDatos: TRdxPanel; ePersona: TLabel; eTelefono: TLabel; eCodigoPostal: TLabel; eProvincia: TLabel; ePoblacion: TLabel; eNumero: TLabel; ePiso: TLabel; eCalle: TLabel; eCodigo: TLabel; cDatosAlmacen: TRdxCabecera; eNombre: TLabel; eNombreCliente: TLabel; eNifCifCliente: TLabel; eCodigoCliente: TLabel; Poblacion: TRdxDBEdit; Provincia: TRdxDBEdit; Piso: TRdxDBEdit; Numero: TRdxDBEdit; Calle: TRdxDBEdit; PersonaContacto: TRdxDBEdit; Nombre: TRdxDBEdit; CodigoPostal: TRdxDBEdit; Telefono: TRdxDBEdit; brSimple: TRdxBarraInferior; bSalir: TRdxBoton; brDoble: TRdxBarraInferior; bGuardar: TRdxBoton; bCancelarGuardar: TRdxBoton; dsAlmacen: TDataSource; Titulo: TRdxPanelTituloOperacion; NomCliente: TRdxDBEdit; NifCifCliente: TRdxDBEdit; Codigo: TcxDBButtonEdit; CodCliente: TcxDBButtonEdit; pnlListaPresupuestos: TRdxPanel; bAgragar: TRdxBoton; pnlGridArticulos: TPanel; gridDetalles: TdxDBGrid; RdxPanel2: TRdxPanel; eListaProveedores: TLabel; dsObrasPresupuestos: TDataSource; pnlBarraGrid: TRdxPanel; bEliminar: TRdxBoton; bElminarTodo: TRdxBoton; bAnadir: TRdxBoton; eClienteAsociado: TLabel; procedure CodigoPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure CodigoPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure CodClientePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure CodClientePropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure ProvinciaButtonClick(Sender: TObject); procedure PoblacionButtonClick(Sender: TObject); procedure bAceptarClick(Sender: TObject); procedure bCancelarGuardarClick(Sender: TObject); procedure bSalirClick(Sender: TObject); procedure ProvinciaSetText(Sender: TField; const Text: String); procedure bAnadirClick(Sender: TObject); procedure bEliminarClick(Sender: TObject); procedure bElminarTodoClick(Sender: TObject); private FCodigoProvincia : Variant; FCodigoPoblacion : Variant; FCodigoCliente : Variant; FTablaObrasPresupuestos : TIBDataSet; FCodigoPresupuesto: Variant; procedure SetCodigoPresupuesto(const Value: Variant); procedure limpiarCampos; 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; procedure SetCodigoProvincia (Value : Variant); virtual; procedure SetCodigoPoblacion (Value : Variant); virtual; procedure SetCodigoCliente (Value : Variant); procedure BuscarAlmacen; override; procedure BuscarCliente; procedure VerModal; override; procedure FreeContenido; override; function ComprobarDatos: Boolean; override; function CambiarEntidad (EntidadAnterior, Entidad : TRdxEntidad): Boolean; override; public property CodigoProvincia : Variant read FCodigoProvincia write SetCodigoProvincia; property CodigoPoblacion : Variant read FCodigoPoblacion write SetCodigoPoblacion; property CodigoCliente : Variant read FCodigoCliente write SetCodigoCliente; property CodigoPresupuesto : Variant read FCodigoPresupuesto write SetCodigoPresupuesto; constructor Create (AOwner : TComponent); override; destructor Destroy; override; procedure GridBotonCodigoPresupuestoClick(Sender: TObject); published property TablaAlmacenes; property CodigoAlmacen; end; var frAlmacen: TfrAlmacen; implementation {$R *.DFM} uses BaseDatos, TablaAlmacenes, Almacenes, RdxFrameProvincias, Provincias, TablaProvincias, RdxFramePoblaciones, Poblaciones, RdxFrameClientes, Clientes, TablaClientes, TablaPoblaciones, TablaPedidosProveedor, ElegirTipoAlmacen, Excepciones, IBErrorCodes, Configuracion, NumFunc, RdxEmpresaActiva, StrFunc, Literales, PresupuestosClientes, RdxFramePresupuestos; constructor TfrAlmacen.Create (AOwner : TComponent); begin inherited Create(AOwner); FCodigoProvincia := NULL; FCodigoPoblacion := NULL; FCodigoCliente := NULL; BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaAlmacenes := TIBDataSet.Create(Self); dsAlmacen.DataSet := TablaAlmacenes; //No asignamos ninguna sentencia sql hasta que no se le asigna una entidad with TablaAlmacenes do begin Database := BaseDatos; Transaction := Transaccion; end; FTablaObrasPresupuestos := TIBDataSet.Create(Self); dsObrasPresupuestos.DataSet := FTablaObrasPresupuestos; with FTablaObrasPresupuestos do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaAlmacenes.sqlConsultarPresupuesto); InsertSQL.Assign(dmTablaAlmacenes.sqlInsertarPresupuesto); ModifySQL.Assign(dmTablaAlmacenes.sqlModificarPresupuesto); DeleteSQL.Assign(dmTablaAlmacenes.sqlEliminarPresupuesto); RefreshSQL.Assign(dmTablaAlmacenes.sqlConsultarPresupuesto); end; dmTablaAlmacenes.InicializarGridDetallesPresupuestos(gridDetalles); Entidad := entAlmacenFisico; ConfigurarFrame(Self, Self.Entidad); end; destructor TfrAlmacen.Destroy; begin TablaAlmacenes.Close; TablaAlmacenes.UnPrepare; TablaAlmacenes.Free; FTablaObrasPresupuestos.Close; FTablaObrasPresupuestos.UnPrepare; FTablaObrasPresupuestos.Free; inherited; end; procedure TfrAlmacen.BuscarAlmacen; begin if Transaccion = NIL then exit; try TablaAlmacenes.Close; // Buscar la fila a tratar si es necesario if not VarIsNull(CodigoAlmacen) then TablaAlmacenes.Params.ByName('CODIGO').AsString := CodigoAlmacen; TablaAlmacenes.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; TablaAlmacenes.Prepare; TablaAlmacenes.Open; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlmacen.SetCodigoProvincia(Value: Variant); begin if (not VarIsNull(FCodigoProvincia)) and (FCodigoProvincia = Value) then Exit; if (not VarIsNull(Value)) then begin FCodigoProvincia := Value; Provincia.Field.AsString := dmTablaProvincias.darNombreProvincia(FCodigoProvincia); end; end; procedure TfrAlmacen.SetCodigoPoblacion(Value: Variant); begin if (not VarIsNull(FCodigoPoblacion)) and (FCodigoPoblacion = Value) then Exit; if (not VarIsNull(Value)) then begin FCodigoPoblacion := Value; Poblacion.Field.AsString := dmTablaPoblaciones.darNombrePoblacion(FCodigoProvincia, FCodigoPoblacion); end; end; procedure TfrAlmacen.SetCodigoCliente(Value: Variant); begin if (not VarIsNull(FCodigoCliente)) and (FCodigoCliente = Value) then Exit; if (not VarIsNull(Value)) then begin FCodigoCliente := Value; CodCliente.DataBinding.Field.AsString := Value; BuscarCliente; end else limpiarCampos; end; procedure TfrAlmacen.BuscarCliente; var Datos: TDatosCliente; begin Datos := TDatosCliente.Create; Datos.Codigo := CodigoCliente; if not dmTablaClientes.darDatosCliente(Datos) then begin VerMensajeFmt(msgCliCodCliNoExiste, [CodCliente.Text]); CodCliente.SetFocus; exit; end; NifCifCliente.Field.asString := Datos.Nifcif; NomCliente.Field.asString := Datos.Nombre; if (VerMensajePreguntaSN(msgAlmDeseaRellCli) = IDYES) then begin Calle.Field.asString := Datos.Calle; Numero.Field.asString := Datos.Numero; Piso.Field.asString := Datos.Piso; Provincia.Field.asString := Datos.Provincia; CodigoPostal.Field.asString := Datos.CodigoPostal; Poblacion.Field.asString := Datos.Poblacion; Telefono.Field.asString := Datos.Telefono1; end; Datos.Free; end; procedure TfrAlmacen.FreeContenido; begin if (ContenidoModal is TRdxFrameAlmacenes) then begin CodigoAlmacen := (ContenidoModal as TRdxFrameAlmacenes).CodigoAlmacen; 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; if (ContenidoModal is TRdxFrameClientes) then begin CodigoCliente := (ContenidoModal as TRdxFrameClientes).CodigoCliente; end; if (ContenidoModal is TRdxFramePresupuestos) then begin CodigoPresupuesto := (ContenidoModal as TRdxFramePresupuestos).CodigoPresupuesto; end; if (ContenidoModal is TfrElegirTipoAlmacen) then begin if(ContenidoModal as TfrElegirTipoAlmacen).TipoFisico then Entidad := entAlmacenFisico else Entidad := entAlmacenObra; end; inherited FreeContenido; end; procedure TfrAlmacen.VerModal; begin if (ContenidoModal is TRdxFramePoblaciones) then (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia := CodigoProvincia; inherited VerModal; end; function TfrAlmacen.AnadirDatos : Boolean; begin Result := False; try TablaAlmacenes.Post; TablaAlmacenes.ApplyUpdates; FTablaObrasPresupuestos.ApplyUpdates; dmTablaAlmacenes.incrementarCodigo; FCodigoAlmacen := TablaAlmacenes.FieldByName('CODIGO').AsString; Commit; TablaAlmacenes.CachedUpdates := False; TablaAlmacenes.Close; FTablaObrasPresupuestos.CachedUpdates := False; FTablaObrasPresupuestos.Close; Result := True; except on E : EIBError do begin if E.IBErrorCode = isc_unique_key_violation then begin VerMensajeFmt(msgAlmCodAlmRepetido, [Codigo.DataBinding.Field.AsString]); TablaAlmacenes.Edit; end else TratarExcepcion(E); end; on E : Exception do TratarExcepcion(E); end; end; function TfrAlmacen.ModificarDatos : Boolean; begin Result := False; try TablaAlmacenes.Post; FTablaObrasPresupuestos.ApplyUpdates; Commit; TablaAlmacenes.Close; FTablaObrasPresupuestos.CachedUpdates := False; FTablaObrasPresupuestos.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrAlmacen.EliminarDatos : Boolean; begin Result := False; try TablaAlmacenes.Delete; Commit; TablaAlmacenes.Close; FTablaObrasPresupuestos.Close; Result := True; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : VerMensajeFmt(msgAlmBloqueado, [Codigo.DataBinding.Field.AsString]); else TratarExcepcion(E); end; end; on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlmacen.activarModoAnadir; begin {Si la entidad asignada es entAlmacenes,quiere decir que el frame ha sido llamado desde el frame pedido de proveedor, y por tanto hay que exigir que tipo de almacen desea dar de alta} if entidad = entAlmacen then begin CaptionModal := 'Añadir almacén'; WidthModal := 350; HeightModal := 160; ModoModal := Emitir; ContenidoModal := TfrElegirTipoAlmacen.Create(Self); end; CodCliente.Properties.Buttons[0].Visible := True; CodCliente.Properties.ReadOnly := False; CodCliente.Properties.OnValidate := CodClientePropertiesValidate; dsAlmacen.AutoEdit := True; Codigo.Properties.Buttons[0].Visible := False; Codigo.Properties.ReadOnly := False; Codigo.Properties.OnValidate := CodigoPropertiesValidate; Provincia.VerBoton := True; Poblacion.VerBoton := True; try TablaAlmacenes.Close; TablaAlmacenes.CachedUpdates := True; TablaAlmacenes.Open; TablaAlmacenes.FieldByName('PROVINCIA').OnSetText := ProvinciaSetText; TablaAlmacenes.Insert; TablaAlmacenes.FieldByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; //Para que no detecte que el campo not null Tipo esta vacio TablaAlmacenes.FieldByName('TIPO').asString := '-'; Codigo.DataBinding.Field.asString := dmTablaAlmacenes.darNuevoCodigo; pnlBarraGrid.Visible := True; FTablaObrasPresupuestos.Close; FTablaObrasPresupuestos.CachedUpdates := True; FTablaObrasPresupuestos.Open; ActivarEdicionGridDetalles(gridDetalles); { Inicializar la tabla de detalles } (gridDetalles.ColumnByFieldName('CODIGOPRESUPUESTO') as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonCodigoPresupuestoClick; Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlmacen.activarModoModificar; begin CodCliente.Properties.Buttons[0].Visible := True; CodCliente.Properties.ReadOnly := False; CodCliente.Properties.OnValidate := CodClientePropertiesValidate; dsAlmacen.AutoEdit := True; 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 FCodigoProvincia := dmTablaProvincias.darCodigoProvincia(Provincia.Text); try TablaAlmacenes.Open; TablaAlmacenes.FieldByName('PROVINCIA').OnSetText := ProvinciaSetText; if TablaAlmacenes.RecordCount = 0 then begin VerMensajeFmt(msgAlmNoExisteAlm, [CodigoAlmacen]); CancelarModificar; CloseFrame; Exit; end; TablaAlmacenes.Edit; TablaAlmacenes.Post; TablaAlmacenes.Edit; pnlBarraGrid.Visible := True; FTablaObrasPresupuestos.Close; FTablaObrasPresupuestos.CachedUpdates := True; FTablaObrasPresupuestos.ParamByName('CODIGOEMPRESA').AsString := EmpresaActiva.Codigo; FTablaObrasPresupuestos.ParamByName('CODIGOALMACEN').AsString := CodigoAlmacen; FTablaObrasPresupuestos.Prepare; FTablaObrasPresupuestos.Open; ActivarEdicionGridDetalles(gridDetalles); { Inicializar la tabla de detalles } (gridDetalles.ColumnByFieldName('CODIGOPRESUPUESTO') as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonCodigoPresupuestoClick; Visible := True; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : begin VerMensajeFmt(msgAlmBloqueado, [CodigoAlmacen]); CancelarModificar; CloseFrame; Exit; end else TratarExcepcion(E); end; end; on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlmacen.activarModoConsultar; begin CodCliente.Properties.Buttons[0].Visible := False; CodCliente.Properties.ReadOnly := True; CodCliente.Properties.OnValidate := Nil; dsAlmacen.AutoEdit := False; Codigo.Properties.Buttons[0].Visible := True; Codigo.Properties.OnValidate := nil; Provincia.OnExit := nil; Provincia.VerBoton := False; Poblacion.VerBoton := False; try TablaAlmacenes.Open; if TablaAlmacenes.RecordCount = 0 then begin VerMensajeFmt(msgAlmNoExisteAlm, [CodigoAlmacen]); CloseFrame; Exit; end; TablaAlmacenes.Cancel; pnlBarraGrid.Visible := False; FTablaObrasPresupuestos.Close; FTablaObrasPresupuestos.ParamByName('CODIGOEMPRESA').AsString := EmpresaActiva.Codigo; FTablaObrasPresupuestos.ParamByName('CODIGOALMACEN').AsString := CodigoAlmacen; FTablaObrasPresupuestos.Prepare; FTablaObrasPresupuestos.Open; DesactivarEdicionGridDetalles(gridDetalles); { Inicializar la tabla de detalles } (gridDetalles.ColumnByFieldName('CODIGOPRESUPUESTO') as TdxDBTreeListButtonColumn).OnEditButtonClick := Nil; Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlmacen.activarModoEliminar; begin CodCliente.Properties.Buttons[0].Visible := False; CodCliente.Properties.ReadOnly := True; CodCliente.Properties.OnValidate := Nil; dsAlmacen.AutoEdit := False; Codigo.Properties.Buttons[0].Visible := True; Codigo.Properties.OnValidate := nil; Provincia.OnExit := nil; Provincia.VerBoton := False; Poblacion.VerBoton := False; try TablaAlmacenes.Open; if TablaAlmacenes.RecordCount = 0 then begin VerMensajeFmt(msgAlmNoExisteAlm, [CodigoAlmacen]); CancelarEliminar; CloseFrame; Exit; end; TablaAlmacenes.Cancel; pnlBarraGrid.Visible := False; FTablaObrasPresupuestos.Close; FTablaObrasPresupuestos.ParamByName('CODIGOEMPRESA').AsString := EmpresaActiva.Codigo; FTablaObrasPresupuestos.ParamByName('CODIGOALMACEN').AsString := CodigoAlmacen; FTablaObrasPresupuestos.Prepare; FTablaObrasPresupuestos.Open; DesactivarEdicionGridDetalles(gridDetalles); { Inicializar la tabla de detalles } (gridDetalles.ColumnByFieldName('CODIGOPRESUPUESTO') as TdxDBTreeListButtonColumn).OnEditButtonClick := Nil; Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlmacen.ProvinciaButtonClick(Sender: TObject); begin CaptionModal := 'Lista de provincias'; WidthModal := 280; HeightModal := 460; ContenidoModal := TfrProvincias.Create(Self); end; procedure TfrAlmacen.PoblacionButtonClick(Sender: TObject); begin if (VarIsNull(CodigoProvincia)) then begin VerMensaje(msgSinProvincia); Provincia.SetFocus; Exit; end; CaptionModal := Format(msgListaPoblaciones, [Provincia.Text]); WidthModal := 280; HeightModal := 460; ContenidoModal := TfrPoblaciones.Create(Self); end; procedure TfrAlmacen.bAceptarClick(Sender: TObject); begin if (RealizarOperacion) then CloseFrame; end; function TfrAlmacen.CancelarAnadir: Boolean; begin Result := False; try TablaAlmacenes.CancelUpdates; FTablaObrasPresupuestos.CancelUpdates; RollBack; TablaAlmacenes.CachedUpdates := False; TablaAlmacenes.Close; FTablaObrasPresupuestos.CachedUpdates := False; FTablaObrasPresupuestos.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrAlmacen.CancelarEliminar: Boolean; begin Result := False; try RollBack; TablaAlmacenes.Close; FTablaObrasPresupuestos.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrAlmacen.CancelarModificar: Boolean; begin Result := False; try FTablaObrasPresupuestos.CancelUpdates; RollBack; TablaAlmacenes.Close; FTablaObrasPresupuestos.CachedUpdates := False; FTablaObrasPresupuestos.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlmacen.bSalirClick(Sender: TObject); begin try Rollback; CloseFrame; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlmacen.bCancelarGuardarClick(Sender: TObject); begin if (TratarCambios = IDOK) then CloseFrame; end; function TfrAlmacen.CambiarEntidad(EntidadAnterior, Entidad: TRdxEntidad): Boolean; begin { Si se realiza el cambio de entidad en carga del dfm o no se puede cambiar de entidad porque no se puede liberar el contenido del frame al que se cambia de entidad, no se hace nada} if not inherited CambiarEntidad(EntidadAnterior, Entidad) then Exit; ConfigurarFrame(Self, Self.Entidad); with TablaAlmacenes do begin Close; SelectSQL.Assign(dmTablaAlmacenes.sqlConsultar); ModifySQL.Assign(dmTablaAlmacenes.sqlModificar); DeleteSQL.Assign(dmTablaAlmacenes.sqlEliminar); RefreshSQL.Assign(dmTablaAlmacenes.sqlConsultar); Case Entidad of entAlmacenFisico : begin InsertSQL.Assign(dmTablaAlmacenes.sqlInsertarFisicos); pnlListaPresupuestos.Visible := False; end; entAlmacenObra : begin InsertSQL.Assign(dmTablaAlmacenes.sqlInsertarObras); cDatosAlmacen.Caption := 'Datos de obra'; pnlListaPresupuestos.Visible := True; end; end; end; end; function TfrAlmacen.ComprobarDatos: Boolean; var CodigoPedido : String; Situacion : String; begin Result := False; CodigoPedido := ''; Situacion := ''; if Length(Trim(Nombre.Text)) = 0 then begin VerMensaje(msgAlmFaltaNombre); Nombre.SetFocus; Exit; end; if (Modo = Eliminar) then begin if dmTablaAlmacenes.HayExistenciasEnAlmacen(EmpresaActiva.Codigo, CodigoAlmacen) then begin VerMensaje(msgAlmTieneExis); Exit; end; if dmTablaPedidosProveedor.existeAlmacenEnPedido(EmpresaActiva.Codigo, CodigoAlmacen, CodigoPedido, Situacion) then begin if Situacion = 'Totalmente recibido' then VerMensajeFmt(msgAlmCodAlmTienePedido,[CodigoPedido,Situacion]) else VerMensajeFmt(msgAlmCodAlmTienePedidoPendiente,[CodigoPedido,Situacion]); Exit; end; end; Result := True; end; procedure TfrAlmacen.ProvinciaSetText(Sender: TField; const Text: String); begin FCodigoProvincia := dmTablaProvincias.darCodigoProvincia(Text); Sender.AsString := Text; end; procedure TfrAlmacen.CodigoPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); var Valor : Variant; begin if (Modo <> Anadir) or (Visible = false) then exit; if EsCadenaVacia(DisplayValue) then DisplayValue := dmTablaAlmacenes.darNuevoCodigo; if (dmTablaAlmacenes.ValidarCodigo(DisplayValue)) then begin //Comprueba que le numero es lo sufucientemente pequeño para ser un entero if not EsSmallInt(DisplayValue) then begin VerMensajeFmt(msgAlmCodAlmIncorrecto,[DisplayValue]); Codigo.SetFocus; end else if (dmTablaAlmacenes.ExisteAlmacen(EmpresaActiva.Codigo, DisplayValue)) then begin VerMensajeFmt(msgAlmCodAlmRepetido, [DisplayValue]); Codigo.SetFocus; end; end else begin VerMensajeFmt(msgAlmCodAlmIncorrecto, [DisplayValue]); Codigo.SetFocus; end; end; procedure TfrAlmacen.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, FCodigoAlmacen es NULL y da error al activar modo porque no se inicializa los parámetros de la sql. Lo hace BuscarAlmacenes. } if not TablaAlmacenes.Active then BuscarAlmacen; EntidadModal := Entidad; ContenidoModal := TfrAlmacenes.Create(Self); end; procedure TfrAlmacen.CodClientePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); begin inherited; ContenidoModal := TfrClientes.Create(Self); end; procedure TfrAlmacen.CodClientePropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); var Valor : String; begin //Por si se deja vacio el campo if EsCadenaVacia(DisplayValue) then begin limpiarCampos; exit end; if (dmTablaClientes.validarCodigo(DisplayValue)) then //Comprueba que le numero es lo sufucientemente pequeño para ser un entero if not EsInteger(DisplayValue) then begin VerMensajeFmt(msgCliCodCliIncorrecto,[DisplayValue]); CodCliente.Text:= '0'; CodCliente.SetFocus; end else CodigoCliente := dmTablaClientes.formatearCodigo(DisplayValue) else begin VerMensajeFmt(msgCliCodCliIncorrecto, [DisplayValue]); CodCliente.SetFocus; end; end; procedure TfrAlmacen.bAnadirClick(Sender: TObject); begin try with FTablaObrasPresupuestos do begin DisableControls; Next; if EOF then Append else Insert; EnableControls; end; gridDetalles.SetFocus; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlmacen.bEliminarClick(Sender: TObject); begin if (VerMensajePregunta(msgDeseaBorrar) <> IDYES) then Exit; if FTablaObrasPresupuestos.RecordCount = 0 then begin { Hacemos un cancel de la tabla por si el registro actual estuviera recien creado } FTablaObrasPresupuestos.Cancel; exit end; try FTablaObrasPresupuestos.Delete; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlmacen.GridBotonCodigoPresupuestoClick(Sender: TObject); begin // TablaDetallesMem.Edit; WidthModal := 900; HeightModal := 700; ContenidoModal := TfrPresupuestosClientes.Create(Self); end; procedure TfrAlmacen.SetCodigoPresupuesto(const Value: Variant); begin FCodigoPresupuesto := Value; FTablaObrasPresupuestos.Edit; FTablaObrasPresupuestos.FieldByName('CODIGOPRESUPUESTO').AsString := FCodigoPresupuesto; FTablaObrasPresupuestos.FieldByName('CODIGOALMACEN').AsString := TablaAlmacenes.FieldByName('CODIGO').AsString; FTablaObrasPresupuestos.FieldByName('CODIGOEMPRESA').AsString := EmpresaActiva.Codigo; end; procedure TfrAlmacen.bElminarTodoClick(Sender: TObject); begin if (VerMensajePregunta(msgDeseaBorrarTodo) <> IDYES) then Exit; try FTablaObrasPresupuestos.DisableControls; FTablaObrasPresupuestos.Last; while FTablaObrasPresupuestos.RecordCount > 0 do begin FTablaObrasPresupuestos.Delete; FTablaObrasPresupuestos.Prior; end; FTablaObrasPresupuestos.EnableControls; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlmacen.limpiarCampos; begin CodCliente.DataBinding.Field.asString := ''; NifCifCliente.Field.asString := ''; NomCliente.Field.asString := ''; Calle.Field.asString := ''; Numero.Field.asString := ''; Piso.Field.asString := ''; Provincia.Field.asString := ''; CodigoPostal.Field.asString := ''; Poblacion.Field.asString := ''; Telefono.Field.asString := ''; end; end.