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/Articulos/Articulo.pas
2007-06-21 15:47:20 +00:00

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.