{ =============================================================================== 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 AlbaranProveedor; 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 TfrAlbaranProveedor = 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; RdxPanel1: TRdxPanel; Paginas: TRdxPagesControl; pagCliente: TTabSheet; pnlCliente: TRdxPanel; eCodigoProveedor: TLabel; eNIFCIF: TLabel; eNombre: TLabel; eDireccion: TLabel; eNumero: TLabel; ePiso: TLabel; ePoblacion: TLabel; eCodigoPostal: TLabel; eProvincia: TLabel; ePersona: TLabel; eTelefono1: TLabel; eFax: TLabel; NIF: TRdxDBEdit; Nombre: TRdxDBEdit; Calle: TRdxDBEdit; Numero: TRdxDBEdit; Piso: TRdxDBEdit; Poblacion: TRdxDBEdit; CodigoPostal: TRdxDBEdit; Provincia: TRdxDBEdit; PersonaContacto: TRdxDBEdit; Telefono: TRdxDBEdit; Fax: TRdxDBEdit; pagContenido: TTabSheet; pnlGridArticulos: TPanel; dsAlbaran: TDataSource; dsDetallesAlbaran: TDataSource; pnlBarraGrid: TRdxPanel; bAnadir: TRdxBoton; bEliminar: TRdxBoton; bEliminarTodo: TRdxBoton; pagImportes: TTabSheet; pnlImporteAlbaran: TRdxPanel; Label4: TLabel; eDto: TLabel; eIVA: TLabel; Label6: TLabel; Shape1: TShape; BaseImponible: TRdxDBEdit; Descuento: TRdxDBEdit; IVA: TRdxDBEdit; ImporteTotal: TRdxDBEdit; ImporteDescuento: TRdxDBEdit; ImporteIVA: TRdxDBEdit; gridDetalles: TdxDBGrid; FechaAlta: TcxDBDateEdit; CodProveedor: TcxDBButtonEdit; procedure CodigoButtonClick(Sender: TObject); procedure CodigoExit(Sender: TObject); procedure ProvinciaButtonClick(Sender: TObject); procedure PoblacionButtonClick(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 CodProveedorPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure CodProveedorPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); private FCodigoProvincia : Variant; FCodigoPoblacion : Variant; FCodigoProveedor : Variant; FCodigoArticulo : Variant; FTablaDetallesMem : TRxMemoryData; procedure CalcularTotalDetalle; procedure CalcularTotalAlbaran; procedure ActivarEventosCampos; procedure BorrarDetalles; procedure BorrarDetallesIB; procedure SalvarDetalles; procedure CargarDetalles; procedure DetalleAfterDelete (DataSet: TDataSet); procedure IVASetText(Sender: TField; const Text: String); procedure DtoSetText(Sender: TField; const Text: String); 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 SetCodigoProveedor (Value : Variant); procedure SetCodigoArticulo (Value : Variant); procedure FreeContenido; override; procedure BuscarAlbaran; override; public property CodigoProvincia : Variant read FCodigoProvincia write SetCodigoProvincia; property CodigoPoblacion : Variant read FCodigoPoblacion write SetCodigoPoblacion; property CodigoProveedor : Variant read FCodigoProveedor write SetCodigoProveedor; 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 ProvinciaSetText(Sender: TField; const Text: String); procedure GridBotonCodigoArticuloClick(Sender: TObject); procedure CodigoArticuloDetalleSetText(Sender: TField; const Text: String); procedure DtoDetalleSetText(Sender: TField; const Text: String); procedure CantidadDetalleSetText(Sender: TField; const Text: String); procedure PrecioDetalleSetText(Sender: TField; const Text: String); procedure GridBotonDescripcionClick(Sender: TObject); end; var frAlbaranProveedor: TfrAlbaranProveedor; implementation {$R *.DFM} uses TablaAlbaranesProveedor, BaseDatos, IB, StrFunc, Mensajes, NumFunc, TablaArticulos, TablaProveedores, TablaProvincias, TablaPoblaciones, RdxFrameArticulos, RdxFrameProveedores, RdxFrameProvincias, RdxFramePoblaciones, AlbaranesProveedores, Articulos, IBCustomDataSet, Proveedores, Provincias, Poblaciones, Excepciones, IBErrorCodes, dxDBTLCL, EditorDescripcion, RdxEmpresaActiva, Literales, ArticulosFabPro; { TfrAlbaranCliente } procedure TfrAlbaranProveedor.ActivarModoAnadir; var CodNuevo : Variant; begin dsAlbaran.AutoEdit := True; dsDetallesAlbaran.AutoEdit := True; Codigo.VerBoton := False; Codigo.ReadOnly := False; CodProveedor.Properties.Buttons[0].Visible := True; CodProveedor.Properties.OnValidate := CodProveedorPropertiesValidate; Provincia.VerBoton := True; Poblacion.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 := dmTablaAlbaranesProveedor.DarNuevoCodigo; with TablaAlbaranes do begin CachedUpdates := True; Prepare; Open; FieldByName('PROVINCIA').OnSetText := ProvinciaSetText; 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; dmTablaAlbaranesProveedor.InicializarTablaAlbaranes(@TablaAlbaranes); dmTablaAlbaranesProveedor.InicializarTablaDetalles(@TablaDetallesMem); Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranProveedor.ActivarModoConsultar; begin dsAlbaran.AutoEdit := False; dsDetallesAlbaran.AutoEdit := False; Codigo.VerBoton := True; CodProveedor.Properties.Buttons[0].Visible := False; CodProveedor.Properties.OnValidate := nil; Provincia.VerBoton := False; Poblacion.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; dmTablaAlbaranesProveedor.InicializarTablaAlbaranes(@TablaAlbaranes); dmTablaAlbaranesProveedor.InicializarTablaDetalles(@TablaDetallesMem); Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranProveedor.ActivarModoEliminar; begin dsAlbaran.AutoEdit := False; dsDetallesAlbaran.AutoEdit := False; Codigo.VerBoton := True; CodProveedor.Properties.Buttons[0].Visible := False; CodProveedor.Properties.OnValidate := nil; Provincia.VerBoton := False; Poblacion.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; dmTablaAlbaranesProveedor.InicializarTablaAlbaranes(@TablaAlbaranes); dmTablaAlbaranesProveedor.InicializarTablaDetalles(@TablaDetallesMem); Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranProveedor.ActivarModoModificar; begin dsAlbaran.AutoEdit := True; dsDetallesAlbaran.AutoEdit := True; Codigo.VerBoton := True; Codigo.ReadOnly := True; CodProveedor.Properties.Buttons[0].Visible := True; CodProveedor.Properties.OnValidate := CodProveedorPropertiesValidate; Provincia.VerBoton := True; Poblacion.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; TablaAlbaranes.FieldByName('PROVINCIA').OnSetText := ProvinciaSetText; 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; CalcularTotalAlbaran; end; dmTablaAlbaranesProveedor.InicializarTablaAlbaranes(@TablaAlbaranes); dmTablaAlbaranesProveedor.InicializarTablaDetalles(@TablaDetallesMem); 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 TfrAlbaranProveedor.AnadirDatos: Boolean; var NumConcepto : Integer; begin Result := False; try CalcularTotalAlbaran; NumConcepto := 0; TablaAlbaranes.Post; TablaAlbaranes.ApplyUpdates; BorrarDetallesIB; SalvarDetalles; dmTablaAlbaranesProveedor.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 TfrAlbaranProveedor.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; dmTablaAlbaranesProveedor.InicializarTablaAlbaranes(@TablaAlbaranes); dmTablaAlbaranesProveedor.InicializarTablaDetalles(@TablaDetallesMem); TablaAlbaranes.EnableControls; TablaDetallesMem.EnableControls; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranProveedor.CalcularTotalAlbaran; var BaseImponible, ImporteIVA, ImporteDto, ImporteTotal : Double; FDetallesBookmark : string; begin BaseImponible := 0; ImporteTotal := 0; with TablaDetallesMem do begin DisableControls; FDetallesBookmark := Bookmark; try First; while not EOF do begin BaseImponible := BaseImponible + FieldByName('TOTAL').AsFloat; Next; end; ImporteDto := BaseImponible * (TablaAlbaranes.FieldByName('DESCUENTO').AsFloat/100); ImporteTotal := BaseImponible - ImporteDto; ImporteIVA := ImporteTotal * (TablaAlbaranes.FieldByName('IVA').AsFloat/100); ImporteTotal := ImporteTotal + ImporteIVA; TablaAlbaranes.FieldByName('BASEIMPONIBLE').AsFloat := BaseImponible; TablaAlbaranes.FieldByName('IMPORTEDESCUENTO').AsFloat := ImporteDto; TablaAlbaranes.FieldByName('IMPORTEIVA').AsFloat := ImporteIVA; TablaAlbaranes.FieldByName('IMPORTETOTAL').AsFloat := ImporteTotal; finally Bookmark := FDetallesBookmark; EnableControls; end; end; end; procedure TfrAlbaranProveedor.CalcularTotalDetalle; var auxCantidad, auxPrecio, auxTotal : double; begin with TablaDetallesMem do begin auxCantidad := FieldByName('CANTIDAD').AsFloat; auxPrecio := FieldByName('PRECIOUNIDAD').AsFloat; auxTotal := auxCantidad * auxPrecio; FieldByName('TOTAL').AsFloat := auxTotal; end; end; function TfrAlbaranProveedor.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 TfrAlbaranProveedor.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 TfrAlbaranProveedor.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 TfrAlbaranProveedor.CantidadDetalleSetText(Sender: TField; const Text: String); begin try if EsCadenaVacia(Text) then Sender.AsString := '1' else Sender.AsString := Text; CalcularTotalDetalle; CalcularTotalAlbaran; except on E : EConvertError do VerMensaje(msgCantidadNoValida); on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranProveedor.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 TfrAlbaranProveedor.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); Paginas.ActivePageIndex := 0; Nombre.SetFocus; Exit; end; if TablaDetallesMem.IsEmpty then begin VerMensaje(msgAlbFaltaArticulos); Paginas.ActivePageIndex := 1; gridDetalles.SetFocus; Exit end; Result := True; end; constructor TfrAlbaranProveedor.Create(AOwner: TComponent); begin inherited Create(AOwner); FCodigoProvincia := NULL; FCodigoPoblacion := NULL; FCodigoProveedor := NULL; FCodigoArticulo := NULL; Entidad := entAlbaranProveedor; 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(dmTablaAlbaranesProveedor.sqlConsultarAlbaran); InsertSQL.Assign(dmTablaAlbaranesProveedor.sqlInsertarAlbaran); ModifySQL.Assign(dmTablaAlbaranesProveedor.sqlModificarAlbaran); DeleteSQL.Assign(dmTablaAlbaranesProveedor.sqlEliminarAlbaran); end; with TablaDetallesAlbaranes do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaAlbaranesProveedor.sqlConsultarGridDetalles); InsertSQL.Assign(dmTablaAlbaranesProveedor.sqlInsertarDetalles); ModifySQL.Assign(dmTablaAlbaranesProveedor.sqlModificarDetalles); DeleteSQL.Assign(dmTablaAlbaranesProveedor.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; dmTablaAlbaranesProveedor.InicializarGridDetalles(gridDetalles); Paginas.ActivePage := pagCliente; end; destructor TfrAlbaranProveedor.Destroy; begin gridDetalles.DataSource := NIL; TablaDetallesMem.Close; TablaDetallesMem.Free; TablaAlbaranes.Close; TablaAlbaranes.UnPrepare; TablaAlbaranes.Free; TablaDetallesAlbaranes.Close; TablaDetallesAlbaranes.Unprepare; TablaDetallesAlbaranes.Free; inherited; end; procedure TfrAlbaranProveedor.DtoDetalleSetText(Sender: TField; const Text: String); begin try if EsCadenaVacia(Text) then Sender.AsString := '0' else begin ValidarDto(Text); Sender.AsString := Text; end; CalcularTotalDetalle; CalcularTotalAlbaran; except on E : EConvertError do VerMensaje(msgDtoNoValido); on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrAlbaranProveedor.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 TfrAlbaranProveedor.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 TRdxFrameProveedores) then CodigoProveedor := (ContenidoModal as TRdxFrameProveedores).CodigoProveedor; 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 TfrAlbaranProveedor.GridBotonCodigoArticuloClick(Sender: TObject); begin TablaDetallesMem.Edit; WidthModal := 1000; HeightModal := 700; ContenidoModal := TfrArticulosFabPro.Create(Self); end; function TfrAlbaranProveedor.ModificarDatos: Boolean; begin Result := False; try CalcularTotalAlbaran; 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 TfrAlbaranProveedor.PrecioDetalleSetText(Sender: TField; const Text: String); begin if EsCadenaVacia(Text) then Sender.AsString := '0' else Sender.AsString := Text; CalcularTotalDetalle; CalcularTotalAlbaran; end; procedure TfrAlbaranProveedor.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; FieldByName('PRECIOUNIDAD').AsString := DatosArticulo.Precio; FieldByName('TOTAL').AsString := DatosArticulo.Precio; Post; end; FCodigoArticulo := Value; CalcularTotalAlbaran; end else raise Exception.CreateFmt(msgArtCodArtNoExiste, [Value]); finally DatosArticulo.Free; end; end; procedure TfrAlbaranProveedor.SetCodigoProveedor(Value: Variant); var DatosProveedor : TDatosProveedor; begin if VarIsNull(Value) then exit; FCodigoProveedor := Value; DatosProveedor := TDatosProveedor.Create; try DatosProveedor.Codigo := FCodigoProveedor; dmTablaProveedores.darDatosProveedor(DatosProveedor); CodProveedor.DataBinding.Field.AsString := DatosProveedor.Codigo; NIF.Field.AsString := DatosProveedor.Nifcif; Nombre.Field.AsString := DatosProveedor.Nombre; PersonaContacto.Field.AsString := DatosProveedor.PersonaContacto; Telefono.Field.AsString := DatosProveedor.Telefono1; Fax.Field.AsString := DatosProveedor.Fax; Calle.Field.AsString := DatosProveedor.Calle; Numero.Field.AsString := DatosProveedor.Numero; Piso.Field.AsString := DatosProveedor.Piso; CodigoPostal.Field.AsString := DatosProveedor.CodigoPostal; Poblacion.Field.AsString := DatosProveedor.Poblacion; Provincia.Field.AsString := DatosProveedor.Provincia; FCodigoProvincia := dmTablaProvincias.darCodigoProvincia(DatosProveedor.Provincia); CalcularTotalAlbaran; finally DatosProveedor.Free; end; end; procedure TfrAlbaranProveedor.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 TfrAlbaranProveedor.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 TfrAlbaranProveedor.VerModal; begin if (ContenidoModal is TRdxFramePoblaciones) then (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia := CodigoProvincia; 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 TfrAlbaranProveedor.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 := TfrAlbaranesProveedores.Create(Self); end; procedure TfrAlbaranProveedor.CodigoExit(Sender: TObject); begin if (Modo <> Anadir) or (Visible = false) then Exit; if EsCadenaVacia(Codigo.Text) then Codigo.Field.AsString := dmTablaAlbaranesProveedor.darNuevoCodigo; if (dmTablaAlbaranesProveedor.validarCodigo(Codigo.Text)) then begin Codigo.Field.asString := dmTablaAlbaranesProveedor.formatearCodigo(Codigo.Text); if (dmTablaAlbaranesProveedor.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 TfrAlbaranProveedor.ProvinciaButtonClick(Sender: TObject); begin CaptionModal := 'Lista de provincias'; WidthModal := 280; HeightModal := 460; ContenidoModal := TfrProvincias.Create(Self); end; procedure TfrAlbaranProveedor.PoblacionButtonClick(Sender: TObject); begin if (VarIsNull(CodigoProvincia)) then begin VerMensaje(msgSinProvincia); Paginas.ActivePageIndex := 0; Provincia.SetFocus; Exit; end; CaptionModal := Format(msgListaPoblaciones, [dmTablaProvincias.darNombreProvincia(CodigoProvincia)]); WidthModal := 280; HeightModal := 460; ContenidoModal := TfrPoblaciones.Create(Self); end; procedure TfrAlbaranProveedor.bAnadirClick(Sender: TObject); begin try with TablaDetallesMem do begin DisableControls; Next; if EOF then Append else Insert; EnableControls; end; Paginas.ActivePage := pagContenido; gridDetalles.SetFocus; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranProveedor.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; CalcularTotalAlbaran; end; procedure TfrAlbaranProveedor.bEliminarTodoClick(Sender: TObject); begin if (VerMensajePregunta(msgDeseaBorrarTodo) <> IDYES) then Exit; BorrarDetalles; CalcularTotalAlbaran; end; procedure TfrAlbaranProveedor.bSalirClick(Sender: TObject); begin try Rollback; CloseFrame; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrAlbaranProveedor.bGuardarClick(Sender: TObject); begin if (RealizarOperacion) then CloseFrame; end; procedure TfrAlbaranProveedor.bCancelarClick(Sender: TObject); begin if (TratarCambios = IDOK) then CloseFrame; end; procedure TfrAlbaranProveedor.ActivarEventosCampos; begin with TablaAlbaranes do begin FieldByName('IVA').OnSetText := IVASetText; FieldByName('DESCUENTO').OnSetText := DtoSetText; end; with TablaDetallesMem do begin FieldByName('CODIGOARTICULO').OnSetText := CodigoArticuloDetalleSetText; FieldByName('CANTIDAD').OnSetText := CantidadDetalleSetText; FieldByName('PRECIOUNIDAD').OnSetText := PrecioDetalleSetText; AfterDelete := DetalleAfterDelete; end; end; procedure TfrAlbaranProveedor.DetalleAfterDelete(DataSet: TDataSet); begin CalcularTotalAlbaran; end; procedure TfrAlbaranProveedor.BorrarDetalles; begin with TablaDetallesMem do begin DisableControls; EmptyTable; EnableControls; end; end; procedure TfrAlbaranProveedor.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 TfrAlbaranProveedor.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 TfrAlbaranProveedor.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 TfrAlbaranProveedor.DtoSetText(Sender: TField; const Text: String); begin if EsCadenaVacia(Text) then Sender.AsString := '0' else begin ValidarDto(Text); Sender.AsString := Text; end; CalcularTotalAlbaran; end; procedure TfrAlbaranProveedor.IVASetText(Sender: TField; const Text: String); begin if EsCadenaVacia(Text) then Sender.AsString := '0' else begin ValidarIVA(Text); Sender.AsString := Text; end; CalcularTotalAlbaran; end; procedure TfrAlbaranProveedor.GridBotonDescripcionClick(Sender: TObject); begin TablaDetallesMem.Edit; WidthModal := 420; HeightModal := 435; ModoModal := Modo; ContenidoModal := TfrEditorDescripcion.Create(Self); end; procedure TfrAlbaranProveedor.ProvinciaSetText(Sender: TField; const Text: String); begin FCodigoProvincia := dmTablaProvincias.darCodigoProvincia(Text); Sender.AsString := Text; end; procedure TfrAlbaranProveedor.CodProveedorPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin if not (Modo in [Anadir, Modificar]) then Exit; if EsCadenaVacia(DisplayValue) then Exit; 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]); DisplayValue := '0'; CodProveedor.SetFocus; end else begin DisplayValue := dmTablaProveedores.FormatearCodigo(DisplayValue); if (dmTablaProveedores.ExisteCodigo(DisplayValue)) then CodigoProveedor := DisplayValue else begin VerMensajeFmt(msgProCodProvNoExiste, [DisplayValue]); Paginas.ActivePageIndex := 0; CodProveedor.SetFocus; end; end; end else begin VerMensajeFmt(msgProCodProvIncorrecto, [CodProveedor.Text]); Paginas.ActivePageIndex := 0; CodProveedor.SetFocus; end; end; procedure TfrAlbaranProveedor.CodProveedorPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin ContenidoModal := TfrProveedores.Create(Self); end; end.