{ =============================================================================== 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: 04-10-2004 Versión actual: 1.0.0 Fecha versión actual: 04-10-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- =============================================================================== } unit AlbaranInstalador; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, RdxFrameAlbaranes, Grids, DBGrids, RdxBotones, RdxTitulos, StdCtrls, RdxMemo, RdxCampos, ExtCtrls, Tipos, RxMemDS, RdxComboBox, RdxPaneles, RdxBarras, RXDBCtrl, ComCtrls, Configuracion, dxCntner, dxEditor, dxExEdtr, dxEdLib, dxDBELib, Db, dxTL, dxDBCtrl, dxDBGrid, RdxPageControl, cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit, cxCalendar, cxDBEdit, cxButtonEdit; type TfrAlbaranInstalador = class(TRdxFrameAlbaranes) brSalir: TRdxBarraInferior; bSalir: TRdxBoton; brGuardar: TRdxBarraInferior; bGuardar: TRdxBoton; bCancelar: TRdxBoton; pnlScroll: TRdxScrollPanel; pnlAlbaran: TRdxPanel; cDatosAlbaran: TRdxCabecera; eCodigo: TLabel; Codigo: TRdxDBEdit; eFechaAlta: TLabel; eUsuario: TLabel; Usuario: TRdxDBEdit; pnlTitulo: TRdxPanelTituloOperacion; dsAlbaran: TDataSource; dsDetallesAlbaran: TDataSource; FechaAlta: TcxDBDateEdit; eNombre: TLabel; Nombre: TRdxDBEdit; eTelefono1: TLabel; Telefono: TRdxDBEdit; CodInstalador: TcxDBButtonEdit; pnlGridArticulos: TPanel; pnlBarraGrid: TRdxPanel; bAnadir: TRdxBoton; bEliminar: TRdxBoton; bEliminarTodo: TRdxBoton; gridDetalles: TdxDBGrid; pnlImporteAlbaran: TRdxPanel; procedure CodigoButtonClick(Sender: TObject); procedure CodigoExit(Sender: TObject); procedure bAnadirClick(Sender: TObject); procedure bEliminarClick(Sender: TObject); procedure bEliminarTodoClick(Sender: TObject); procedure bSalirClick(Sender: TObject); procedure bGuardarClick(Sender: TObject); procedure bCancelarClick(Sender: TObject); procedure NombreButtonClick(Sender: TObject); procedure NombreExit(Sender: TObject); private FCodigoInstalador : Variant; FCodigoArticulo : Variant; FTablaDetallesMem : TRxMemoryData; procedure ActivarEventosCampos; procedure BorrarDetalles; procedure BorrarDetallesIB; procedure SalvarDetalles; procedure CargarDetalles; 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 SetCodigoInstalador (Value : Variant); procedure SetCodigoArticulo (Value : Variant); procedure FreeContenido; override; procedure BuscarAlbaran; override; public property CodigoInstalador : Variant read FCodigoInstalador write SetCodigoInstalador; property CodigoArticulo : Variant read FCodigoArticulo write SetCodigoArticulo; constructor Create (AOwner : TComponent); override; destructor Destroy; override; published property TablaAlbaranes; property TablaDetallesAlbaranes; property TablaDetallesMem : TRxMemoryData read FTablaDetallesMem write FTablaDetallesMem; property CodigoAlbaran; procedure GridBotonCodigoArticuloClick(Sender: TObject); procedure CodigoArticuloDetalleSetText(Sender: TField; const Text: String); procedure CantidadDetalleSetText(Sender: TField; const Text: String); procedure GridBotonDescripcionClick(Sender: TObject); end; var frAlbaranInstalador: TfrAlbaranInstalador; implementation {$R *.DFM} uses TablaAlbaranesInstalador, BaseDatos, IB, StrFunc, Mensajes, NumFunc, TablaArticulos, TablaInstaladores, RdxFrameArticulos, RdxFrameInstaladores, AlbaranesInstaladores, Articulos, IBCustomDataSet, Instaladores, Excepciones, IBErrorCodes, dxDBTLCL, EditorDescripcion, RdxEmpresaActiva, Literales, ArticulosFabPro; { TfrAlbaranCliente } procedure TfrAlbaranInstalador.ActivarModoAnadir; var CodNuevo : Variant; begin dsAlbaran.AutoEdit := True; dsDetallesAlbaran.AutoEdit := True; Nombre.VerBoton := True; ActivarEdicionGridDetalles(gridDetalles); (gridDetalles.ColumnByFieldName('CODIGOARTICULO') as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonCodigoArticuloClick; (gridDetalles.ColumnByFieldName('DESCRIPCION') as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonDescripcionClick; pnlBarraGrid.Visible := True; try { Antes de aplicar la caché hay que asegurarse de que la tabla está cerrada. } TablaAlbaranes.DisableControls; { Inicializar la tabla de albaranes } TablaAlbaranes.Close; CodNuevo := dmTablaAlbaranesInstalador.DarNuevoCodigo; with TablaAlbaranes do begin CachedUpdates := True; Prepare; Open; EnableControls; Insert; FieldByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; end; Codigo.Field.asString := CodNuevo; FechaAlta.DataBinding.Field.AsString := DateToStr(Date); Usuario.Field.AsString := dmBaseDatos.Usuario; { Inicializar la tabla de detalles } with TablaDetallesAlbaranes do begin Close; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGOALBARAN').AsString := CodNuevo; Prepare; Open; end; with TablaDetallesMem do begin Close; Open; ActivarEventosCampos; end; dmTablaAlbaranesInstalador.InicializarTablaAlbaranes(@TablaAlbaranes); Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranInstalador.ActivarModoConsultar; begin dsAlbaran.AutoEdit := False; dsDetallesAlbaran.AutoEdit := False; Nombre.VerBoton := False; DesactivarEdicionGridDetalles(gridDetalles); (gridDetalles.ColumnByFieldName('CODIGOARTICULO') as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL; (gridDetalles.ColumnByFieldName('DESCRIPCION') as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL; pnlBarraGrid.Visible := False; try TablaAlbaranes.Prepare; TablaAlbaranes.Open; if TablaAlbaranes.RecordCount = 0 then begin VerMensajeFmt(msgAlbNoExisteAlb, [CodigoAlbaran]); CloseFrame; Exit; end; TablaAlbaranes.Cancel; with TablaDetallesAlbaranes do begin Close; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Params.ByName('CODIGOALBARAN').AsString := CodigoAlbaran; Prepare; Open; Cancel; end; with TablaDetallesMem do begin Close; Open; Cancel; CargarDetalles; end; dmTablaAlbaranesInstalador.InicializarTablaAlbaranes(@TablaAlbaranes); Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranInstalador.ActivarModoEliminar; begin dsAlbaran.AutoEdit := False; dsDetallesAlbaran.AutoEdit := False; Nombre.VerBoton := False; DesactivarEdicionGridDetalles(gridDetalles); (gridDetalles.ColumnByFieldName('CODIGOARTICULO') as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL; (gridDetalles.ColumnByFieldName('DESCRIPCION') as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL; pnlBarraGrid.Visible := False; try TablaAlbaranes.Prepare; TablaAlbaranes.Open; if TablaAlbaranes.RecordCount = 0 then begin VerMensajeFmt(msgAlbNoExisteAlb, [CodigoAlbaran]); CancelarEliminar; CloseFrame; Exit; end; TablaAlbaranes.Cancel; with TablaDetallesAlbaranes do begin Close; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Params.ByName('CODIGOALBARAN').AsString := CodigoAlbaran; Prepare; Open; Cancel; end; with TablaDetallesMem do begin Close; Open; Cancel; CargarDetalles; end; dmTablaAlbaranesInstalador.InicializarTablaAlbaranes(@TablaAlbaranes); Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranInstalador.ActivarModoModificar; begin dsAlbaran.AutoEdit := True; dsDetallesAlbaran.AutoEdit := True; Nombre.VerBoton := True; ActivarEdicionGridDetalles(gridDetalles); (gridDetalles.ColumnByFieldName('CODIGOARTICULO') as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonCodigoArticuloClick; (gridDetalles.ColumnByFieldName('DESCRIPCION') as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonDescripcionClick; pnlBarraGrid.Visible := True; try { Antes de aplicar la caché hay que asegurarse de que la tabla está cerrada. } TablaAlbaranes.Prepare; TablaAlbaranes.Open; if TablaAlbaranes.RecordCount = 0 then begin VerMensajeFmt(msgAlbNoExisteAlb, [CodigoAlbaran]); CancelarModificar; CloseFrame; Exit; end; TablaAlbaranes.Edit; TablaAlbaranes.Post; TablaAlbaranes.Edit; with TablaDetallesAlbaranes do begin Close; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Params.ByName('CODIGOALBARAN').AsString := CodigoAlbaran; Prepare; Open; end; with TablaDetallesMem do begin Close; Open; CargarDetalles; ActivarEventosCampos; end; dmTablaAlbaranesInstalador.InicializarTablaAlbaranes(@TablaAlbaranes); Visible := True; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : begin VerMensajeFmt(msgAlbBloqueado, [CodigoAlbaran]); CancelarModificar; CloseFrame; Exit; end else TratarExcepcion(E); end; end; on E : Exception do TratarExcepcion(E); end; end; function TfrAlbaranInstalador.AnadirDatos: Boolean; var NumConcepto : Integer; begin Result := False; try NumConcepto := 0; TablaAlbaranes.Post; TablaAlbaranes.ApplyUpdates; BorrarDetallesIB; SalvarDetalles; dmTablaAlbaranesInstalador.IncrementarCodigo; FCodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString; Commit; TablaAlbaranes.Close; TablaDetallesAlbaranes.Close; TablaDetallesMem.Close; TablaAlbaranes.CachedUpdates := False; Result := True; except on E : EIBError do begin if E.IBErrorCode = isc_unique_key_violation then begin VerMensajeFmt(msgAlbCodAlbRepetido, [Codigo.Field.AsString]); TablaAlbaranes.Edit; end else TratarExcepcion(E); end; on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranInstalador.BuscarAlbaran; begin if Transaccion = NIL then exit; try TablaAlbaranes.DisableControls; TablaDetallesMem.DisableControls; TablaAlbaranes.Close; TablaDetallesAlbaranes.Close; // Buscar la fila a tratar si es necesario if not VarIsNull(FCodigoAlbaran) then begin TablaAlbaranes.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; TablaAlbaranes.ParamByName('CODIGO').AsString := FCodigoAlbaran; TablaDetallesAlbaranes.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; TablaDetallesAlbaranes.ParamByName('CODIGOALBARAN').AsString := FCodigoAlbaran; end; TablaAlbaranes.Prepare; TablaAlbaranes.Open; TablaDetallesAlbaranes.Prepare; TablaDetallesAlbaranes.Open; TablaDetallesMem.Close; TablaDetallesMem.Open; BorrarDetalles; CargarDetalles; dmTablaAlbaranesInstalador.InicializarTablaAlbaranes(@TablaAlbaranes); TablaAlbaranes.EnableControls; TablaDetallesMem.EnableControls; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrAlbaranInstalador.CancelarAnadir: Boolean; begin Result := False; try TablaDetallesMem.Close; TablaAlbaranes.Close; TablaDetallesAlbaranes.Close; TablaAlbaranes.CancelUpdates; RollBack; TablaAlbaranes.CachedUpdates := False; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrAlbaranInstalador.CancelarEliminar: Boolean; begin Result := False; try TablaDetallesMem.Close; TablaAlbaranes.Close; TablaDetallesAlbaranes.Close; RollBack; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrAlbaranInstalador.CancelarModificar: Boolean; begin Result := False; try TablaDetallesMem.Close; TablaAlbaranes.Close; TablaDetallesAlbaranes.Close; RollBack; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranInstalador.CantidadDetalleSetText(Sender: TField; const Text: String); begin try if EsCadenaVacia(Text) then Sender.AsString := '1' else Sender.AsString := Text; except on E : EConvertError do VerMensaje(msgCantidadNoValida); on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranInstalador.CodigoArticuloDetalleSetText(Sender: TField; const Text: String); var Codigo : String; begin if (EsCadenaVacia(Text)) then begin Sender.AsString := ''; exit; end; Codigo := Trim(Text); if (dmTablaArticulos.validarCodigo(Codigo)) then Codigo := dmTablaArticulos.formatearCodigo(Codigo) else raise Exception.CreateFmt(msgArtCodArtIncorrecto, [Codigo]); Sender.AsString := Codigo; CodigoArticulo := Codigo; end; function TfrAlbaranInstalador.ComprobarDatos: Boolean; begin Result := False; if EsCadenaVacia(FechaAlta.DataBinding.Field.AsString) then begin VerMensaje(msgAlbFaltaFechaAlta); FechaAlta.SetFocus; Exit; end; if EsCadenaVacia(Nombre.Field.AsString) then begin VerMensaje(msgAlbFaltaNombreCli); Nombre.SetFocus; Exit; end; if TablaDetallesMem.IsEmpty then begin VerMensaje(msgAlbFaltaArticulos); gridDetalles.SetFocus; Exit end; Result := True; end; constructor TfrAlbaranInstalador.Create(AOwner: TComponent); begin inherited Create(AOwner); FCodigoInstalador := NULL; FCodigoArticulo := NULL; Entidad := entAlbaranInstalador; ConfigurarFrame(Self, Self.Entidad); BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; Transaccion.DefaultDatabase := BaseDatos; TablaAlbaranes := TIBDataSet.Create(Self); TablaDetallesAlbaranes := TIBDataSet.Create(Self); TablaDetallesMem := TRxMemoryData.Create(Self); dsAlbaran.DataSet := TablaAlbaranes; dsDetallesAlbaran.DataSet := TablaDetallesMem; with TablaAlbaranes do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaAlbaranesInstalador.sqlConsultarAlbaran); InsertSQL.Assign(dmTablaAlbaranesInstalador.sqlInsertarAlbaran); ModifySQL.Assign(dmTablaAlbaranesInstalador.sqlModificarAlbaran); DeleteSQL.Assign(dmTablaAlbaranesInstalador.sqlEliminarAlbaran); end; with TablaDetallesAlbaranes do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaAlbaranesInstalador.sqlConsultarGridDetalles); InsertSQL.Assign(dmTablaAlbaranesInstalador.sqlInsertarDetalles); ModifySQL.Assign(dmTablaAlbaranesInstalador.sqlModificarDetalles); DeleteSQL.Assign(dmTablaAlbaranesInstalador.sqlEliminarDetalles); end; try TablaDetallesMem.CopyStructure(TablaDetallesAlbaranes); TablaDetallesMem.FieldByName('CODIGOEMPRESA').Required := False; TablaDetallesMem.FieldByName('CODIGOALBARAN').Required := False; TablaDetallesMem.FieldByName('NUMCONCEPTO').Required := False; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; dmTablaAlbaranesInstalador.InicializarGridDetalles(gridDetalles); end; destructor TfrAlbaranInstalador.Destroy; begin gridDetalles.DataSource := NIL; TablaDetallesMem.Close; TablaDetallesMem.Free; TablaAlbaranes.Close; TablaAlbaranes.UnPrepare; TablaAlbaranes.Free; TablaDetallesAlbaranes.Close; TablaDetallesAlbaranes.Unprepare; TablaDetallesAlbaranes.Free; inherited; end; function TfrAlbaranInstalador.EliminarDatos: Boolean; begin Result := False; try TablaAlbaranes.Delete; Commit; BorrarDetalles; TablaAlbaranes.Close; TablaDetallesAlbaranes.Close; TablaDetallesMem.Close; Result := True; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : VerMensajeFmt(msgAlbBloqueado, [Codigo.Field.AsString]); else TratarExcepcion(E); end; end; on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranInstalador.FreeContenido; var Contador : integer; ListaCodigos : TStringList; begin if (ContenidoModal is TRdxFrameAlbaranes) then begin CodigoAlbaran := (ContenidoModal as TRdxFrameAlbaranes).CodigoAlbaran; ActivarModo; end; if (ContenidoModal is TRdxFrameArticulos) then begin ListaCodigos := (ContenidoModal as TRdxFrameArticulos).ListaArticulos; for Contador := 0 to ListaCodigos.Count - 1 do begin CodigoArticulo := ListaCodigos.Strings[Contador]; bAnadirClick(Self); end; TablaDetallesMem.Cancel; end; if (ContenidoModal is TfrEditorDescripcion) then begin TablaDetallesMem.FieldByName('DESCRIPCION').AsString := (ContenidoModal as TfrEditorDescripcion).Texto; TablaDetallesMem.Post; TablaDetallesMem.Edit; end; if (ContenidoModal is TRdxFrameInstaladores) then CodigoInstalador := (ContenidoModal as TRdxFrameInstaladores).CodigoInstalador; inherited FreeContenido; end; procedure TfrAlbaranInstalador.GridBotonCodigoArticuloClick(Sender: TObject); begin TablaDetallesMem.Edit; WidthModal := 1000; HeightModal := 700; ContenidoModal := TfrArticulosFabPro.Create(Self); end; function TfrAlbaranInstalador.ModificarDatos: Boolean; begin Result := False; try TablaAlbaranes.Post; BorrarDetallesIB; SalvarDetalles; Commit; TablaAlbaranes.Close; TablaDetallesAlbaranes.Close; TablaDetallesMem.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranInstalador.SetCodigoArticulo(Value: Variant); var DatosArticulo : TDatosArticulo; begin if VarIsNull(Value) then exit; if Value = '' then exit; DatosArticulo := TDatosArticulo.Create; DatosArticulo.Codigo := Value; try if dmTablaArticulos.darDatosArticulo(DatosArticulo) then begin with TablaDetallesMem do begin Edit; FieldByName('CODIGOARTICULO').AsString := DatosArticulo.Codigo; FieldByName('DESCRIPCION').AsString := DatosArticulo.Descripcion; FieldByName('CANTIDAD').AsString := '1'; FieldByName('UNIDADESMEDIDA').AsString := DatosArticulo.Unidadesmedida; Post; end; FCodigoArticulo := Value; end else raise Exception.CreateFmt(msgArtCodArtNoExiste, [Value]); finally DatosArticulo.Free; end; end; procedure TfrAlbaranInstalador.SetCodigoInstalador(Value: Variant); var DatosInstalador : TDatosInstalador; begin if VarIsNull(Value) then exit; FCodigoInstalador := Value; DatosInstalador := TDatosInstalador.Create; try DatosInstalador.Codigo := FCodigoInstalador; dmTablaInstaladores.darDatosInstalador(DatosInstalador); CodInstalador.DataBinding.Field.AsString := DatosInstalador.Codigo; Nombre.Field.AsString := DatosInstalador.Nombre; Telefono.Field.AsString := DatosInstalador.Telefono1; finally DatosInstalador.Free; end; end; procedure TfrAlbaranInstalador.VerModal; begin if (ContenidoModal is TRdxFrameArticulos) then (ContenidoModal as TRdxFrameArticulos).CodigoArticulo := CodigoArticulo; if (ContenidoModal is TfrEditorDescripcion) then (ContenidoModal as TfrEditorDescripcion).Texto := TablaDetallesMem.FieldByName('DESCRIPCION').AsString; inherited; end; procedure TfrAlbaranInstalador.CodigoButtonClick(Sender: TObject); 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, FCodigoAlbaran es NULL y da error al activar modo porque no se inicializa los parámetros de la sql. Lo hace BuscarAlbaran. } if not TablaAlbaranes.Active then BuscarAlbaran; ContenidoModal := TfrAlbaranesInstaladores.Create(Self); end; procedure TfrAlbaranInstalador.CodigoExit(Sender: TObject); begin if (Modo <> Anadir) or (Visible = false) then Exit; if EsCadenaVacia(Codigo.Text) then Codigo.Field.AsString := dmTablaAlbaranesInstalador.darNuevoCodigo; if (dmTablaAlbaranesInstalador.validarCodigo(Codigo.Text)) then begin Codigo.Field.asString := dmTablaAlbaranesInstalador.formatearCodigo(Codigo.Text); if (dmTablaAlbaranesInstalador.ExisteCodigo(EmpresaActiva.Codigo, Codigo.Text)) then begin VerMensajeFmt(msgAlbCodAlbRepetido, [Codigo.Text]); Codigo.SetFocus; end; end else begin VerMensajeFmt(msgAlbCodAlbIncorrecto, [Codigo.Text]); Codigo.SetFocus; end; end; procedure TfrAlbaranInstalador.bAnadirClick(Sender: TObject); begin try with TablaDetallesMem 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 TfrAlbaranInstalador.bEliminarClick(Sender: TObject); begin if (VerMensajePregunta(msgDeseaBorrar) <> IDYES) then Exit; if TablaDetallesMem.RecordCount = 0 then begin { Hacemos un cancel de la tabla por si el registro actual estuviera recien creado } TablaDetallesMem.Cancel; Exit end; try TablaDetallesMem.Delete; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranInstalador.bEliminarTodoClick(Sender: TObject); begin if (VerMensajePregunta(msgDeseaBorrarTodo) <> IDYES) then Exit; BorrarDetalles; end; procedure TfrAlbaranInstalador.bSalirClick(Sender: TObject); begin try Rollback; CloseFrame; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranInstalador.bGuardarClick(Sender: TObject); begin if (RealizarOperacion) then CloseFrame; end; procedure TfrAlbaranInstalador.bCancelarClick(Sender: TObject); begin if (TratarCambios = IDOK) then CloseFrame; end; procedure TfrAlbaranInstalador.ActivarEventosCampos; begin with TablaDetallesMem do begin FieldByName('CODIGOARTICULO').OnSetText := CodigoArticuloDetalleSetText; FieldByName('CANTIDAD').OnSetText := CantidadDetalleSetText; end; end; procedure TfrAlbaranInstalador.BorrarDetalles; begin with TablaDetallesMem do begin DisableControls; EmptyTable; EnableControls; end; end; procedure TfrAlbaranInstalador.BorrarDetallesIB; begin with TablaDetallesAlbaranes do begin if IsEmpty then Exit; DisableControls; Last; while not BOF do begin Delete; Prior; end; if not IsEmpty then Delete; EnableControls; end; end; procedure TfrAlbaranInstalador.CargarDetalles; var NumeroCampo : Integer; begin with TablaDetallesMem do begin if TablaDetallesAlbaranes.IsEmpty then Exit; DisableControls; TablaDetallesAlbaranes.First; while not TablaDetallesAlbaranes.EOF do begin Append; for NumeroCampo := 0 to TablaDetallesAlbaranes.FieldCount-1 do Fields[NumeroCampo].AsString := TablaDetallesAlbaranes.Fields[NumeroCampo].AsString; Post; TablaDetallesAlbaranes.Next; end; EnableControls; end; end; procedure TfrAlbaranInstalador.SalvarDetalles; var NumeroCampo : Integer; NumConcepto : Integer; begin try with TablaDetallesMem do begin if IsEmpty then Exit; NumConcepto := 0; DisableControls; First; while not EOF do begin TablaDetallesAlbaranes.Append; for NumeroCampo := 0 to FieldCount-1 do begin if Fields[NumeroCampo].FieldName = 'CODIGOEMPRESA' then TablaDetallesAlbaranes.Fields[NumeroCampo].AsInteger := EmpresaActiva.Codigo else begin if Fields[NumeroCampo].FieldName = 'CODIGOALBARAN' then TablaDetallesAlbaranes.Fields[NumeroCampo].AsString := Codigo.Field.AsString else if Fields[NumeroCampo].FieldName = 'NUMCONCEPTO' then TablaDetallesAlbaranes.Fields[NumeroCampo].AsInteger := NumConcepto else TablaDetallesAlbaranes.Fields[NumeroCampo].AsString := Fields[NumeroCampo].AsString; end; end; TablaDetallesAlbaranes.Post; Next; NumConcepto := NumConcepto + 1; end; EnableControls; end; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranInstalador.GridBotonDescripcionClick(Sender: TObject); begin TablaDetallesMem.Edit; WidthModal := 420; HeightModal := 435; ModoModal := Modo; ContenidoModal := TfrEditorDescripcion.Create(Self); end; procedure TfrAlbaranInstalador.NombreButtonClick(Sender: TObject); begin ContenidoModal := TfrInstaladores.Create(Self); end; procedure TfrAlbaranInstalador.NombreExit(Sender: TObject); begin if not (Modo in [Anadir, Modificar]) then Exit; // if EsCadenaVacia( ) then // Exit; { if (dmTablaInstaladores.ValidarCodigo(DisplayValue)) then begin //Comprueba que le numero es lo sufucientemente pequeño para ser un entero if not EsInteger(DisplayValue) then begin VerMensajeFmt(msgInsCodInsIncorrecto,[DisplayValue]); DisplayValue := '0'; CodInstalador.SetFocus; end else begin DisplayValue := dmTablaInstaladores.FormatearCodigo(DisplayValue); if (dmTablaInstaladores.ExisteCodigo(DisplayValue)) then CodigoInstalador := DisplayValue else begin VerMensajeFmt(msgProCodProvNoExiste, [DisplayValue]); Paginas.ActivePageIndex := 0; CodInstalador.SetFocus; end; end; end else begin VerMensajeFmt(msgProCodProvIncorrecto, [CodInstalador.Text]); Paginas.ActivePageIndex := 0; CodInstalador.SetFocus; end; } end; end.