This repository has been archived on 2024-11-29. You can view files and clone it, but cannot push or open issues or pull requests.
Tecsitel_FactuGES/Proveedores/PedidoProveedor.pas
2007-06-21 15:47:20 +00:00

1707 lines
52 KiB
ObjectPascal

{
===============================================================================
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 <CTRL+Supr> 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.