git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES/trunk@4 b68bf8ae-e977-074f-a058-3cfd71dd8f45
1041 lines
29 KiB
ObjectPascal
1041 lines
29 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.0.2
|
|
Fecha versión actual: 24-09-2002
|
|
===============================================================================
|
|
Modificaciones:
|
|
|
|
Fecha Comentarios
|
|
---------------------------------------------------------------------------
|
|
07-04-2002 Se ha adaptado a una unica transacción.
|
|
|
|
24-09-2002 Se producía una excepción si el cursos estaba en el código
|
|
del artículo, 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.
|
|
===============================================================================
|
|
}
|
|
|
|
unit Articulo;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
StdCtrls, ExtCtrls, Db, IBCustomDataSet, Mask, DBCtrls, Buttons, ToolEdit,
|
|
IB, IBDatabase, RdxBarras, RdxBotones, RdxCampos, RdxMemo, RdxComboBox,
|
|
RdxCheckBox, RdxTitulos, RdxPaneles, Colores, Mensajes, Tipos,
|
|
RdxFrameArticulos, cxControls, cxContainer, cxEdit, cxTextEdit,
|
|
cxMaskEdit, cxButtonEdit, cxDBEdit, dxCntner, dxTL, dxDBCtrl, dxDBGrid,
|
|
cxDropDownEdit, cxLookupEdit, cxDBLookupEdit, cxDBLookupComboBox,
|
|
cxSpinEdit, Grids, DBGrids, RxMemDS, cxCurrencyEdit, ActnList, cxCalendar;
|
|
|
|
type
|
|
TfrArticulo = class(TRdxFrameArticulos)
|
|
brDoble: TRdxBarraInferior;
|
|
brSimple: TRdxBarraInferior;
|
|
bAceptarSimple: TRdxBoton;
|
|
bAceptar: TRdxBoton;
|
|
bCancelar: TRdxBoton;
|
|
dsFabricantes: TDataSource;
|
|
Titulo: TRdxPanelTituloOperacion;
|
|
pnlScroll: TRdxScrollPanel;
|
|
pnlDatos: TRdxPanel;
|
|
eUnidades: TLabel;
|
|
cDatos: TRdxCabecera;
|
|
eCodigo: TLabel;
|
|
eDescripcion: TLabel;
|
|
eFamilia: TLabel;
|
|
ePrecioEuros: TLabel;
|
|
eObservaciones: TLabel;
|
|
cbxUnidadesMedida: TRdxDBComboBox;
|
|
Descripcion: TRdxDBEdit;
|
|
Precio: TRdxDBEdit;
|
|
cbxFamilia: TRdxDBComboBox;
|
|
Observaciones: TRdxDBMemo;
|
|
Codigo: TcxDBButtonEdit;
|
|
dsArticulo: TDataSource;
|
|
dsArticulosFabPro: TDataSource;
|
|
pnlFabPro: TRdxPanel;
|
|
cFabPro: TRdxCabecera;
|
|
pnlListaPrecios: TRdxPanel;
|
|
Panel1: TPanel;
|
|
Panel2: TPanel;
|
|
bEliminar: TRdxBoton;
|
|
bEliminarTodo: TRdxBoton;
|
|
ActionList1: TActionList;
|
|
actEliminar: TAction;
|
|
actEliminarTodo: TAction;
|
|
pnlCamposFabPro: TPanel;
|
|
grpCamposFabPro: TGroupBox;
|
|
eFabricante: TLabel;
|
|
eProveedor: TLabel;
|
|
ePrecioPro: TLabel;
|
|
eCodFab: TLabel;
|
|
eCodPro: TLabel;
|
|
Fabricante: TcxLookupComboBox;
|
|
Proveedor: TcxButtonEdit;
|
|
PrecioPro: TcxCurrencyEdit;
|
|
CodFab: TcxTextEdit;
|
|
CodPro: TcxTextEdit;
|
|
bAgregar: TRdxBoton;
|
|
ePrecioFinal: TLabel;
|
|
eDescuento: TLabel;
|
|
Descuento: TcxCurrencyEdit;
|
|
e2PrecioFinal: TLabel;
|
|
PrecioFinal: TcxCurrencyEdit;
|
|
Label1: TLabel;
|
|
FechaPrecio: TcxDateEdit;
|
|
gridDetalles: TdxDBGrid;
|
|
|
|
procedure bSalirClick(Sender: TObject);
|
|
procedure bCancelarGuardarClick(Sender: TObject);
|
|
procedure bAceptarClick(Sender: TObject);
|
|
procedure PrecioSetText(Sender: TField; const Text: String);
|
|
procedure CodigoPropertiesButtonClick(Sender: TObject;
|
|
AButtonIndex: Integer);
|
|
procedure CodigoPropertiesValidate(Sender: TObject;
|
|
var DisplayValue: Variant; var ErrorText: TCaption;
|
|
var Error: Boolean);
|
|
|
|
procedure ProveedorPropertiesButtonClick(Sender: TObject;
|
|
AButtonIndex: Integer);
|
|
procedure bAgragarClick(Sender: TObject);
|
|
procedure TablaArticulosFabProMemAfterPost(DataSet: TDataSet);
|
|
procedure actEliminarExecute(Sender: TObject);
|
|
procedure actEliminarTodoExecute(Sender: TObject);
|
|
procedure actEliminarUpdate(Sender: TObject);
|
|
procedure PrecioProExit(Sender: TObject);
|
|
procedure DescuentoExit(Sender: TObject);
|
|
procedure PrecioFinalPropertiesChange(Sender: TObject);
|
|
|
|
private
|
|
FCodigoProveedor: Variant;
|
|
TablaFabricantes : TIBDataSet;
|
|
TablaArticulosFabProMem: TRxMemoryData;
|
|
|
|
procedure SetCodigoProveedor (Value : Variant);
|
|
procedure salvarDetalles;
|
|
procedure cargarDetalles;
|
|
procedure borrarDetalles;
|
|
procedure borrarDetallesIB;
|
|
procedure calcularPrecioFinal;
|
|
procedure calcularPrecioFinalDetalle;
|
|
|
|
protected
|
|
procedure activarModoAnadir; override;
|
|
procedure activarModoModificar; override;
|
|
procedure activarModoConsultar; override;
|
|
procedure activarModoEliminar; override;
|
|
function AnadirDatos : Boolean; override;
|
|
function ModificarDatos : Boolean; override;
|
|
function EliminarDatos : Boolean; override;
|
|
function CancelarAnadir : Boolean; override;
|
|
function CancelarModificar : Boolean; override;
|
|
function CancelarEliminar : Boolean; override;
|
|
procedure FreeContenido; override;
|
|
procedure BuscarArticulo; override;
|
|
function ComprobarDatos: Boolean; override;
|
|
procedure PrecioDetalleSetText(Sender: TField; const Text: String);
|
|
procedure DtoDetalleSetText(Sender: TField; const Text: String);
|
|
property CodigoProveedor: Variant read FCodigoProveedor write SetCodigoProveedor;
|
|
public
|
|
constructor Create (AOwner : TComponent); override;
|
|
destructor Destroy; override;
|
|
published
|
|
property TablaArticulos;
|
|
property TablaArticulosFabPro;
|
|
property CodigoArticulo;
|
|
end;
|
|
|
|
var
|
|
frArticulo: TfrArticulo;
|
|
|
|
implementation
|
|
|
|
{$R *.DFM}
|
|
uses
|
|
BaseDatos, TablaArticulos, TablaArticulosAlmacen, Articulos,
|
|
TablaFamilias, TablaUnidadesMedida, StrFunc, Configuracion,
|
|
TablaPedidosProveedor,Excepciones, IBErrorCodes, RdxEmpresaActiva,
|
|
Literales, NumFunc, TablaFabricantes, TablaProveedores, RdxFrameProveedores,
|
|
Proveedores, Constantes;
|
|
|
|
constructor TfrArticulo.Create (AOwner : TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FCodigoProveedor:= Null;
|
|
Entidad := entArticulo;
|
|
ConfigurarFrame(Self, Self.Entidad);
|
|
|
|
BaseDatos := dmBaseDatos.BD;
|
|
Transaccion := dmBaseDatos.Transaccion;
|
|
TablaArticulos := TIBDataSet.Create(Self);
|
|
dsArticulo.DataSet := TablaArticulos;
|
|
with TablaArticulos do
|
|
begin
|
|
Database := BaseDatos;
|
|
Transaction := Transaccion;
|
|
SelectSQL.Assign(dmTablaArticulos.sqlConsultar);
|
|
InsertSQL.Assign(dmTablaArticulos.sqlInsertar);
|
|
ModifySQL.Assign(dmTablaArticulos.sqlModificar);
|
|
DeleteSQL.Assign(dmTablaArticulos.sqlEliminar);
|
|
RefreshSQL.Assign(dmTablaArticulos.sqlConsultar);
|
|
end;
|
|
|
|
TablaArticulosFabPro := TIBDataSet.Create(Self);
|
|
with TablaArticulosFabPro do
|
|
begin
|
|
Database := BaseDatos;
|
|
Transaction := Transaccion;
|
|
SelectSQL.Assign(dmTablaArticulos.sqlConsultarArtFabPro);
|
|
InsertSQL.Assign(dmTablaArticulos.sqlInsertarArtFabPro);
|
|
ModifySQL.Assign(dmTablaArticulos.sqlModificarArtFabPro);
|
|
DeleteSQL.Assign(dmTablaArticulos.sqlEliminarArtFabPro);
|
|
RefreshSQL.Assign(dmTablaArticulos.sqlConsultarArtFabPro);
|
|
end;
|
|
|
|
TablaArticulosFabProMem := TRxMemoryData.Create(Self);
|
|
TablaArticulosFabProMem.CopyStructure(TablaArticulosFabPro);
|
|
|
|
dmTablaArticulos.InicializarGridArticulosFabProDetalles(gridDetalles);
|
|
dmTablaArticulos.InicializarTablaArticulosFabPro(@TablaArticulosFabProMem);
|
|
dsArticulosFabPro.DataSet := TablaArticulosFabProMem;
|
|
TablaArticulosFabProMem.Open;
|
|
|
|
TablaFabricantes := TIBDataSet.Create(Self);
|
|
dsFabricantes.DataSet := TablaFabricantes;
|
|
with TablaFabricantes do
|
|
begin
|
|
Database := BaseDatos;
|
|
Transaction := Transaccion;
|
|
SelectSQL.Assign(dmTablaFabricantes.sqlConsultar);
|
|
RefreshSQL.Assign(dmTablaFabricantes.sqlConsultar);
|
|
Open;
|
|
end;
|
|
|
|
cbxFamilia.Items := dmTablaFamilias.darFamilias;
|
|
cbxUnidadesMedida.Items := dmTablaUnidadesMedida.darUnidadesMedida;
|
|
|
|
FechaPrecio.Date := dmBaseDatos.DarFecha;
|
|
PrecioPro.Properties.DisplayFormat := DISPLAY_EUROS2;
|
|
Descuento.Properties.DisplayFormat := DISPLAY_DTO;
|
|
PrecioFinal.Properties.DisplayFormat := DISPLAY_EUROS2;
|
|
end;
|
|
|
|
destructor TfrArticulo.Destroy;
|
|
begin
|
|
TablaArticulos.Close;
|
|
TablaArticulos.UnPrepare;
|
|
TablaArticulos.Free;
|
|
|
|
TablaArticulosFabPro.Close;
|
|
TablaArticulosFabPro.UnPrepare;
|
|
TablaArticulosFabPro.Free;
|
|
|
|
TablaArticulosFabProMem.Close;
|
|
TablaArticulosFabProMem.Free;
|
|
|
|
TablaFabricantes.Close;
|
|
TablaFabricantes.UnPrepare;
|
|
TablaFabricantes.Free;
|
|
|
|
inherited;
|
|
end;
|
|
|
|
procedure TfrArticulo.BuscarArticulo;
|
|
begin
|
|
if Transaccion = NIL then
|
|
exit;
|
|
|
|
try
|
|
TablaArticulos.Close;
|
|
TablaArticulosFabPro.Close;
|
|
TablaArticulosFabProMem.Close;
|
|
|
|
// Buscar la fila a tratar si es necesario
|
|
if not VarIsNull(CodigoArticulo) then begin
|
|
TablaArticulos.Params.ByName('CODIGO').AsString := CodigoArticulo;
|
|
TablaArticulosFabPro.Params.ByName('CODIGOARTICULO').AsString := CodigoArticulo;
|
|
end;
|
|
|
|
TablaArticulos.Prepare;
|
|
TablaArticulos.Open;
|
|
dmTablaArticulos.InicializarTablaArticulos(@TablaArticulos);
|
|
|
|
TablaArticulosFabPro.Prepare;
|
|
TablaArticulosFabPro.Open;
|
|
dmTablaArticulos.InicializarTablaArticulosFabPro(@TablaArticulosFabPro);
|
|
CodFab.Properties.MaxLength := TablaArticulosFabPro.FieldByName('CODARTFABRICANTE').Size;
|
|
CodPro.Properties.MaxLength := TablaArticulosFabPro.FieldByName('CODARTPROVEEDOR').Size;
|
|
|
|
TablaArticulosFabProMem.Open;
|
|
cargarDetalles;
|
|
|
|
except
|
|
on E : EIBError do begin
|
|
VerMensaje(E.Message);
|
|
end;
|
|
on E : EDatabaseError do begin
|
|
VerMensaje(E.Message);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrArticulo.FreeContenido;
|
|
begin
|
|
if (ContenidoModal is TRdxFrameArticulos) then
|
|
begin
|
|
CodigoArticulo := (ContenidoModal as TRdxFrameArticulos).CodigoArticulo;
|
|
ActivarModo;
|
|
end;
|
|
|
|
if (ContenidoModal is TRdxFrameProveedores) then
|
|
begin
|
|
CodigoProveedor := (ContenidoModal as TRdxFrameProveedores).CodigoProveedor;
|
|
end;
|
|
|
|
inherited FreeContenido;
|
|
end;
|
|
|
|
function TfrArticulo.AnadirDatos : Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
TablaArticulos.Post;
|
|
TablaArticulos.ApplyUpdates;
|
|
dmTablaArticulos.incrementarCodigo;
|
|
FCodigoArticulo := TablaArticulos.FieldByName('CODIGO').AsString;
|
|
|
|
salvarDetalles;
|
|
Commit;
|
|
|
|
TablaArticulos.CachedUpdates := False;
|
|
TablaArticulos.Close;
|
|
TablaArticulosFabPro.Close;
|
|
TablaArticulosFabProMem.Close;
|
|
|
|
Result := True;
|
|
except
|
|
on E : EIBError do begin
|
|
if E.IBErrorCode = isc_unique_key_violation then begin
|
|
VerMensajeFmt(msgArtCodArtRepetido, [Codigo.DataBinding.Field.AsString]);
|
|
TablaArticulos.Edit;
|
|
end
|
|
else
|
|
TratarExcepcion(E);
|
|
end;
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
function TfrArticulo.ModificarDatos : Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
TablaArticulos.Post;
|
|
|
|
BorrarDetallesIB;
|
|
SalvarDetalles;
|
|
Commit;
|
|
|
|
TablaArticulos.Close;
|
|
TablaArticulosFabPro.Close;
|
|
TablaArticulosFabProMem.Close;
|
|
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
function TfrArticulo.EliminarDatos : Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
TablaArticulos.Delete;
|
|
|
|
Commit;
|
|
|
|
TablaArticulos.Close;
|
|
TablaArticulosFabPro.Close;
|
|
TablaArticulosFabProMem.Close;
|
|
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
begin
|
|
case E.IBErrorCode of
|
|
isc_lock_conflict : VerMensajeFmt(msgArtBloqueado, [Codigo.DataBinding.Field.AsString]);
|
|
else
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrArticulo.activarModoAnadir;
|
|
begin
|
|
dsArticulo.AutoEdit := True;
|
|
|
|
dsArticulosFabPro.AutoEdit := False;
|
|
TablaArticulosFabProMem.FieldByName('DESCUENTO').OnSetText := Nil;
|
|
TablaArticulosFabProMem.FieldByName('PRECIO').OnSetText := Nil;
|
|
|
|
Codigo.Properties.Buttons[0].Visible := False;
|
|
Codigo.Properties.ReadOnly := False;
|
|
Codigo.Properties.OnValidate := CodigoPropertiesValidate;
|
|
|
|
pnlCamposFabPro.Visible := True;
|
|
|
|
try
|
|
TablaArticulos.Close;
|
|
TablaArticulos.CachedUpdates := True;
|
|
TablaArticulos.Open;
|
|
dmTablaArticulos.InicializarTablaArticulos(@TablaArticulos);
|
|
TablaArticulos.FieldByName('PRECIO').OnSetText := PrecioSetText;
|
|
|
|
TablaArticulosFabPro.Open;
|
|
dmTablaArticulos.InicializarTablaArticulosFabPro(@TablaArticulosFabPro);
|
|
CodFab.Properties.MaxLength := TablaArticulosFabPro.FieldByName('CODARTFABRICANTE').Size;
|
|
CodPro.Properties.MaxLength := TablaArticulosFabPro.FieldByName('CODARTPROVEEDOR').Size;
|
|
|
|
TablaArticulos.Insert;
|
|
Codigo.DataBinding.Field.asString := dmTablaArticulos.DarNuevoCodigo;
|
|
|
|
borrarDetalles;
|
|
TablaArticulosFabProMem.AfterPost := TablaArticulosFabProMemAfterPost;
|
|
|
|
Visible := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrArticulo.activarModoModificar;
|
|
begin
|
|
dsArticulo.AutoEdit := True;
|
|
|
|
dsArticulosFabPro.AutoEdit := True;
|
|
TablaArticulosFabProMem.FieldByName('DESCUENTO').OnSetText := DtoDetalleSetText;
|
|
TablaArticulosFabProMem.FieldByName('PRECIO').OnSetText := PrecioDetalleSetText;
|
|
|
|
Codigo.Properties.Buttons[0].Visible := True;
|
|
Codigo.Properties.ReadOnly := True;
|
|
Codigo.Properties.OnValidate := nil;
|
|
|
|
pnlCamposFabPro.Visible := True;
|
|
|
|
try
|
|
TablaArticulos.FieldByName('PRECIO').OnSetText := PrecioSetText;
|
|
TablaArticulos.Open;
|
|
if TablaArticulos.RecordCount = 0 then
|
|
begin
|
|
VerMensajeFmt(msgArtNoExisteArt, [CodigoArticulo]);
|
|
CancelarModificar;
|
|
CloseFrame;
|
|
Exit;
|
|
end;
|
|
TablaArticulos.Edit;
|
|
TablaArticulos.Post;
|
|
TablaArticulos.Edit;
|
|
|
|
TablaArticulosFabProMem.AfterPost := TablaArticulosFabProMemAfterPost;
|
|
Visible := True;
|
|
except
|
|
on E : EIBError do
|
|
begin
|
|
case E.IBErrorCode of
|
|
isc_lock_conflict : begin
|
|
VerMensajeFmt(msgArtBloqueado, [CodigoArticulo]);
|
|
CancelarModificar;
|
|
CloseFrame;
|
|
Exit;
|
|
end
|
|
else
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrArticulo.activarModoConsultar;
|
|
begin
|
|
dsArticulo.AutoEdit := False;
|
|
|
|
dsArticulosFabPro.AutoEdit := False;
|
|
TablaArticulosFabProMem.FieldByName('DESCUENTO').OnSetText := Nil;
|
|
TablaArticulosFabProMem.FieldByName('PRECIO').OnSetText := Nil;
|
|
|
|
Codigo.Properties.Buttons[0].Visible := True;
|
|
Codigo.Properties.OnValidate := nil;
|
|
|
|
pnlCamposFabPro.Visible := False;
|
|
|
|
try
|
|
TablaArticulos.Open;
|
|
if TablaArticulos.RecordCount = 0 then
|
|
begin
|
|
VerMensajeFmt(msgArtNoExisteArt, [CodigoArticulo]);
|
|
CloseFrame;
|
|
Exit;
|
|
end;
|
|
TablaArticulos.Cancel;
|
|
|
|
TablaArticulosFabProMem.AfterPost := Nil;
|
|
Visible := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrArticulo.activarModoEliminar;
|
|
begin
|
|
dsArticulo.AutoEdit := False;
|
|
|
|
dsArticulosFabPro.AutoEdit := False;
|
|
TablaArticulosFabProMem.FieldByName('DESCUENTO').OnSetText := Nil;
|
|
TablaArticulosFabProMem.FieldByName('PRECIO').OnSetText := Nil;
|
|
|
|
Codigo.Properties.Buttons[0].Visible := True;
|
|
Codigo.Properties.OnValidate := nil;
|
|
|
|
pnlCamposFabPro.Visible := False;
|
|
|
|
try
|
|
TablaArticulos.Open;
|
|
if TablaArticulos.RecordCount = 0 then
|
|
begin
|
|
VerMensajeFmt(msgArtNoExisteArt, [CodigoArticulo]);
|
|
CancelarEliminar;
|
|
CloseFrame;
|
|
Exit;
|
|
end;
|
|
TablaArticulos.Cancel;
|
|
|
|
TablaArticulosFabProMem.AfterPost := Nil;
|
|
Visible := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrArticulo.bAceptarClick(Sender: TObject);
|
|
begin
|
|
if (RealizarOperacion) then
|
|
CloseFrame;
|
|
end;
|
|
|
|
function TfrArticulo.CancelarAnadir: Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
TablaArticulos.CancelUpdates;
|
|
RollBack;
|
|
|
|
TablaArticulos.CachedUpdates := False;
|
|
TablaArticulos.Close;
|
|
TablaArticulosFabPro.Close;
|
|
TablaArticulosFabProMem.Close;
|
|
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
function TfrArticulo.CancelarEliminar: Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
RollBack;
|
|
|
|
TablaArticulos.Close;
|
|
TablaArticulosFabPro.Close;
|
|
TablaArticulosFabProMem.Close;
|
|
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
function TfrArticulo.CancelarModificar: Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
RollBack;
|
|
|
|
TablaArticulos.Close;
|
|
TablaArticulosFabPro.Close;
|
|
TablaArticulosFabProMem.Close;
|
|
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrArticulo.bSalirClick(Sender: TObject);
|
|
begin
|
|
try
|
|
Rollback;
|
|
CloseFrame;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrArticulo.bCancelarGuardarClick(Sender: TObject);
|
|
begin
|
|
if (TratarCambios = IDOK) then
|
|
CloseFrame;
|
|
end;
|
|
|
|
function TfrArticulo.ComprobarDatos: Boolean;
|
|
begin
|
|
Result := False;
|
|
|
|
if EsCadenaVacia(Descripcion.Text) then
|
|
begin
|
|
VerMensaje(msgArtFaltaDesArt);
|
|
Descripcion.SetFocus;
|
|
Exit;
|
|
end;
|
|
|
|
if Modo = Eliminar then
|
|
begin
|
|
if dmTablaArticulosAlmacen.ExisteArticuloEnAlmacen(EmpresaActiva.Codigo, CodigoArticulo) then
|
|
begin
|
|
VerMensaje(msgArtExisteArtEnAlm);
|
|
Exit;
|
|
end;
|
|
if dmTablaPedidosProveedor.existeArticuloEnPedido(EmpresaActiva.Codigo, CodigoArticulo) then
|
|
begin
|
|
VerMensaje(msgArtExisteArtEnPed);
|
|
Exit;
|
|
end;
|
|
end;
|
|
Result := True;
|
|
end;
|
|
|
|
procedure TfrArticulo.CodigoPropertiesButtonClick(Sender: TObject;
|
|
AButtonIndex: Integer);
|
|
begin
|
|
inherited;
|
|
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, FCodigoArticulo es NULL y da error al activar modo porque
|
|
no se inicializa los parámetros de la sql. Lo hace BuscarArticulo. }
|
|
if not TablaArticulos.Active then
|
|
BuscarArticulo;
|
|
|
|
ContenidoModal := TfrArticulos.Create(Self);
|
|
end;
|
|
|
|
procedure TfrArticulo.CodigoPropertiesValidate(Sender: TObject;
|
|
var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
|
|
begin
|
|
if (Modo <> Anadir) or (Visible = false) then
|
|
exit;
|
|
|
|
if EsCadenaVacia(DisplayValue) then
|
|
DisplayValue := dmTablaArticulos.darNuevoCodigo;
|
|
|
|
if (dmTablaArticulos.validarCodigo(DisplayValue)) then begin
|
|
//Comprueba que le numero es lo sufucientemente pequeño para ser un entero
|
|
if not EsInteger(DisplayValue) then
|
|
begin
|
|
VerMensajeFmt(msgArtCodArtIncorrecto,[DisplayValue]);
|
|
Codigo.SetFocus;
|
|
end
|
|
else
|
|
begin
|
|
DisplayValue := dmTablaArticulos.formatearCodigo(DisplayValue);
|
|
if (dmTablaArticulos.existeArticulo(DisplayValue)) then begin
|
|
VerMensajeFmt(msgArtCodArtRepetido, [DisplayValue]);
|
|
Codigo.SetFocus;
|
|
end;
|
|
end;
|
|
end
|
|
else begin
|
|
VerMensajeFmt(msgArtCodArtIncorrecto, [DisplayValue]);
|
|
Codigo.SetFocus;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrArticulo.bAgragarClick(Sender: TObject);
|
|
var
|
|
prueba: String;
|
|
begin
|
|
if esCadenaVacia(Fabricante.Text)
|
|
or esCadenaVacia(CodFab.Text)
|
|
or esCadenaVacia(Proveedor.Text)
|
|
or esCadenaVacia(CodPro.Text)
|
|
or esCadenaVacia(PrecioPro.Text) then
|
|
begin
|
|
VerMensaje('Debe rellenar todos los campos para poder agregar un nuevo precio');
|
|
Exit;
|
|
end;
|
|
|
|
TablaArticulosFabProMem.Insert;
|
|
TablaArticulosFabProMem.FieldByName('CODIGOARTICULO').AsString := Codigo.Text;
|
|
TablaArticulosFabProMem.FieldByName('CODIGOFABRICANTE').AsString := Fabricante.EditValue;
|
|
TablaArticulosFabProMem.FieldByName('FABRICANTE').AsString := Fabricante.Text;
|
|
TablaArticulosFabProMem.FieldByName('CODIGOPROVEEDOR').AsString := CodigoProveedor;
|
|
TablaArticulosFabProMem.FieldByName('PROVEEDOR').AsString := Proveedor.Text;
|
|
TablaArticulosFabProMem.FieldByName('CODARTFABRICANTE').AsString := CodFab.Text;
|
|
TablaArticulosFabProMem.FieldByName('CODARTPROVEEDOR').AsString := CodPro.Text;
|
|
TablaArticulosFabProMem.FieldByName('FECHAPRECIO').AsDateTime := FechaPrecio.Date;
|
|
TablaArticulosFabProMem.FieldByName('PRECIO').AsFloat := PrecioPro.Value;
|
|
TablaArticulosFabProMem.FieldByName('DESCUENTO').AsFloat := Descuento.Value;
|
|
TablaArticulosFabProMem.FieldByName('PRECIOFINAL').AsFloat := PrecioFinal.Value;
|
|
TablaArticulosFabProMem.Post;
|
|
|
|
Fabricante.Text := '';
|
|
Proveedor.Text := '';
|
|
CodFab.Text := '';
|
|
CodPro.Text := '';
|
|
PrecioPro.Value := 0;
|
|
Descuento.Value := 0;
|
|
PrecioFinal.Value := 0;
|
|
CodigoProveedor := '';
|
|
|
|
TablaArticulos.Edit;
|
|
//Para que se trague siempre que ha habido cambios
|
|
TablaArticulos.FieldByName('CODIGO').AsString := TablaArticulos.FieldByName('CODIGO').AsString;
|
|
end;
|
|
|
|
procedure TfrArticulo.ProveedorPropertiesButtonClick(Sender: TObject;
|
|
AButtonIndex: Integer);
|
|
begin
|
|
ContenidoModal := TfrProveedores.Create(Self);
|
|
end;
|
|
|
|
procedure TfrArticulo.SetCodigoProveedor(Value: Variant);
|
|
var
|
|
lsProveedor : TDatosProveedor;
|
|
begin
|
|
if varIsNull(Value) then
|
|
exit;
|
|
|
|
if (FCodigoProveedor <> Value) then
|
|
begin
|
|
FCodigoProveedor := Value;
|
|
lsProveedor := TDatosProveedor.Create;
|
|
lsProveedor.Codigo := FCodigoProveedor;
|
|
dmTablaProveedores.DarDatosProveedor(lsProveedor);
|
|
Proveedor.Text := lsProveedor.Nombre;
|
|
lsProveedor.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrArticulo.salvarDetalles;
|
|
var
|
|
NumeroCampo : Integer;
|
|
begin
|
|
try
|
|
with TablaArticulosFabProMem do
|
|
begin
|
|
if IsEmpty then
|
|
Exit;
|
|
|
|
DisableControls;
|
|
First;
|
|
while not EOF do
|
|
begin
|
|
TablaArticulosFabPro.Append;
|
|
for NumeroCampo := 0 to FieldCount-1 do
|
|
begin
|
|
if Fields[NumeroCampo].FieldName = 'CODIGOARTICULO' then
|
|
TablaArticulosFabPro.Fields[NumeroCampo].AsString := TablaArticulos.FieldByName('CODIGO').AsString
|
|
else
|
|
TablaArticulosFabPro.Fields[NumeroCampo].AsString := Fields[NumeroCampo].AsString;
|
|
end;
|
|
TablaArticulosFabPro.Post;
|
|
Next;
|
|
end;
|
|
EnableControls;
|
|
end
|
|
except
|
|
on E : EIBError do begin
|
|
if E.IBErrorCode = isc_unique_key_violation then
|
|
begin
|
|
TablaArticulosFabPro.Delete;
|
|
TablaArticulosFabProMem.EnableControls;
|
|
end;
|
|
raise EIBError.Create(E.SQLCode, E.IBErrorCode, E.Message);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrArticulo.cargarDetalles;
|
|
var
|
|
NumeroCampo : Integer;
|
|
begin
|
|
with TablaArticulosFabProMem do
|
|
begin
|
|
if TablaArticulosFabPro.IsEmpty then
|
|
Exit;
|
|
DisableControls;
|
|
TablaArticulosFabPro.First;
|
|
while not TablaArticulosFabPro.EOF do
|
|
begin
|
|
Append;
|
|
for NumeroCampo := 0 to TablaArticulosFabPro.FieldCount-1 do
|
|
Fields[NumeroCampo].AsString := TablaArticulosFabPro.Fields[NumeroCampo].AsString;
|
|
Post;
|
|
TablaArticulosFabPro.Next;
|
|
end;
|
|
EnableControls;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrArticulo.borrarDetallesIB;
|
|
begin
|
|
with TablaArticulosFabPro 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 TfrArticulo.borrarDetalles;
|
|
begin
|
|
with TablaArticulosFabProMem do
|
|
begin
|
|
DisableControls;
|
|
EmptyTable;
|
|
EnableControls;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrArticulo.TablaArticulosFabProMemAfterPost(DataSet: TDataSet);
|
|
var
|
|
lsCodigoArt, lsCodigoFab, lsCodigoPro : Variant;
|
|
FBookmarkAux : string;
|
|
lbSemaforo: Boolean;
|
|
begin
|
|
lsCodigoArt := TablaArticulosFabProMem.FieldByName('CODIGOARTICULO').AsString;
|
|
lsCodigoFab := TablaArticulosFabProMem.FieldByName('CODIGOFABRICANTE').AsString;
|
|
lsCodigoPro := TablaArticulosFabProMem.FieldByName('CODIGOPROVEEDOR').AsString;
|
|
|
|
with TablaArticulosFabProMem do
|
|
begin
|
|
if IsEmpty then
|
|
Exit;
|
|
|
|
DisableControls;
|
|
FBookmarkAux := Bookmark;
|
|
lbSemaforo := False;
|
|
First;
|
|
while not EOF do
|
|
begin
|
|
if (FieldByName('CODIGOARTICULO').AsString = lsCodigoArt)
|
|
and (FieldByName('CODIGOFABRICANTE').AsString = lsCodigoFab)
|
|
and (FieldByName('CODIGOPROVEEDOR').AsString = lsCodigoPro)
|
|
and (FBookmarkAux <> Bookmark) then
|
|
begin
|
|
verMensaje('Ya ha introducido un precio de ese proveedor para este artículo');
|
|
lbSemaforo := True;
|
|
Break;
|
|
end;
|
|
Next;
|
|
end;
|
|
Bookmark := FBookmarkAux;
|
|
if lbSemaforo then
|
|
Delete;
|
|
EnableControls;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrArticulo.actEliminarExecute(Sender: TObject);
|
|
begin
|
|
TablaArticulosFabProMem.Delete;
|
|
TablaArticulosFabPro.Edit;
|
|
|
|
TablaArticulos.Edit;
|
|
//Para que se trague siempre que ha habido cambios
|
|
TablaArticulos.FieldByName('CODIGO').AsString := TablaArticulos.FieldByName('CODIGO').AsString;
|
|
end;
|
|
|
|
procedure TfrArticulo.actEliminarTodoExecute(Sender: TObject);
|
|
begin
|
|
with TablaArticulosFabProMem do
|
|
begin
|
|
if IsEmpty then
|
|
Exit;
|
|
DisableControls;
|
|
Last;
|
|
while not BOF do
|
|
begin
|
|
Delete;
|
|
Prior;
|
|
end;
|
|
if not IsEmpty then
|
|
Delete;
|
|
EnableControls;
|
|
end;
|
|
|
|
TablaArticulos.Edit;
|
|
//Para que se trague siempre que ha habido cambios
|
|
TablaArticulos.FieldByName('CODIGO').AsString := TablaArticulos.FieldByName('CODIGO').AsString;
|
|
end;
|
|
|
|
procedure TfrArticulo.actEliminarUpdate(Sender: TObject);
|
|
begin
|
|
(Sender as TAction).Enabled := (Modo in [Anadir, Modificar]);
|
|
end;
|
|
|
|
procedure TfrArticulo.calcularPrecioFinal;
|
|
var
|
|
liPrecioFinal: Double;
|
|
begin
|
|
liPrecioFinal := PrecioPro.Value - ((PrecioPro.Value * Descuento.Value) / 100);
|
|
PrecioFinal.Value := liPrecioFinal;
|
|
end;
|
|
|
|
procedure TfrArticulo.PrecioProExit(Sender: TObject);
|
|
begin
|
|
calcularPrecioFinal;
|
|
end;
|
|
|
|
procedure TfrArticulo.DescuentoExit(Sender: TObject);
|
|
begin
|
|
calcularPrecioFinal;
|
|
end;
|
|
|
|
procedure TfrArticulo.DtoDetalleSetText(Sender: TField;
|
|
const Text: String);
|
|
begin
|
|
try
|
|
if Length(Text) = 0 then
|
|
begin
|
|
Sender.AsString := '0';
|
|
Exit;
|
|
end;
|
|
|
|
if (StrToFloat(Text) < 0) or (StrToFloat(Text) > 100) then
|
|
raise Exception.Create(msgDtoNoValido);
|
|
|
|
Sender.AsString := Text;
|
|
calcularPrecioFinalDetalle;
|
|
|
|
except
|
|
on E : EConvertError do
|
|
VerMensaje(msgDtoNoValido);
|
|
on E : EDataBaseError do
|
|
VerMensaje(msgDtoNoValido);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrArticulo.calcularPrecioFinalDetalle;
|
|
var
|
|
liPrecioFinal: Double;
|
|
liDescuento: Double;
|
|
begin
|
|
liPrecioFinal:= TablaArticulosFabProMem.FieldByName('PRECIO').AsFloat;
|
|
liDescuento := TablaArticulosFabProMem.FieldByName('DESCUENTO').AsFloat;
|
|
|
|
liPrecioFinal := liPrecioFinal - ((liPrecioFinal * liDescuento) / 100);
|
|
TablaArticulosFabProMem.FieldByName('PRECIOFINAL').AsFloat := liPrecioFinal;
|
|
end;
|
|
|
|
procedure TfrArticulo.PrecioDetalleSetText(Sender: TField;
|
|
const Text: String);
|
|
begin
|
|
try
|
|
if Length(Text) = 0 then
|
|
begin
|
|
Sender.AsString := '0';
|
|
Exit;
|
|
end;
|
|
|
|
Sender.AsString := Text;
|
|
calcularPrecioFinalDetalle;
|
|
|
|
except
|
|
on E : EConvertError do
|
|
VerMensaje(msgPrecioNoValido);
|
|
on E : EDataBaseError do
|
|
VerMensaje(msgPrecioNoValido);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrArticulo.PrecioSetText(Sender: TField; const Text: String);
|
|
begin
|
|
try
|
|
if Length(Text) = 0 then
|
|
begin
|
|
Sender.AsString := '0';
|
|
Exit;
|
|
end;
|
|
|
|
Sender.AsString := Text
|
|
except
|
|
on E : EConvertError do
|
|
VerMensaje(msgPrecioNoValido);
|
|
on E : EDataBaseError do
|
|
VerMensaje(msgPrecioNoValido);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrArticulo.PrecioFinalPropertiesChange(Sender: TObject);
|
|
begin
|
|
e2PrecioFinal.Caption := PrecioFinal.Text;
|
|
end;
|
|
|
|
end.
|