{ =============================================================================== 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.2.5 Fecha versión actual: 12-10-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 06-10-2001 Se ha reestructurado la pantalla en pestañas. 08-10-2001 Se ha añadido en la entidad modal la entidad entAlmacen en el botonClick de código de almacen de pedido de proveedor. 21-10-2001 Al pasar del modo Consultar/Eliminar a Añadir/Modificar no se activaban algunos botones con lupa. 27-10-2001 Se ha arreglado un fallo que al añadir un concepto estando en la última fila lo hacia por encima del registro, no por debajo. 29-10-2001 Cuando se elimina un concepto con hay que volver a recalcular el importe total del pedido. 30-10-2001 En el grid del contenido del pedido añadir una columna para la unidad de medida. Si se introduce un material que existe en la aplicación, esa columna se rellena con la unidad de medida del material. Si se introduce un concepto libre, el usuario puede meter lo que quiera. 04-11-2001 Es obligatorio introducir un código de almacén en el pedido. 08-11-2001 Se han pasado los detalles a una tabla de memoria. 12-11-2001 Cuando se crea un pedido, en 'Notas' debe aparecer por defecto 'Fecha de entrega: inmediata'. Se guarda en la constante 'msgNotaPorDefecto'. 08-01-2002 El literal de las notas se pasa a mayúsculas: 'FECHA DE ENTREGA: INMEDIATA.' 12-01-2002 Añadido el cliente final a los pedidos de proveedor. 18-01-2002 No se copia la persona de contacto del almacen/obra. 22-01-2002 Se permite modificar un pedido parcialmente recibido. 07-02-2002 Desactivada la opción de 'CancelOnExit' del grid. 24-02-2002 En la ventana modal de artículos seleccionar, si es posible, la fila con el último material seleccionado. 02-03-2002 En el contenido se pueden añadir muchos materiales a la vez. 07-04-2002 Se ha adaptado para la transacción única. 04-05-2002 Adaptación al grid 'TdxDBGrid'. 05-05-2002 En el procedimiento 'SetCodigoArticulo' no se daba un mensaje de error cuando el artículo no existía. 13-05-2002 Inclusión de linea de relleno del combo de instaladores. 19-08-2002 Se ha modificado la propiedad 'field' que apuntaba el campo 'PersonaContactoAlmacen'. 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. 21-08-2002 P238. Revisar el grid de los detalles para que se pueda borrar un código de artículo cuando ya se ha introducido. 23-08-2002 Se ha modificado el metodo buscarpedido para que cuando se lea un pedido que posee una persona de contacto que no existe en la lista de instaladores lo agrege a la lista del combo y lo seleccione. 14-09-2002 Para la persona de contacto del almacén se permite escribir texto libre aunque no esté en la lista desplegable. 14-09-2002 P242. Sacar una ventana modal para editar el texto de un concepto. 24-09-2002 Se producía una excepción si el cursos estaba en el código del pedido, 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. 08-03-2003 Se han puesto componentes con calendario. 07-03-2004 p272. Adaptación a multiempresa. 12-10-2004 p290. Precio coste de una obra =============================================================================== } unit PedidoProveedor; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, RdxFramePedidosProveedor, RxMemDS, Configuracion, dxCntner, dxTL, dxDBCtrl, dxDBGrid, dxDBTLCL, RdxBarras, RdxBotones, ExtCtrls, RdxCampos, StdCtrls, RdxMemo, RdxComboBox, RdxTitulos, ComCtrls, RdxPageControl, RdxPaneles, dxEditor, dxExEdtr, dxDBEdtr, dxDBELib, dxEdLib, cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit, cxCalendar, cxDBEdit, cxButtonEdit; type TfrPedidoProveedor = class(TRdxFramePedidosProveedor) pnlScroll: TRdxScrollPanel; pnlPedido: TRdxPanel; cDatosPedido: TRdxCabecera; eCodPedido: TLabel; Codigo: TRdxDBEdit; eFechaAlta: TLabel; eSituacion: TLabel; Situacion: TRdxDBComboBox; eFechaEmision: TLabel; eRecepcion: TLabel; eRealizadoPor: TLabel; eDescripcion: TLabel; Usuario: TRdxDBEdit; dsDetallesPedidos: TDataSource; Notas: TRdxDBMemo; brDoble: TRdxBarraInferior; bAceptar: TRdxBoton; bCancelarGuardar: TRdxBoton; brSimple: TRdxBarraInferior; bSalir: TRdxBoton; Titulo: TRdxPanelTituloOperacion; dsPedido: TDataSource; pnlPaginas: TRdxPanel; Paginas: TRdxPagesControl; pagProveedor: TTabSheet; pagDestino: TTabSheet; pagContenido: TTabSheet; pnlProveedor: TRdxPanel; eCodigo: TLabel; eNIF: TLabel; eNombre: TLabel; ePersonaProveedor: TLabel; eFax: TLabel; eCodigoAsignado: TLabel; NIF: TRdxDBEdit; Nombre: TRdxDBEdit; PersonaContacto: TRdxDBEdit; Fax: TRdxDBEdit; CodigoCliente: TRdxDBEdit; pnlDestinoPedido: TRdxPanel; eCodAlmacen: TLabel; ePersona: TLabel; eNombreAlmacen: TLabel; eDireccion: TLabel; eNumero: TLabel; ePiso: TLabel; eProvincia: TLabel; eCodigoPostal: TLabel; ePoblacion: TLabel; NombreAlmacen: TRdxDBEdit; CalleAlmacen: TRdxDBEdit; NumeroAlmacen: TRdxDBEdit; PisoAlmacen: TRdxDBEdit; ProvinciaAlmacen: TRdxDBEdit; CodigoPostalAlmacen: TRdxDBEdit; PoblacionAlmacen: TRdxDBEdit; eImporteTotal: TLabel; ImporteTotal: TRdxDBEdit; pnlGridArticulos: TPanel; pnlBarraGrid: TRdxPanel; bAnadir: TRdxBoton; bEliminar: TRdxBoton; bElminarTodo: TRdxBoton; RdxPanel1: TRdxPanel; RdxCabecera1: TRdxCabecera; Label4: TLabel; Label5: TLabel; NombreClienteFinal: TRdxDBEdit; RdxCabecera2: TRdxCabecera; PersonaContactoAlmacen: TdxDBPickEdit; FechaAlta: TcxDBDateEdit; FechaEmision: TcxDBDateEdit; Recepcion: TcxDBDateEdit; CodProveedor: TcxDBButtonEdit; CodAlmacen: TcxDBButtonEdit; CodClienteFinal: TcxDBButtonEdit; gridDetalles: TdxDBGrid; procedure bAceptarClick(Sender: TObject); procedure bSalirClick(Sender: TObject); procedure bCancelarClick(Sender: TObject); procedure bAnadirClick(Sender: TObject); procedure CodigoExit(Sender: TObject); procedure bEliminarClick(Sender: TObject); procedure bElminarTodoClick(Sender: TObject); procedure ProvinciaAlmacenButtonClick(Sender: TObject); procedure PoblacionAlmacenButtonClick(Sender: TObject); procedure ProvinciaAlmacenExit(Sender: TObject); procedure CodigoButtonClick(Sender: TObject); procedure CodProveedorPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure CodProveedorPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure CodAlmacenPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure CodAlmacenPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure CodClienteFinalPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure CodClienteFinalPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure gridDetallesChangeNode(Sender: TObject; OldNode, Node: TdxTreeListNode); private FImporteTotal : Double; FCodigoProvincia : Variant; FCodigoPoblacion : Variant; FCodigoProveedor : Variant; FCodigoAlmacenAux : Variant; FCodigoAlmacen : Variant; FCodigoObra : Variant; FCodigoArticulo : Variant; FTablaDetallesMem : TRxMemoryData; procedure CalcularTotalDetalle; procedure CalcularTotalPedido; procedure ActivarEventosCampos; procedure BorrarDetalles; procedure BorrarDetallesIB; procedure SalvarDetalles; procedure CargarDetalles; procedure DetalleAfterDelete (DataSet: TDataSet); procedure DetalleAfterEdit (DataSet: TDataSet); 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 SetCodigoAlmacen (Value : Variant); procedure SetCodigoObra (Value : Variant); procedure SetCodigoProveedor (Value : Variant); procedure SetCodigoArticulo (Value : Variant); procedure FreeContenido; override; procedure BuscarPedido; override; public property CodigoAlmacen : Variant read FCodigoAlmacen write SetCodigoAlmacen; property CodigoObra : Variant read FCodigoObra write SetCodigoObra; 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 TablaPedidosProveedor; property TablaDetallesPedidos; property TablaDetallesMem : TRxMemoryData read FTablaDetallesMem write FTablaDetallesMem; property CodigoPedido; 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 frPedidoProveedor: TfrPedidoProveedor; implementation uses PedidosProveedores, BaseDatos, TablaPedidosProveedor, Almacenes, IBDatabase, Mensajes, Proveedores, RdxFrameProvincias, RdxFramePoblaciones, TablaProvincias, Provincias, Poblaciones, TablaProveedores, RdxFrameProveedores, IBCustomDataSet, IB, Articulos, TablaAlmacenes, RdxFrameAlmacenes, RdxFrameArticulos, TablaArticulos, Tipos, StrFunc, EditorDescripcion, TablaPoblaciones, Excepciones, IBErrorCodes, TablaInstaladores, TablaClientes, RdxEmpresaActiva, Literales, NumFunc, ArticulosFabPro; {$R *.DFM} constructor TfrPedidoProveedor.Create(AOwner : TComponent); begin inherited Create(AOwner); FCodigoProvincia := NULL; FCodigoPoblacion := NULL; FCodigoProveedor := NULL; FCodigoAlmacen := NULL; FCodigoObra := NULL; FCodigoAlmacenAux := NULL; FCodigoArticulo := NULL; Entidad := entPedidoProveedor; ConfigurarFrame(Self, Self.Entidad); BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaPedidosProveedor := TIBDataSet.Create(Self); TablaDetallesPedidos := TIBDataSet.Create(Self); TablaDetallesMem := TRxMemoryData.Create(Self); dsPedido.DataSet := TablaPedidosProveedor; dsDetallesPedidos.DataSet := TablaDetallesMem; with TablaPedidosProveedor do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaPedidosProveedor.sqlConsultarPedido); InsertSQL.Assign(dmTablaPedidosProveedor.sqlInsertarPedido); ModifySQL.Assign(dmTablaPedidosProveedor.sqlModificarPedido); DeleteSQL.Assign(dmTablaPedidosProveedor.sqlEliminarPedido); end; with TablaDetallesPedidos do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaPedidosProveedor.sqlConsultarGridDetalles); InsertSQL.Assign(dmTablaPedidosProveedor.sqlInsertarDetalles); ModifySQL.Assign(dmTablaPedidosProveedor.sqlModificarDetalles); DeleteSQL.Assign(dmTablaPedidosProveedor.sqlEliminarDetalles); end; try TablaDetallesMem.CopyStructure(TablaDetallesPedidos); TablaDetallesMem.FieldByName('CODIGOEMPRESA').Required := False; TablaDetallesMem.FieldByName('CODIGOPEDIDO').Required := False; TablaDetallesMem.FieldByName('NUMCONCEPTO').Required := False; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; dmTablaPedidosProveedor.InicializarGridDetalles(gridDetalles); Situacion.Items := dmTablaPedidosProveedor.darSituaciones; PersonaContactoAlmacen.Items := dmTablaInstaladores.darInstaladores; Paginas.ActivePage := pagProveedor; end; procedure TfrPedidoProveedor.ActivarModoAnadir; var CodNuevo : Variant; begin FImporteTotal := 0; dsPedido.AutoEdit := True; dsDetallesPedidos.AutoEdit := True; Codigo.VerBoton := False; Codigo.ReadOnly := False; CodProveedor.Properties.Buttons[0].Visible := True; CodProveedor.Properties.OnValidate := CodProveedorPropertiesValidate; CodAlmacen.Properties.Buttons[0].Visible := True; CodAlmacen.Properties.OnValidate := CodAlmacenPropertiesValidate; ProvinciaAlmacen.VerBoton := True; PoblacionAlmacen.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. } TablaPedidosProveedor.DisableControls; { Inicializar la tabla de pedidos } TablaPedidosProveedor.Close; CodNuevo := dmTablaPedidosProveedor.darNuevoCodigo; with TablaPedidosProveedor do begin CachedUpdates := True; Prepare; Open; EnableControls; Insert; FieldByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; end; Codigo.Field.asString := CodNuevo; FechaAlta.DataBinding.Field.AsString := DateToStr(Date); Situacion.Field.AsString := Situacion.Items.Strings[0]; Usuario.Field.AsString := dmBaseDatos.Usuario; Notas.Field.AsString := msgPedProvNotaPorDef; { Inicializar la tabla de detalles } with TablaDetallesPedidos do begin Close; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Params.ByName('CODIGOPEDIDO').AsString := CodNuevo; Prepare; Open; end; with TablaDetallesMem do begin Close; Open; ActivarEventosCampos; end; dmTablaPedidosProveedor.InicializarTablaPedidos(@TablaPedidosProveedor); dmTablaPedidosProveedor.InicializarTablaDetalles(@TablaDetallesMem); Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrPedidoProveedor.ActivarModoConsultar; begin dsPedido.AutoEdit := False; dsDetallesPedidos.AutoEdit := False; Codigo.VerBoton := True; CodProveedor.Properties.Buttons[0].Visible := False; CodProveedor.Properties.OnValidate := nil; CodAlmacen.Properties.Buttons[0].Visible := False; CodAlmacen.Properties.OnValidate := nil; ProvinciaAlmacen.VerBoton := False; PoblacionAlmacen.VerBoton := False; DesactivarEdicionGridDetalles(gridDetalles); (gridDetalles.ColumnByFieldName('CODIGOARTICULO') as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL; (gridDetalles.ColumnByFieldName('DESCRIPCION') as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL; pnlBarraGrid.Visible := False; try TablaPedidosProveedor.Prepare; TablaPedidosProveedor.Open; if TablaPedidosProveedor.RecordCount = 0 then begin VerMensajeFmt(msgPedPedProvNoExiste, [CodigoPedido]); CloseFrame; Exit; end; TablaPedidosProveedor.Cancel; with TablaDetallesPedidos do begin Close; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Params.ByName('CODIGOPEDIDO').AsString := CodigoPedido; Prepare; Open; Cancel; end; with TablaDetallesMem do begin Close; Open; Cancel; CargarDetalles; end; dmTablaPedidosProveedor.InicializarTablaPedidos(@TablaPedidosProveedor); dmTablaPedidosProveedor.InicializarTablaDetalles(@TablaDetallesMem); Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrPedidoProveedor.ActivarModoEliminar; begin dsPedido.AutoEdit := False; dsDetallesPedidos.AutoEdit := False; Codigo.VerBoton := True; CodProveedor.Properties.Buttons[0].Visible := False; CodProveedor.Properties.OnValidate := nil; CodAlmacen.Properties.Buttons[0].Visible := False; CodAlmacen.Properties.OnValidate := nil; ProvinciaAlmacen.VerBoton := False; PoblacionAlmacen.VerBoton := False; DesactivarEdicionGridDetalles(gridDetalles); (gridDetalles.ColumnByFieldName('CODIGOARTICULO') as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL; (gridDetalles.ColumnByFieldName('DESCRIPCION') as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL; pnlBarraGrid.Visible := False; try TablaPedidosProveedor.Prepare; TablaPedidosProveedor.Open; if TablaPedidosProveedor.RecordCount = 0 then begin VerMensajeFmt(msgPedPedProvNoExiste, [CodigoPedido]); CancelarEliminar; CloseFrame; Exit; end; TablaPedidosProveedor.Cancel; with TablaDetallesPedidos do begin Close; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Params.ByName('CODIGOPEDIDO').AsString := CodigoPedido; Prepare; Open; end; with TablaDetallesMem do begin Close; Open; Cancel; CargarDetalles; end; dmTablaPedidosProveedor.InicializarTablaPedidos(@TablaPedidosProveedor); dmTablaPedidosProveedor.InicializarTablaDetalles(@TablaDetallesMem); Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrPedidoProveedor.ActivarModoModificar; begin dsPedido.AutoEdit := True; dsDetallesPedidos.AutoEdit := True; Codigo.VerBoton := True; Codigo.ReadOnly := True; CodProveedor.Properties.Buttons[0].Visible := True; CodProveedor.Properties.OnValidate := CodProveedorPropertiesValidate; CodAlmacen.Properties.Buttons[0].Visible := True; CodAlmacen.Properties.OnValidate := CodAlmacenPropertiesValidate; ProvinciaAlmacen.VerBoton := True; PoblacionAlmacen.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. } TablaPedidosProveedor.Prepare; TablaPedidosProveedor.Open; FImporteTotal := TablaPedidosProveedor.FieldByName('IMPORTETOTAL').AsFloat; if TablaPedidosProveedor.RecordCount = 0 then begin VerMensajeFmt(msgPedPedProvNoExiste, [CodigoPedido]); CancelarModificar; CloseFrame; Exit; end; TablaPedidosProveedor.Edit; TablaPedidosProveedor.Post; TablaPedidosProveedor.Edit; with TablaDetallesPedidos do begin Close; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Params.ByName('CODIGOPEDIDO').AsString := CodigoPedido; Prepare; Open; end; with TablaDetallesMem do begin Close; Open; CargarDetalles; ActivarEventosCampos; end; dmTablaPedidosProveedor.InicializarTablaPedidos(@TablaPedidosProveedor); dmTablaPedidosProveedor.InicializarTablaDetalles(@TablaDetallesMem); Visible := True; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : begin VerMensajeFmt(msgPedProvBloqueado, [CodigoPedido]); CancelarModificar; CloseFrame; Exit; end else TratarExcepcion(E); end; end; on E : Exception do TratarExcepcion(E); end; end; destructor TfrPedidoProveedor.Destroy; begin gridDetalles.DataSource := NIL; TablaDetallesMem.Close; TablaDetallesMem.Free; TablaPedidosProveedor.Close; TablaPedidosProveedor.UnPrepare; TablaPedidosProveedor.Free; TablaDetallesPedidos.Close; TablaDetallesPedidos.Unprepare; TablaDetallesPedidos.Free; Transaccion := NIL; inherited; end; procedure TfrPedidoProveedor.bAceptarClick(Sender: TObject); begin if (RealizarOperacion) then CloseFrame; end; function TfrPedidoProveedor.AnadirDatos : boolean; begin Result := False; try CalcularTotalPedido; TablaPedidosProveedor.Post; TablaPedidosProveedor.ApplyUpdates; BorrarDetallesIB; SalvarDetalles; dmTablaPedidosProveedor.incrementarCodigo; FCodigoPedido := TablaPedidosProveedor.FieldByName('CODIGO').AsString; Commit; TablaPedidosProveedor.CachedUpdates := False; Result := True; except on E : EIBError do begin if E.IBErrorCode = isc_unique_key_violation then begin VerMensajeFmt(msgPedCodPedRepetido, [Codigo.Field.AsString]); TablaPedidosProveedor.Edit; end else TratarExcepcion(E); end; on E : Exception do TratarExcepcion(E); end; end; function TfrPedidoProveedor.EliminarDatos : boolean; begin Result := False; try TablaPedidosProveedor.Delete; Commit; BorrarDetalles; Result := True; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : VerMensajeFmt(msgPedProvBloqueado, [Codigo.Field.AsString]); else TratarExcepcion(E); end; end; on E : Exception do TratarExcepcion(E); end; end; function TfrPedidoProveedor.ModificarDatos : boolean; begin Result := False; try CalcularTotalPedido; TablaPedidosProveedor.Post; BorrarDetallesIB; SalvarDetalles; Commit; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrPedidoProveedor.bSalirClick(Sender: TObject); begin try Rollback; CloseFrame; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrPedidoProveedor.bCancelarClick(Sender: TObject); begin if (TratarCambios = IDOK) then CloseFrame; end; procedure TfrPedidoProveedor.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 TfrPedidoProveedor.CodigoExit(Sender: TObject); begin inherited; if (Modo <> Anadir) or (Visible = false) then exit; if (Length(Codigo.Text) = 0) then Codigo.Field.AsString := dmTablaPedidosProveedor.darNuevoCodigo; if (dmTablaPedidosProveedor.ValidarCodigo(Codigo.Text)) then begin Codigo.Field.asString := dmTablaPedidosProveedor.formatearCodigo(Codigo.Text); if (dmTablaPedidosProveedor.ExisteCodigo(EmpresaActiva.Codigo, Codigo.Text)) then begin VerMensajeFmt(msgPedCodPedRepetido, [Codigo.Text]); Codigo.SetFocus; end; end else begin VerMensajeFmt(msgPedCodPedIncorrecto, [Codigo.Text]); Codigo.SetFocus; end; end; procedure TfrPedidoProveedor.BuscarPedido; var lsCampo : String; liIndex : integer; begin if Transaccion = NIL then exit; try TablaPedidosProveedor.DisableControls; TablaDetallesMem.DisableControls; TablaPedidosProveedor.Close; TablaDetallesPedidos.Close; // Buscar la fila a tratar si es necesario if not VarIsNull(FCodigoPedido) then begin TablaPedidosProveedor.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; TablaPedidosProveedor.Params.ByName('CODIGO').AsString := FCodigoPedido; TablaDetallesPedidos.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; TablaDetallesPedidos.Params.ByName('CODIGOPEDIDO').AsString := FCodigoPedido; end; TablaPedidosProveedor.Prepare; TablaPedidosProveedor.Open; TablaDetallesPedidos.Prepare; TablaDetallesPedidos.Open; TablaDetallesMem.Close; TablaDetallesMem.Open; BorrarDetalles; CargarDetalles; dmTablaPedidosProveedor.InicializarTablaPedidos(@TablaPedidosProveedor); dmTablaPedidosProveedor.InicializarTablaDetalles(@TablaDetallesMem); TablaPedidosProveedor.EnableControls; TablaDetallesMem.EnableControls; //Para que cuando se lea un pedido que posee una persona de contacto que no existe //en la lista de instaladores lo agrege a la lista del combo y lo seleccione lsCampo := TablaPedidosProveedor.FieldByName('PERSONACONTACTOALMACEN').AsString; liIndex := PersonaContactoAlmacen.Items.IndexOf(lsCampo); //Si no existe la persona de contacto la agrego if (liIndex = -1) then PersonaContactoAlmacen.Items.Add(lsCampo); //Hago que se seleccione PersonaContactoAlmacen.ItemIndex := PersonaContactoAlmacen.Items.IndexOf(lsCampo); except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrPedidoProveedor.CancelarAnadir: Boolean; begin Result := False; try TablaDetallesMem.Close; TablaPedidosProveedor.CancelUpdates; RollBack; TablaPedidosProveedor.CachedUpdates := False; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrPedidoProveedor.CancelarEliminar: Boolean; begin Result := False; try TablaDetallesMem.Close; RollBack; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrPedidoProveedor.CancelarModificar: Boolean; begin Result := False; try TablaDetallesMem.Close; TablaPedidosProveedor.Close; TablaDetallesPedidos.Close; RollBack; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrPedidoProveedor.FreeContenido; var Contador : integer; ListaCodigos : TStringList; ListaCodProveedores : TStringList; ListaCodFabricantes : TStringList; ListaPrecios : TStringList; begin if (ContenidoModal is TRdxFramePedidosProveedor) then begin CodigoPedido := (ContenidoModal as TRdxFramePedidosProveedor).CodigoPedido; ActivarModo; end; if (ContenidoModal is TRdxFrameArticulos) then begin ListaCodigos := (ContenidoModal as TRdxFrameArticulos).ListaArticulos; ListaPrecios := (ContenidoModal as TfrArticulosFabPro).ListaPrecios; ListaCodProveedores := (ContenidoModal as TfrArticulosFabPro).ListaCodArtPro; ListaCodFabricantes := (ContenidoModal as TfrArticulosFabPro).ListaCodArtFab; for Contador := 0 to ListaCodigos.Count - 1 do begin CodigoArticulo := ListaCodigos.Strings[Contador]; // Añadimos el código de proveedor y precio del articulo seleccionado TablaDetallesMem.Edit; if esCadenaVacia(ListaCodProveedores.Strings[Contador]) then TablaDetallesMem.FieldByName('REFPROVEEDOR').AsString := '0' else TablaDetallesMem.FieldByName('REFPROVEEDOR').AsString := ListaCodProveedores.Strings[Contador]; if esCadenaVacia(ListaCodFabricantes.Strings[Contador]) then TablaDetallesMem.FieldByName('REFFABRICANTE').AsString := '0' else TablaDetallesMem.FieldByName('REFFABRICANTE').AsString := ListaCodFabricantes.Strings[Contador]; if esCadenaVacia(ListaPrecios.Strings[Contador]) then TablaDetallesMem.FieldByName('PRECIO').AsString := '0' else TablaDetallesMem.FieldByName('PRECIO').AsString := ListaPrecios.Strings[Contador]; TablaDetallesMem.Post; 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 TRdxFrameAlmacenes) then FCodigoAlmacenAux := (ContenidoModal as TRdxFrameAlmacenes).CodigoAlmacen; 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 TfrPedidoProveedor.SetCodigoPoblacion(Value: Variant); begin if (not VarIsNull(FCodigoPoblacion)) and (FCodigoPoblacion = Value) then exit; if (not VarIsNull(Value)) then begin FCodigoPoblacion := Value; PoblacionAlmacen.Field.AsString := dmTablaPoblaciones.darNombrePoblacion(FCodigoProvincia, FCodigoPoblacion); end; end; procedure TfrPedidoProveedor.SetCodigoProveedor(Value: Variant); var DatosProveedor : TDatosProveedor; begin if VarIsNull(Value) then exit; if FCodigoProveedor = 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; CodigoCliente.Field.AsString := dmTablaProveedores.darCodigoClienteProveedor(DatosProveedor.Codigo); Nombre.Field.AsString := DatosProveedor.Nombre; PersonaContacto.Field.AsString := DatosProveedor.PersonaContacto; Fax.Field.AsString := DatosProveedor.Fax; finally DatosProveedor.Free; end; end; procedure TfrPedidoProveedor.SetCodigoProvincia(Value: Variant); begin if (not VarIsNull(FCodigoProvincia)) and (FCodigoProvincia = Value) then exit; if (not VarIsNull(Value)) then begin FCodigoProvincia := Value; ProvinciaAlmacen.Field.AsString := dmTablaProvincias.darNombreProvincia(FCodigoProvincia); end; end; procedure TfrPedidoProveedor.VerModal; begin if (ContenidoModal is TRdxFramePoblaciones) then (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia := CodigoProvincia; if (ContenidoModal is TRdxFrameAlmacenes) then (ContenidoModal as TRdxFrameAlmacenes).Visible := True; if (ContenidoModal is TRdxFrameArticulos) then (ContenidoModal as TRdxFrameArticulos).CodigoArticulo := CodigoArticulo; if (ContenidoModal is TfrEditorDescripcion) then (ContenidoModal as TfrEditorDescripcion).Texto := TablaDetallesMem.FieldByName('DESCRIPCION').AsString; if (ContenidoModal is TfrArticulosFabPro) then (ContenidoModal as TfrArticulosFabPro).NombreProveedor := TablaPedidosProveedor.FieldByName('NOMBRE').AsString; inherited; end; procedure TfrPedidoProveedor.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 TfrPedidoProveedor.bElminarTodoClick(Sender: TObject); begin if (VerMensajePregunta(msgDeseaBorrarTodo) <> IDYES) then Exit; BorrarDetalles; CalcularTotalPedido; end; procedure TfrPedidoProveedor.ProvinciaAlmacenButtonClick(Sender: TObject); begin CaptionModal := 'Lista de provincias'; WidthModal := 280; HeightModal := 460; ContenidoModal := TfrProvincias.Create(Self); end; procedure TfrPedidoProveedor.PoblacionAlmacenButtonClick(Sender: TObject); begin if (VarIsNull(CodigoProvincia)) then begin VerMensaje(msgSinProvincia); Paginas.ActivePage := pagDestino; ProvinciaAlmacen.SetFocus; Exit; end; CaptionModal := Format(msgListaPoblaciones, [dmTablaProvincias.darNombreProvincia(CodigoProvincia)]); WidthModal := 280; HeightModal := 460; ContenidoModal := TfrPoblaciones.Create(Self); end; procedure TfrPedidoProveedor.ProvinciaAlmacenExit(Sender: TObject); begin if not (Modo in [Anadir, Modificar]) then Exit; ProvinciaAlmacen.Field.AsString := UpperCase(ProvinciaAlmacen.Text); FCodigoProvincia := dmTablaProvincias.darCodigoProvincia(ProvinciaAlmacen.Text); end; procedure TfrPedidoProveedor.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, FCodigoPedido es NULL y da error al activar modo porque no se inicializa los parámetros de la sql. Lo hace BuscarPedido. } if not TablaPedidosProveedor.Active then BuscarPedido; ContenidoModal := TfrPedidosProveedores.Create(Self); end; procedure TfrPedidoProveedor.GridBotonCodigoArticuloClick(Sender: TObject); begin if EsCadenaVacia(CodProveedor.DataBinding.Field.AsString) then begin VerMensaje(msgPedFaltaNombreProv); Paginas.ActivePage := pagProveedor; CodProveedor.SetFocus; Exit; end; TablaDetallesMem.Edit; WidthModal := 1000; HeightModal := 700; ContenidoModal := TfrArticulosFabPro.Create(Self); end; procedure TfrPedidoProveedor.CalcularTotalDetalle; var auxCantidad, auxPrecio, auxDto, auxTotal : double; begin with TablaDetallesMem do begin FImporteTotal := FImporteTotal - FieldByName('TOTAL').AsFloat; auxCantidad := FieldByName('CANTIDAD').AsFloat; auxPrecio := FieldByName('PRECIO').AsFloat; auxDto := FieldByName('DESCUENTO').AsFloat; auxTotal := auxCantidad * auxPrecio; auxTotal := auxTotal - (auxTotal * (auxDto / 100)); FieldByName('TOTAL').AsFloat := auxTotal; FImporteTotal := FImporteTotal + FieldByName('TOTAL').AsFloat; TablaPedidosProveedor.FieldByName('IMPORTETOTAL').AsFloat := FImporteTotal; end; end; procedure TfrPedidoProveedor.CalcularTotalPedido; var ImporteTotal : Double; CurBookmark: string; begin ImporteTotal := 0; with TablaDetallesMem do begin DisableControls; CurBookmark := Bookmark; try First; while not EOF do begin ImporteTotal := ImporteTotal + FieldByName('TOTAL').AsFloat; Next; end; TablaPedidosProveedor.FieldByName('IMPORTETOTAL').AsFloat := ImporteTotal; finally Bookmark := CurBookmark; EnableControls; end; end; end; procedure TfrPedidoProveedor.DtoDetalleSetText(Sender: TField; const Text: String); begin try if EsCadenaVacia(Text) then Sender.AsString := '0' else begin ValidarDto(Text); Sender.AsString := Text; end; CalcularTotalDetalle; except on E : EConvertError do VerMensaje(msgDtoNoValido); on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrPedidoProveedor.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; procedure TfrPedidoProveedor.CantidadDetalleSetText(Sender: TField; const Text: String); var CantAnt, PendAnt : double; CantNue, PendNue : double; begin CantAnt := TablaDetallesMem.FieldByName('CANTIDAD').AsFloat; PendAnt := TablaDetallesMem.FieldByName('PENDIENTES').AsFloat; try if EsCadenaVacia(Text) then begin if CantAnt = 0 then Sender.AsString := '1' else Sender.AsFloat := CantAnt; end else Sender.AsString := Text; CantNue := Sender.AsFloat; PendNue := PendAnt - (CantAnt - CantNue); if PendNue < 0 then begin VerMensajeFmt('Sobran %f unidades del material', [abs(PendNue)]); PendNue := 0; end; TablaDetallesMem.FieldByName('PENDIENTES').AsFloat := PendNue; CalcularTotalDetalle; except on E : EConvertError do VerMensaje(msgCantidadNoValida); on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrPedidoProveedor.PrecioDetalleSetText(Sender: TField; const Text: String); begin try if EsCadenaVacia(Text) then Sender.AsString := '0' else Sender.AsString := Text; CalcularTotalDetalle; except on E : EConvertError do VerMensaje(msgPrecioNoValido); on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrPedidoProveedor.SetCodigoAlmacen(Value: Variant); var DatosAlmacen : TDatosAlmacen; begin if VarIsNull(Value) then exit; if FCodigoAlmacen = Value then exit; FCodigoAlmacen := Value; DatosAlmacen := TDatosAlmacen.Create; DatosAlmacen.CodigoEmpresa := EmpresaActiva.Codigo; DatosAlmacen.Codigo := CodigoAlmacen; try dmTablaAlmacenes.darDatosAlmacen(DatosAlmacen); CodAlmacen.DataBinding.Field.AsInteger := DatosAlmacen.Codigo; NombreAlmacen.Field.AsString := DatosAlmacen.Nombre; CalleAlmacen.Field.AsString := DatosAlmacen.Calle; NumeroAlmacen.Field.AsString := DatosAlmacen.Numero; PisoAlmacen.Field.AsString := DatosAlmacen.Piso; CodigoPostalAlmacen.Field.AsString := DatosAlmacen.CodigoPostal; PoblacionAlmacen.Field.AsString := DatosAlmacen.Poblacion; ProvinciaAlmacen.Field.AsString := DatosAlmacen.Provincia; FCodigoProvincia := dmTablaProvincias.darCodigoProvincia(DatosAlmacen.Provincia); finally DatosAlmacen.Free; end; end; procedure TfrPedidoProveedor.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 := '0'; FieldByName('UNIDADESMEDIDA').AsString := DatosArticulo.Unidadesmedida; // El campo precio a partir de ahora lo utilizaremos para guardar el precio con el // que se hace el pedido al proveedor, asi cuando se reciba en el almacen se almacenará // este valor de compra junto con la fecha de recepción // FieldByName('PRECIO').AsString := DatosArticulo.Precio; // FieldByName('TOTAL').AsString := DatosArticulo.Precio; FieldByName('PENDIENTES').AsString := '0'; Post; end; FCodigoArticulo := Value; CalcularTotalPedido; end else raise Exception.CreateFmt(msgArtCodArtNoExiste, [Value]); finally DatosArticulo.Free; end; end; function TfrPedidoProveedor.ComprobarDatos: Boolean; begin Result := False; if not (Modo in [Anadir, Modificar]) then begin Result := True; Exit; end; if EsCadenaVacia(FechaAlta.DataBinding.Field.AsString) then begin VerMensaje(msgPedFaltaFecAlta); FechaAlta.SetFocus; Exit; end; if EsCadenaVacia(CodAlmacen.DataBinding.Field.AsString) then begin VerMensaje(msgPedFaltaAlmDes); Paginas.ActivePage := pagDestino; CodAlmacen.SetFocus; Exit; end; if ((UpperCase(Situacion.Field.AsString) = 'EMITIDO') or (UpperCase(Situacion.Field.AsString) = 'DEVUELTO') or (UpperCase(Situacion.Field.AsString) = 'PARCIALMENTE RECIBIDO') or (UpperCase(Situacion.Field.AsString) = 'TOTALMENTE RECIBIDO')) and EsCadenaVacia(FechaEmision.DataBinding.Field.AsString) then begin VerMensaje(msgPedFaltaFecEmision); FechaEmision.SetFocus; Exit; end; if ((UpperCase(Situacion.Field.AsString) = 'DEVUELTO') or (UpperCase(Situacion.Field.AsString) = 'PARCIALMENTE RECIBIDO') or (UpperCase(Situacion.Field.AsString) = 'TOTALMENTE RECIBIDO')) and EsCadenaVacia(Recepcion.DataBinding.Field.AsString) then begin VerMensaje(msgPedFaltaFecRecepcion); Recepcion.SetFocus; Exit; end; if EsCadenaVacia(Nombre.Field.AsString) then begin VerMensaje(msgPedFaltaNombreProv); Paginas.ActivePage := pagProveedor; Nombre.SetFocus; Exit; end; if TablaDetallesMem.IsEmpty then begin VerMensaje(msgPedFaltaArticulos); Paginas.ActivePage := pagContenido; gridDetalles.SetFocus; Exit end; Result := True; end; procedure TfrPedidoProveedor.ActivarEventosCampos; begin with TablaDetallesMem do begin FieldByName('CODIGOARTICULO').OnSetText := CodigoArticuloDetalleSetText; FieldByName('DESCUENTO').OnSetText := DtoDetalleSetText; FieldByName('CANTIDAD').OnSetText := CantidadDetalleSetText; FieldByName('PRECIO').OnSetText := PrecioDetalleSetText; AfterDelete := DetalleAfterDelete; AfterEdit := DetalleAfterEdit; end; end; procedure TfrPedidoProveedor.DetalleAfterDelete(DataSet: TDataSet); begin CalcularTotalPedido; end; procedure TfrPedidoProveedor.BorrarDetalles; begin with TablaDetallesMem do begin DisableControls; EmptyTable; EnableControls; end; end; procedure TfrPedidoProveedor.BorrarDetallesIB; begin with TablaDetallesPedidos 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 TfrPedidoProveedor.CargarDetalles; var NumeroCampo : Integer; begin with TablaDetallesMem do begin if TablaDetallesPedidos.IsEmpty then Exit; DisableControls; TablaDetallesPedidos.First; while not TablaDetallesPedidos.EOF do begin Append; for NumeroCampo := 0 to TablaDetallesPedidos.FieldCount-1 do Fields[NumeroCampo].AsString := TablaDetallesPedidos.Fields[NumeroCampo].AsString; Post; TablaDetallesPedidos.Next; end; First; EnableControls; end; end; procedure TfrPedidoProveedor.SalvarDetalles; var NumeroCampo : Integer; NumConcepto : Integer; begin with TablaDetallesMem do begin if IsEmpty then Exit; NumConcepto := 0; DisableControls; First; while not EOF do begin TablaDetallesPedidos.Append; for NumeroCampo := 0 to FieldCount-1 do begin if Fields[NumeroCampo].FieldName = 'CODIGOEMPRESA' then TablaDetallesPedidos.Fields[NumeroCampo].AsInteger := EmpresaActiva.Codigo else begin if Fields[NumeroCampo].FieldName = 'CODIGOPEDIDO' then TablaDetallesPedidos.Fields[NumeroCampo].AsString := Codigo.Field.AsString else if Fields[NumeroCampo].FieldName = 'NUMCONCEPTO' then TablaDetallesPedidos.Fields[NumeroCampo].AsInteger := NumConcepto else TablaDetallesPedidos.Fields[NumeroCampo].AsString := Fields[NumeroCampo].AsString; end; end; TablaDetallesPedidos.Post; Next; NumConcepto := NumConcepto + 1; end; EnableControls; end; end; procedure TfrPedidoProveedor.SetCodigoObra(Value: Variant); var DatosAlmacen : TDatosAlmacen; begin if VarIsNull(Value) then exit; if FCodigoObra = Value then exit; FCodigoObra := Value; DatosAlmacen := TDatosAlmacen.Create; DatosAlmacen.CodigoEmpresa := EmpresaActiva.Codigo; DatosAlmacen.Codigo := FCodigoObra; try dmTablaAlmacenes.darDatosAlmacen(DatosAlmacen); CodClienteFinal.DataBinding.Field.AsInteger := DatosAlmacen.Codigo; NombreClienteFinal.Field.AsString := DatosAlmacen.Nombre; finally DatosAlmacen.Free; end; end; procedure TfrPedidoProveedor.DetalleAfterEdit(DataSet: TDataSet); begin TablaDetallesPedidos.RecordModified(True); end; procedure TfrPedidoProveedor.GridBotonDescripcionClick(Sender: TObject); begin TablaDetallesMem.Edit; WidthModal := 420; HeightModal := 435; ModoModal := Modo; ContenidoModal := TfrEditorDescripcion.Create(Self); end; procedure TfrPedidoProveedor.CodProveedorPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin ContenidoModal := TfrProveedores.Create(Self); end; procedure TfrPedidoProveedor.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.ActivePage := pagProveedor; CodProveedor.SetFocus; end; end; end else begin VerMensajeFmt(msgProCodProvIncorrecto, [DisplayValue]); Paginas.ActivePage := pagProveedor; CodProveedor.SetFocus; end; end; procedure TfrPedidoProveedor.CodAlmacenPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin EntidadModal := entAlmacen; ContenidoModal := TfrAlmacenes.Create(Self); CodigoAlmacen := FCodigoAlmacenAux; end; procedure TfrPedidoProveedor.CodAlmacenPropertiesValidate(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 (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]); DisplayValue := '0'; CodAlmacen.SetFocus; end else begin if (dmTablaAlmacenes.ExisteAlmacen(EmpresaActiva.Codigo, DisplayValue)) then CodigoAlmacen := DisplayValue else begin VerMensajeFmt(msgAlmCodAlmNoExiste, [DisplayValue]); Paginas.ActivePage := pagDestino; CodAlmacen.SetFocus; end; end; end else begin VerMensajeFmt(msgAlmCodAlmIncorrecto, [DisplayValue]); Paginas.ActivePage := pagDestino; CodAlmacen.SetFocus; end; end; procedure TfrPedidoProveedor.CodClienteFinalPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin EntidadModal := entAlmacenObra; ContenidoModal := TfrAlmacenes.Create(Self); CodigoObra := FCodigoAlmacenAux; end; procedure TfrPedidoProveedor.CodClienteFinalPropertiesValidate( 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 (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(msgPedProvCodCliFinalIncorrecto,[DisplayValue]); DisplayValue := '0'; CodClienteFinal.SetFocus; end else begin if (dmTablaAlmacenes.ExisteAlmacen(EmpresaActiva.Codigo, DisplayValue)) then CodigoObra := DisplayValue else begin VerMensajeFmt(msgPedProvCodCliFinalNoExiste, [DisplayValue]); Paginas.ActivePage := pagDestino; CodClienteFinal.SetFocus; end; end; end else begin VerMensajeFmt(msgPedProvCodCliFinalIncorrecto, [DisplayValue]); Paginas.ActivePage := pagDestino; CodClienteFinal.SetFocus; end; end; procedure TfrPedidoProveedor.gridDetallesChangeNode(Sender: TObject; OldNode, Node: TdxTreeListNode); begin //verMensaje('Click'); end; end.