git-svn-id: https://192.168.0.254/svn/Proyectos.Acana_FactuGES/trunk@4 3f40d355-893c-4141-8e64-b1d9be72e7e7
571 lines
16 KiB
ObjectPascal
571 lines
16 KiB
ObjectPascal
{
|
|
===============================================================================
|
|
Copyright (©) 2002. 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: 26-01-2003
|
|
Versión actual: 1.0.1
|
|
Fecha versión actual: 07-06-2003
|
|
===============================================================================
|
|
Modificaciones:
|
|
|
|
Fecha Comentarios
|
|
---------------------------------------------------------------------------
|
|
07-06-2003 Se almacenaba correctamente el valor 'TIPOENTRADA' en la tabla
|
|
cuando era una salida. Siempre ponía 'E'.
|
|
===============================================================================
|
|
}
|
|
|
|
unit DetalleLibro;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
RdxBotones, StdCtrls, RdxMemo, RdxComboBox, RdxCampos, ExtCtrls,
|
|
RdxTitulos, ComCtrls, RdxCheckBox, Grids, DBGrids, RdxPaneles,
|
|
RdxBarras, Db, RdxFrame, RdxDBFrame, RXDBCtrl,
|
|
RdxPageControl, IB, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
|
|
cxEdit, cxDBData, cxClasses, cxControls, RxMemDS, Configuracion, cxMemo,
|
|
cxDBEdit, cxContainer, cxTextEdit, cxMaskEdit, cxButtonEdit, AdvPanel,
|
|
cxDropDownEdit, cxCalendar, RdxFrameDetallesLibro, Entidades,
|
|
|
|
RdxEmpresaActiva;
|
|
|
|
type
|
|
TfrDetalleLibro = class(TRdxFrameDetallesLibro)
|
|
pnlCuerpo: TPanel;
|
|
brDoble: TRdxBarraInferior;
|
|
bGuardar: TRdxBoton;
|
|
bCancelar: TRdxBoton;
|
|
brSimple: TRdxBarraInferior;
|
|
bSalir: TRdxBoton;
|
|
pnlTitulo: TRdxPanelTituloOperacion;
|
|
dsDetallesLibro: TDataSource;
|
|
pnlDetalleLibro: TAdvPanel;
|
|
eNumEntrada: TLabel;
|
|
eCuantia: TLabel;
|
|
eFechaEntrada: TLabel;
|
|
eDescripcion: TLabel;
|
|
NumeroEntrada: TcxDBButtonEdit;
|
|
Cuantia: TcxDBTextEdit;
|
|
Descripcion: TcxDBMemo;
|
|
FechaEntrada: TcxDBDateEdit;
|
|
procedure bAceptarClick(Sender: TObject);
|
|
procedure bSalirClick(Sender: TObject);
|
|
procedure bCancelarClick(Sender: TObject);
|
|
procedure CodigoPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
|
|
private
|
|
//Por si en un futuro permitimos introducir el codigo de entrada a mano
|
|
procedure asignarCodigoCajaA;
|
|
procedure asignarCodigoCajaB;
|
|
procedure asignarCodigoBancoA;
|
|
procedure asignarCodigoBancoB;
|
|
protected
|
|
procedure ActivarModoAnadir; override;
|
|
procedure ActivarModoModificar; override;
|
|
procedure ActivarModoConsultar; override;
|
|
function AnadirDatos : Boolean; override;
|
|
function ModificarDatos : Boolean; override;
|
|
function CancelarAnadir : Boolean; override;
|
|
function CancelarModificar : Boolean; override;
|
|
function ComprobarDatos : Boolean; override;
|
|
procedure VerModal; override;
|
|
procedure FreeContenido; override;
|
|
procedure SetNumEntrada (Value : Variant); override;
|
|
procedure BuscarNumEntrada; override;
|
|
procedure CuantiaSetText(Sender: TField; const Text: String);
|
|
public
|
|
constructor Create (AOwner : TComponent); override;
|
|
destructor Destroy; override;
|
|
published
|
|
end;
|
|
|
|
var
|
|
frDetalleLibro: TfrDetalleLibro;
|
|
|
|
implementation
|
|
{$R *.DFM}
|
|
|
|
uses
|
|
IBCustomDataSet, Mensajes, Variants, BaseDatos, StrFunc, Constantes,
|
|
Excepciones, IBErrorCodes, Literales, TablaLibros, DetallesLibro,
|
|
TablaEmpresas;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// PRIVATE
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
procedure TfrDetalleLibro.asignarCodigoCajaA;
|
|
begin
|
|
{
|
|
if (Length(NumeroEntrada.Text) = 0) then
|
|
NumeroEntrada.DataBinding.Field.AsString := dmTablaLibros.darNuevoCodigoCajaA;
|
|
|
|
if (dmTablaLibros.validarCodigoCajaA(NumeroEntrada.Text)) then
|
|
begin
|
|
NumeroEntrada.DataBinding.Field.AsString := dmTablaLibros.formatearCodigoCajaA(NumeroEntrada.Text);
|
|
if (dmTablaLibros.existeDetalleLibro(CodigoLibro, NumeroEntrada.Text)) then begin
|
|
VerMensajeFmt(msgLibNumEntRepetida, [NumeroEntrada.Text]);
|
|
NumeroEntrada.SetFocus;
|
|
end;
|
|
end
|
|
else begin
|
|
VerMensajeFmt(msgLibNumEntIncorrecta, [NumeroEntrada.Text]);
|
|
NumeroEntrada.SetFocus;
|
|
end;
|
|
}
|
|
end;
|
|
|
|
procedure TfrDetalleLibro.asignarCodigoCajaB;
|
|
begin
|
|
{
|
|
if (Length(NumeroEntrada.Text) = 0) then
|
|
NumeroEntrada.DataBinding.Field.AsString := dmTablaLibros.darNuevoCodigoCajaB;
|
|
|
|
if (dmTablaLibros.validarCodigoCajaB(NumeroEntrada.Text)) then
|
|
begin
|
|
NumeroEntrada.DataBinding.Field.AsString := dmTablaLibros.formatearCodigoCajaB(NumeroEntrada.Text);
|
|
if (dmTablaLibros.existeDetalleLibro(CodigoLibro, NumeroEntrada.Text)) then begin
|
|
VerMensajeFmt(msgLibNumEntRepetida, [NumeroEntrada.Text]);
|
|
NumeroEntrada.SetFocus;
|
|
end;
|
|
end
|
|
else begin
|
|
VerMensajeFmt(msgLibNumEntIncorrecta, [NumeroEntrada.Text]);
|
|
NumeroEntrada.SetFocus;
|
|
end;
|
|
}
|
|
end;
|
|
|
|
procedure TfrDetalleLibro.asignarCodigoBancoA;
|
|
begin
|
|
{
|
|
if (Length(NumeroEntrada.Text) = 0) then
|
|
NumeroEntrada.DataBinding.Field.AsString := dmTablaLibros.darNuevoCodigoBancoA;
|
|
|
|
if (dmTablaLibros.validarCodigoBancoA(NumeroEntrada.Text)) then
|
|
begin
|
|
NumeroEntrada.DataBinding.Field.AsString := dmTablaLibros.formatearCodigoBancoA(NumeroEntrada.Text);
|
|
if (dmTablaLibros.existeDetalleLibro(CodigoLibro, NumeroEntrada.Text)) then begin
|
|
VerMensajeFmt(msgLibNumEntRepetida, [NumeroEntrada.Text]);
|
|
NumeroEntrada.SetFocus;
|
|
end;
|
|
end
|
|
else begin
|
|
VerMensajeFmt(msgLibNumEntIncorrecta, [NumeroEntrada.Text]);
|
|
NumeroEntrada.SetFocus;
|
|
end;
|
|
}
|
|
end;
|
|
|
|
procedure TfrDetalleLibro.asignarCodigoBancoB;
|
|
begin
|
|
{
|
|
if (Length(NumeroEntrada.Text) = 0) then
|
|
NumeroEntrada.DataBinding.Field.AsString := dmTablaLibros.darNuevoCodigoBancoB;
|
|
|
|
if (dmTablaLibros.validarCodigoBancoB(NumeroEntrada.Text)) then
|
|
begin
|
|
NumeroEntrada.DataBinding.Field.AsString := dmTablaLibros.formatearCodigoBancoB(NumeroEntrada.Text);
|
|
if (dmTablaLibros.existeDetalleLibro(CodigoLibro, NumeroEntrada.Text)) then begin
|
|
VerMensajeFmt(msgLibNumEntRepetida, [NumeroEntrada.Text]);
|
|
NumeroEntrada.SetFocus;
|
|
end;
|
|
end
|
|
else begin
|
|
VerMensajeFmt(msgLibNumEntIncorrecta, [NumeroEntrada.Text]);
|
|
NumeroEntrada.SetFocus;
|
|
end;
|
|
}
|
|
end;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// PROTECTED
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
procedure TfrDetalleLibro.ActivarModoAnadir;
|
|
var
|
|
CodNuevo : Variant;
|
|
begin
|
|
|
|
dsDetallesLibro.AutoEdit := True;
|
|
NumeroEntrada.Properties.Buttons[0].Visible := False;
|
|
NumeroEntrada.Properties.ReadOnly := True;
|
|
FechaEntrada.Properties.ReadOnly := False;
|
|
Cuantia.Properties.ReadOnly := False;
|
|
|
|
|
|
try
|
|
if (TipoLibro = 'C') then
|
|
CodNuevo := dmTablaLibros.DarNuevoCodigoCaja
|
|
else if (TipoLibro = 'B') then
|
|
CodNuevo := dmTablaLibros.DarNuevoCodigoBanco
|
|
else
|
|
VerMensaje('LOG: fallo gordo con los contadores de libros');
|
|
|
|
with TablaDetallesLibro do
|
|
begin
|
|
Close;
|
|
Prepare;
|
|
Open;
|
|
Insert;
|
|
FieldByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
FieldByName('TIPOLIBRO').AsString := TipoLibro;
|
|
FieldByName('NUMENTRADA').AsString := CodNuevo;
|
|
FieldByName('TIPOENTRADA').AsString := 'E';
|
|
FieldByName('FECHAALTA').AsDateTime := dmBaseDatos.DarFecha;
|
|
FieldByName('USUARIO').AsString := dmBaseDatos.Usuario;
|
|
FieldByName('FECHAENTRADA').AsDateTime := dmBaseDatos.DarFecha;
|
|
FieldByName('CUANTIA').AsString := '0';
|
|
FieldByName('CUANTIA').OnSetText := CuantiaSetText;
|
|
end;
|
|
|
|
dmTablaLibros.InicializarTablaDetallesLibro(@TablaDetallesLibro);
|
|
|
|
Visible := True;
|
|
Descripcion.SetFocus;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrDetalleLibro.ActivarModoModificar;
|
|
begin
|
|
|
|
dsDetallesLibro.AutoEdit := True;
|
|
NumeroEntrada.Properties.Buttons[0].Visible := True;
|
|
NumeroEntrada.Properties.ReadOnly := True;
|
|
FechaEntrada.Properties.ReadOnly := True;
|
|
Cuantia.Properties.ReadOnly := True;
|
|
|
|
try
|
|
with TablaDetallesLibro do
|
|
begin
|
|
Prepare;
|
|
Open;
|
|
if RecordCount = 0 then
|
|
begin
|
|
VerMensajeFmt(msgLibNoExisteEnt, [NumEntrada]);
|
|
CancelarAnadir;
|
|
CloseFrame;
|
|
Exit;
|
|
end;
|
|
// Bloquear la entrada
|
|
Edit;
|
|
Post;
|
|
Edit;
|
|
end;
|
|
|
|
dmTablaLibros.InicializarTablaDetallesLibro(@TablaDetallesLibro);
|
|
|
|
Visible := True;
|
|
bGuardar.SetFocus;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrDetalleLibro.ActivarModoConsultar;
|
|
begin
|
|
|
|
dsDetallesLibro.AutoEdit := False;
|
|
NumeroEntrada.Properties.Buttons[0].Visible := True;
|
|
|
|
try
|
|
with TablaDetallesLibro do
|
|
begin
|
|
Prepare;
|
|
Open;
|
|
if RecordCount = 0 then
|
|
begin
|
|
VerMensajeFmt(msgLibNoExisteEnt, [NumEntrada]);
|
|
CancelarAnadir;
|
|
CloseFrame;
|
|
Exit;
|
|
end;
|
|
end;
|
|
|
|
dmTablaLibros.InicializarTablaDetallesLibro(@TablaDetallesLibro);
|
|
|
|
Visible := True;
|
|
bSalir.SetFocus;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
function TfrDetalleLibro.AnadirDatos : boolean;
|
|
var
|
|
Importe : Double;
|
|
begin
|
|
Result := False;
|
|
try
|
|
if Entidad = entEntLibro then
|
|
begin
|
|
Importe := TablaDetallesLibro.FieldByName('CUANTIA').AsFloat;
|
|
TablaDetallesLibro.FieldByName('TIPOENTRADA').AsString := CTE_ENT;
|
|
end
|
|
else if Entidad = entSalLibro then
|
|
begin
|
|
Importe := (-1) * TablaDetallesLibro.FieldByName('CUANTIA').AsFloat;
|
|
TablaDetallesLibro.FieldByName('TIPOENTRADA').AsString := CTE_SAL;
|
|
end
|
|
else VerMensaje('LOG:Error no esta asignada la entidad');
|
|
|
|
TablaDetallesLibro.FieldByName('IMPORTEANT').AsFloat := dmTablaLibros.darUltimoImportePos(TipoLibro);
|
|
TablaDetallesLibro.FieldByName('IMPORTEPOS').AsFloat := TablaDetallesLibro.FieldByName('IMPORTEANT').AsFloat + Importe;
|
|
TablaDetallesLibro.FieldByName('CUANTIA').AsFloat := Importe;
|
|
TablaDetallesLibro.Post;
|
|
|
|
TipoLibro := TablaDetallesLibro.FieldByName('TIPOLIBRO').AsString;
|
|
NumEntrada := TablaDetallesLibro.FieldByName('NUMENTRADA').AsString;
|
|
|
|
if (TipoLibro = 'C') then
|
|
dmTablaLibros.IncrementarCodigoCaja
|
|
else if (TipoLibro = 'B') then
|
|
dmTablaLibros.IncrementarCodigoBanco
|
|
else
|
|
VerMensaje('LOG: fallo gordo con los contadores de libros');
|
|
|
|
Commit;
|
|
|
|
TablaDetallesLibro.Close;
|
|
|
|
Result := True;
|
|
except
|
|
on E : EIBError do begin
|
|
if E.IBErrorCode = isc_unique_key_violation then
|
|
begin
|
|
VerMensajeFmt(msgLibNumEntRepetida, [NumEntrada.DataBinding.Field.AsString]);
|
|
TablaDetallesLibro.Edit;
|
|
end
|
|
else
|
|
TratarExcepcion(E);
|
|
end;
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
function TfrDetalleLibro.ModificarDatos : boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
TablaDetallesLibro.Post;
|
|
Commit;
|
|
TablaDetallesLibro.Close;
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
begin
|
|
case E.IBErrorCode of
|
|
isc_lock_conflict : VerMensajeFmt(msgLibEntBloqueada, [NumeroEntrada.DataBinding.Field.AsString]);
|
|
else
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
function TfrDetalleLibro.CancelarAnadir: Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
RollBack;
|
|
TablaDetallesLibro.Close;
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
function TfrDetalleLibro.ComprobarDatos: Boolean;
|
|
begin
|
|
Result := False;
|
|
|
|
if EsCadenaVacia(Descripcion.Text) then
|
|
begin
|
|
VerMensaje(msgLibFaltaDescEnt);
|
|
Descripcion.SetFocus;
|
|
Exit;
|
|
end;
|
|
Result := True;
|
|
end;
|
|
|
|
procedure TfrDetalleLibro.VerModal;
|
|
begin
|
|
if (ContenidoModal is TRdxFrameDetallesLibro) then
|
|
(ContenidoModal as TRdxFrameDetallesLibro).TipoLibro := TipoLibro;
|
|
(ContenidoModal as TRdxFrameDetallesLibro).NumEntrada := NumEntrada;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TfrDetalleLibro.FreeContenido;
|
|
begin
|
|
if (ContenidoModal is TRdxFrameDetallesLibro) then begin
|
|
TipoLibro := (ContenidoModal as TRdxFrameDetallesLibro).TipoLibro;
|
|
NumEntrada := (ContenidoModal as TRdxFrameDetallesLibro).NumEntrada;
|
|
ActivarModo;
|
|
end;
|
|
inherited FreeContenido;
|
|
end;
|
|
|
|
procedure TfrDetalleLibro.BuscarNumEntrada;
|
|
begin
|
|
if Transaccion = NIL then
|
|
exit;
|
|
try
|
|
TablaDetallesLibro.Close;
|
|
|
|
// Buscar la fila a tratar si es necesario
|
|
if not esCadenaVacia(TipoLibro) and not esCadenaVacia(NumEntrada) then
|
|
begin
|
|
TablaDetallesLibro.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
TablaDetallesLibro.ParamByName('TIPOLIBRO').AsString := TipoLibro;
|
|
TablaDetallesLibro.ParamByName('NUMENTRADA').AsString := NumEntrada;
|
|
end;
|
|
TablaDetallesLibro.Prepare;
|
|
TablaDetallesLibro.Open;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrDetalleLibro.CuantiaSetText(Sender: TField; const Text: String);
|
|
begin
|
|
if EsCadenaVacia(Text) then begin
|
|
Sender.AsString := '0';
|
|
exit;
|
|
end;
|
|
|
|
try
|
|
if StrToFloat(Text) < 0
|
|
then begin
|
|
VerMensaje (msgImportePositivo);
|
|
Sender.AsFloat := (-1) * StrToFloat(Text)
|
|
end
|
|
else Sender.AsString := Text;
|
|
except
|
|
on E : EConvertError do begin
|
|
Sender.AsString := '0'
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// PUBLIC
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
constructor TfrDetalleLibro.Create (AOwner : TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
BaseDatos := dmBaseDatos.BD;
|
|
Transaccion := dmBaseDatos.Transaccion;
|
|
|
|
TablaDetallesLibro := TIBDataSet.Create(Self);
|
|
dsDetallesLibro.DataSet := TablaDetallesLibro;
|
|
|
|
with TablaDetallesLibro do
|
|
begin
|
|
Database := BaseDatos;
|
|
Transaction := Transaccion;
|
|
SelectSQL.Assign(dmTablaLibros.sqlConsultarDetalleLibro);
|
|
InsertSQL.Assign(dmTablaLibros.sqlInsertarDetalleLibro);
|
|
ModifySQL.Assign(dmTablaLibros.sqlModificarDetalleLibro);
|
|
DeleteSQL.Assign(dmTablaLibros.sqlEliminarDetalleLibro);
|
|
RefreshSQL.Assign(dmTablaLibros.sqlConsultarDetalleLibro);
|
|
end;
|
|
end;
|
|
|
|
destructor TfrDetalleLibro.Destroy;
|
|
begin
|
|
TablaDetallesLibro.Close;
|
|
TablaDetallesLibro.UnPrepare;
|
|
TablaDetallesLibro.Free;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TfrDetalleLibro.bAceptarClick(Sender: TObject);
|
|
begin
|
|
if (RealizarOperacion) then
|
|
CloseFrame;
|
|
end;
|
|
|
|
procedure TfrDetalleLibro.bSalirClick(Sender: TObject);
|
|
begin
|
|
try
|
|
Rollback;
|
|
CloseFrame;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrDetalleLibro.bCancelarClick(Sender: TObject);
|
|
begin
|
|
if (TratarCambios = IDOK) then
|
|
CloseFrame;
|
|
end;
|
|
|
|
procedure TfrDetalleLibro.CodigoPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
|
|
begin
|
|
if (TratarCambios = IDCANCEL) then
|
|
exit;
|
|
ContenidoModal := TfrDetallesLibro.Create(Self);
|
|
end;
|
|
|
|
function TfrDetalleLibro.CancelarModificar: Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
RollBack;
|
|
TablaDetallesLibro.Close;
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrDetalleLibro.SetNumEntrada(Value: Variant);
|
|
begin
|
|
inherited;
|
|
if VarIsNull(Value) then
|
|
exit;
|
|
|
|
if (Modo <> Anadir) then begin
|
|
if (TablaDetallesLibro.FieldByName('CUANTIA').AsFloat < 0)
|
|
then Entidad := entSalLibro
|
|
else Entidad := entEntLibro;
|
|
end;
|
|
end;
|
|
|
|
end.
|