This repository has been archived on 2024-12-02. You can view files and clone it, but cannot push or open issues or pull requests.
FactuGES/Clientes/AlbaranCliente.pas
2007-06-26 08:08:27 +00:00

1566 lines
45 KiB
ObjectPascal

{
===============================================================================
Copyright (©) 2005. 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: 30-09-2005
Versión actual: 1.0.0
Fecha versión actual: 30-09-2005
===============================================================================
Modificaciones:
Fecha Comentarios
---------------------------------------------------------------------------
===============================================================================
}
unit AlbaranCliente;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids, RdxBotones, RdxTitulos, StdCtrls,
RdxMemo, RdxCampos, ExtCtrls, RdxComboBox, RdxPaneles, RdxBarras, ComCtrls,
RdxRichEdit, RXDBCtrl, RdxFrame, RdxPageControl, Db,
RdxRadioButton, RxMemDS, IBCustomDataSet,
cxStyles, cxCustomData, cxGraphics,
cxFilter, cxData, cxEdit, cxDBData, cxGridLevel, cxClasses, cxControls,
cxGridCustomView, cxGridCustomTableView, cxGridTableView,
cxGridDBTableView, cxGrid, Configuracion, cxContainer, cxTextEdit,
cxMaskEdit, cxDropDownEdit, cxCalendar, cxDBEdit,
cxButtonEdit, cxMemo, cxSpinEdit, AdvPanel, ActnList, Menus,
am2000menuitem, am2000popupmenu, am2000, RdxCheckBox, cxCheckBox, cxCalc,
cxCurrencyEdit,
RdxFrameAlbaranesCliente, RdxEmpresaActiva, am2000utils, cxDataStorage;
type
TfrAlbaranCliente = class(TRdxFrameAlbaranesCliente)
brSalir: TRdxBarraInferior;
bSalir: TRdxBoton;
brGuardar: TRdxBarraInferior;
bGuardar: TRdxBoton;
bCancelar: TRdxBoton;
Titulo: TRdxPanelTituloOperacion;
dsAlbaran: TDataSource;
dsDetallesAlbaranes: TDataSource;
pnlCuerpo: TPanel;
pnlDatosAlbaran: TAdvPanel;
eCodigo: TLabel;
Label1: TLabel;
Codigo: TcxDBButtonEdit;
FechaAlbaran: TcxDBDateEdit;
pnlGrid: TAdvPanel;
Paginas: TRdxPagesControl;
pagCliente: TTabSheet;
pagContenido: TTabSheet;
pnlGridArticulos: TPanel;
pnlBarraGrid: TPanel;
bAnadirCon: TRdxBoton;
bEliminar: TRdxBoton;
bEliminarTodo: TRdxBoton;
gridDetalles: TcxGrid;
VistaDetalles: TcxGridDBTableView;
gridDetallesLevel1: TcxGridLevel;
pagObservaciones: TTabSheet;
RdxPanel4: TPanel;
Label3: TLabel;
RdxPanel5: TPanel;
Observaciones: TcxDBMemo;
Label2: TLabel;
CodCliente: TcxDBButtonEdit;
eNIFCIF: TLabel;
NIFCIF: TcxDBTextEdit;
eNombre: TLabel;
Nombre: TcxDBTextEdit;
eDireccion: TLabel;
Calle: TcxDBTextEdit;
eProvincia: TLabel;
Provincia: TcxDBButtonEdit;
ePoblacion: TLabel;
Poblacion: TcxDBButtonEdit;
eTelefono1: TLabel;
Telefono1: TcxDBTextEdit;
eTelefono2: TLabel;
Telefono2: TcxDBTextEdit;
eNumero: TLabel;
Numero: TcxDBTextEdit;
ePiso: TLabel;
Piso: TcxDBTextEdit;
eCodigoPostal: TLabel;
CodigoPostal: TcxDBTextEdit;
eFax: TLabel;
Fax: TcxDBTextEdit;
eMovil2: TLabel;
Movil2: TcxDBTextEdit;
eMovil1: TLabel;
Movil1: TcxDBTextEdit;
ePersona: TLabel;
PersonaContacto: TcxDBTextEdit;
ActionList1: TActionList;
actAnadirConcepto: TAction;
actEliminar: TAction;
actEliminarTodo: TAction;
pnlImportes: TAdvPanel;
Label7: TLabel;
Label8: TLabel;
Panel1: TPanel;
Label5: TLabel;
Label9: TLabel;
BaseImponible: TcxDBTextEdit;
ImporteTotal: TcxDBTextEdit;
ImporteDescuento: TcxDBTextEdit;
ImporteIVA: TcxDBTextEdit;
RdxPanel1: TRdxPanel;
Label10: TLabel;
Label11: TLabel;
Shape2: TShape;
Panel2: TPanel;
Descuento: TcxDBTextEdit;
IVA: TcxDBTextEdit;
procedure bCancelarClick(Sender: TObject);
procedure bSalirClick(Sender: TObject);
procedure bGuardarClick(Sender: TObject);
procedure CodigoExit(Sender: TObject);
procedure CodClienteExit(Sender: TObject);
procedure CodigoPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
procedure CodClientePropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
procedure ProvinciaPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
procedure PoblacionPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
procedure actAnadirConceptoExecute(Sender: TObject);
procedure actEliminarExecute(Sender: TObject);
procedure actEliminarTodoExecute(Sender: TObject);
procedure actEliminarUpdate(Sender: TObject);
procedure actEliminarTodoUpdate(Sender: TObject);
private
FCodigoProvincia : Variant;
FCodigoPoblacion : Variant;
FCodigoCliente : Variant;
FCodigoArticulo : Variant;
FTablaDetallesMem : TRxMemoryData;
procedure CalcularTotalDetalle;
procedure CalcularTotalAlbaran;
procedure ActivarEventosCampos;
procedure DesactivarEventosCampos;
procedure CodCliSetText(Sender: TField; const Text: String);
procedure IVASetText(Sender: TField; const Text: String);
procedure DtoSetText(Sender: TField; const Text: String);
procedure RESetText(Sender: TField; const Text: String);
procedure BorrarDetalles;
procedure SalvarDetalles;
procedure CargarDetalles;
procedure BorrarDetallesIB;
procedure ReordenarDetallesMem;
procedure IntercambiarDetallesMem(PosCon1, PosCon2 : Integer);
procedure DetalleAfterDelete (DataSet: TDataSet);
procedure GridBotonCodigoArticuloClick(Sender: TObject; AButtonIndex: Integer);
procedure CodigoArticuloDetalleSetText(Sender: TField; const Text: String);
procedure ReferenciaArticuloDetalleSetText(Sender: TField; const Text: String);
procedure CantidadDetalleSetText(Sender: TField; const Text: String);
procedure PrecioDetalleSetText(Sender: TField; const Text: String);
procedure ProvinciaSetText(Sender: TField; const Text: String);
procedure DetallesAfterInsert(DataSet: TDataSet);
procedure GridBotonReferenciaArticuloClick(Sender: TObject; AButtonIndex: Integer);
function GetCodigoCliente: Variant;
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 SetCodigoCliente (Value : Variant);
procedure SetCodigoArticulo (Value : Variant);
procedure FreeContenido; override;
procedure BuscarAlbaran; override;
public
property CodigoProvincia : Variant read FCodigoProvincia write SetCodigoProvincia;
property CodigoPoblacion : Variant read FCodigoPoblacion write SetCodigoPoblacion;
property CodigoCliente : Variant read GetCodigoCliente write SetCodigoCliente;
property CodigoArticulo : Variant read FCodigoArticulo write SetCodigoArticulo;
constructor Create (AOwner : TComponent); override;
destructor Destroy; override;
published
property TablaAlbaranes;
property TablaDetallesAlbaranes;
property TablaDetallesMem : TRxMemoryData read FTablaDetallesMem write FTablaDetallesMem;
end;
var
frAlbaranCliente: TfrAlbaranCliente;
implementation
{$R *.DFM}
uses
Variants, Entidades, AlbaranesClientes, BaseDatos, IBDatabase,
Mensajes, Clientes, RdxFrameProvincias, RdxFramePoblaciones, TablaTrimestres,
TablaProvincias, Provincias, Poblaciones, TablaClientes, RdxFrameClientes,
IB, Articulos, RdxFrameArticulos, TablaArticulos, Constantes,
StrFunc, TablaPoblaciones, TablaFormasPago, NumFunc,
IBSQL, Excepciones, IBErrorCodes, Literales, ElegirDireccionCliente,
TablaAlbaranesCliente, TablaEmpresas;
procedure TfrAlbaranCliente.bCancelarClick(Sender: TObject);
begin
if (TratarCambios = IDOK) then
CloseFrame;
end;
procedure TfrAlbaranCliente.bSalirClick(Sender: TObject);
begin
try
Rollback;
CloseFrame;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlbaranCliente.bGuardarClick(Sender: TObject);
begin
if (RealizarOperacion) then
CloseFrame;
end;
procedure TfrAlbaranCliente.ActivarEventosCampos;
begin
with TablaAlbaranes do
begin
FieldByName('CODIGOCLIENTE').OnSetText := CodCliSetText;
FieldByName('IVA').OnSetText := IVASetText;
FieldByName('DESCUENTO').OnSetText := DtoSetText;
end;
with TablaDetallesMem do
begin
FieldByName('CODIGOARTICULO').OnSetText := CodigoArticuloDetalleSetText;
FieldByName('REFERENCIA').OnSetText := ReferenciaArticuloDetalleSetText;
FieldByName('CANTIDAD').OnSetText := CantidadDetalleSetText;
FieldByName('IMPORTEUNIDAD').OnSetText := PrecioDetalleSetText;
AfterDelete := DetalleAfterDelete;
AfterInsert := DetallesAfterInsert;
end;
with VistaDetalles do
begin
TcxButtonEditProperties(GetColumnByFieldName('CODIGOARTICULO').Properties).OnButtonClick := GridBotonCodigoArticuloClick;
TcxButtonEditProperties(GetColumnByFieldName('REFERENCIA').Properties).OnButtonClick := GridBotonReferenciaArticuloClick;
end;
end;
procedure TfrAlbaranCliente.ActivarModoAnadir;
var
CodNuevo : Variant;
begin
dsAlbaran.AutoEdit := True;
dsDetallesAlbaranes.AutoEdit := True;
pnlBarraGrid.Visible := True;
Codigo.Properties.Buttons[0].Visible := False;
Codigo.Properties.ReadOnly := False;
CodCliente.Properties.Buttons[0].Visible := True;
Poblacion.Properties.Buttons[0].Visible := True;
Provincia.Properties.Buttons[0].Visible := True;
try
CodNuevo := dmTablaAlbaranesCliente.DarNuevoCodigo;
with TablaAlbaranes do
begin
Close;
Prepare;
Open;
FieldByName('PROVINCIA').OnSetText := ProvinciaSetText;
Insert;
Codigo.DataBinding.Field.AsString := CodNuevo;
FieldByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
FieldByName('FECHAALTA').AsDateTime := dmBaseDatos.DarFecha;
FieldByName('USUARIO').AsString := dmBaseDatos.Usuario;
//FieldByName('IVA').AsString := EmpresaActiva.IvaDefecto; <-- los albaranes no tienen IVA
FechaAlbaran.DataBinding.Field.AsDateTime := dmBaseDatos.DarFecha;
end;
with TablaDetallesAlbaranes do
begin
Close;
ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
ParamByName('CODIGOALBARAN').AsString := CodNuevo;
Prepare;
Open;
end;
with TablaDetallesMem do
begin
Close;
Open;
if not IsEmpty then
Edit;
end;
dmTablaAlbaranesCliente.InicializarTabla(@TablaAlbaranes);
dmTablaAlbaranesCliente.InicializarTablaDetalles(@TablaDetallesMem);
ActivarEdicionGridDetalles(gridDetalles);
ActivarEventosCampos;
Visible := True;
FechaAlbaran.SetFocus;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlbaranCliente.ActivarModoConsultar;
begin
dsAlbaran.AutoEdit := False;
dsDetallesAlbaranes.AutoEdit := False;
pnlBarraGrid.Visible := False;
Codigo.Properties.Buttons[0].Visible := True;
CodCliente.Properties.Buttons[0].Visible := False;
Poblacion.Properties.Buttons[0].Visible := False;
Provincia.Properties.Buttons[0].Visible := False;
try
with TablaAlbaranes do
begin
Prepare;
Open;
if RecordCount = 0 then
begin
VerMensajeFmt(msgCliNoExisteFac, [CodigoAlbaran]);
CloseFrame;
Exit;
end;
Cancel;
end;
with TablaDetallesAlbaranes do
begin
Close;
Params.ByName('CODIGOALBARAN').AsString := CodigoAlbaran;
Prepare;
Open;
Cancel;
end;
with TablaDetallesMem do
begin
Close;
Open;
Cancel;
CargarDetalles;
end;
dmTablaAlbaranesCliente.InicializarTabla(@TablaAlbaranes);
dmTablaAlbaranesCliente.InicializarTablaDetalles(@TablaDetallesMem);
DesactivarEventosCampos;
DesactivarEdicionGridDetalles(gridDetalles);
Visible := True;
FechaAlbaran.SetFocus;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlbaranCliente.ActivarModoEliminar;
begin
dsAlbaran.AutoEdit := False;
dsDetallesAlbaranes.AutoEdit := False;
pnlBarraGrid.Visible := False;
Codigo.Properties.Buttons[0].Visible := True;
CodCliente.Properties.Buttons[0].Visible := False;
Poblacion.Properties.Buttons[0].Visible := False;
Provincia.Properties.Buttons[0].Visible := False;
try
with TablaAlbaranes do
begin
Prepare;
Open;
if RecordCount = 0 then
begin
VerMensajeFmt(msgCliNoExisteFac, [CodigoAlbaran]);
CancelarEliminar;
CloseFrame;
Exit;
end;
Cancel;
end;
with TablaDetallesAlbaranes do
begin
Close;
Params.ByName('CODIGOALBARAN').AsString := CodigoAlbaran;
Prepare;
Open;
Cancel;
end;
with TablaDetallesMem do
begin
Close;
Open;
Cancel;
CargarDetalles;
end;
dmTablaAlbaranesCliente.InicializarTabla(@TablaAlbaranes);
dmTablaAlbaranesCliente.InicializarTablaDetalles(@TablaDetallesMem);
DesactivarEventosCampos;
DesactivarEdicionGridDetalles(gridDetalles);
Visible := True;
FechaAlbaran.SetFocus;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlbaranCliente.ActivarModoModificar;
var
CodPreAlb : String;
CodCargo : string;
begin
dsAlbaran.AutoEdit := True;
dsDetallesAlbaranes.AutoEdit := True;
pnlBarraGrid.Visible := True;
Codigo.Properties.Buttons[0].Visible := True;
Codigo.Properties.ReadOnly := True;
CodCliente.Properties.Buttons[0].Visible := True;
Poblacion.Properties.Buttons[0].Visible := True;
Provincia.Properties.Buttons[0].Visible := True;
try
with TablaAlbaranes do
begin
Prepare;
Open;
FieldByName('PROVINCIA').OnSetText := ProvinciaSetText;
if RecordCount = 0 then
begin
VerMensajeFmt(msgCliNoExisteFacPro, [CodigoAlbaran]);
CancelarModificar;
CloseFrame;
Exit;
end;
Edit;
Post;
Edit;
end;
with TablaDetallesAlbaranes do
begin
Close;
Params.ByName('CODIGOALBARAN').AsString := CodigoAlbaran;
Prepare;
Open;
end;
with TablaDetallesMem do
begin
Close;
Open;
CargarDetalles;
end;
dmTablaAlbaranesCliente.InicializarTabla(@TablaAlbaranes);
dmTablaAlbaranesCliente.InicializarTablaDetalles(@TablaDetallesMem);
CalcularTotalAlbaran;
ActivarEdicionGridDetalles(gridDetalles);
FCodigoProvincia := dmTablaProvincias.DarCodigoProvincia(Provincia.Text);
ActivarEventosCampos;
Visible := True;
FechaAlbaran.SetFocus;
except
on E : EIBError do
begin
case E.IBErrorCode of
isc_lock_conflict : begin
VerMensajeFmt(msgCliFacProBloqueado, [CodigoAlbaran]);
CancelarModificar;
CloseFrame;
Exit;
end
else
TratarExcepcion(E);
end;
end;
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrAlbaranCliente.AnadirDatos: Boolean;
begin
try
CalcularTotalAlbaran;
TablaAlbaranes.Post;
BorrarDetallesIB;
SalvarDetalles;
dmTablaAlbaranesCliente.IncrementarCodigo;
Commit;
FCodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString;
TablaAlbaranes.Close;
TablaDetallesAlbaranes.Close;
TablaDetallesMem.Close;
Result := True;
except
on E : EIBError do begin
if E.IBErrorCode = isc_unique_key_violation then begin
VerMensajeFmt(msgCliCodFacProRepetido, [Codigo.DataBinding.Field.AsString]);
TablaAlbaranes.Edit;
end
else
TratarExcepcion(E);
end;
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlbaranCliente.BuscarAlbaran;
begin
if Transaccion = NIL then
exit;
try
TablaAlbaranes.DisableControls;
TablaDetallesAlbaranes.DisableControls;
TablaDetallesMem.DisableControls;
TablaAlbaranes.Close;
TablaDetallesAlbaranes.Close;
TablaDetallesMem.Close;
// Buscar la fila a tratar si es necesario
if not EsCadenaVacia(FCodigoAlbaran) then
begin
TablaAlbaranes.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
TablaAlbaranes.ParamByName('CODIGO').AsString := FCodigoAlbaran;
TablaDetallesAlbaranes.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
TablaDetallesAlbaranes.Params.ByName('CODIGOALBARAN').AsString := FCodigoAlbaran;
end;
TablaAlbaranes.Prepare;
TablaAlbaranes.Open;
TablaDetallesAlbaranes.Prepare;
TablaDetallesAlbaranes.Open;
TablaDetallesMem.Close;
TablaDetallesMem.Open;
CargarDetalles;
dmTablaAlbaranesCliente.InicializarTabla(@TablaAlbaranes);
dmTablaAlbaranesCliente.InicializarTablaDetalles(@TablaDetallesMem);
TablaAlbaranes.EnableControls;
TablaDetallesAlbaranes.EnableControls;
TablaDetallesMem.EnableControls;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlbaranCliente.CalcularTotalDetalle;
var
auxCantidad,
auxPrecio,
auxTotal : double;
begin
with TablaDetallesMem do
begin
Edit;
auxCantidad := FieldByName('CANTIDAD').AsFloat;
auxPrecio := FieldByName('IMPORTEUNIDAD').AsFloat;
auxTotal := (auxCantidad * auxPrecio);
FieldByName('IMPORTETOTAL').AsFloat := auxTotal;
end;
CalcularTotalAlbaran;
end;
procedure TfrAlbaranCliente.CalcularTotalAlbaran;
var
BaseImponible,
ImporteIVA,
ImporteDto,
ImporteTotal : Double;
FDetallesBookmark : string;
begin
BaseImponible := 0;
ImporteTotal := 0;
with TablaDetallesMem do
begin
DisableControls;
FDetallesBookmark := Bookmark;
try
First;
while not EOF do begin
BaseImponible := BaseImponible + FieldByName('IMPORTETOTAL').AsFloat;
Next;
end;
ImporteDto := BaseImponible * (TablaAlbaranes.FieldByName('DESCUENTO').AsFloat/100);
ImporteTotal := BaseImponible - ImporteDto;
ImporteIVA := ImporteTotal * (TablaAlbaranes.FieldByName('IVA').AsFloat/100);
ImporteTotal := ImporteTotal + ImporteIVA;
TablaAlbaranes.FieldByName('BASEIMPONIBLE').AsFloat := BaseImponible;
TablaAlbaranes.FieldByName('IMPORTEDESCUENTO').AsFloat := ImporteDto;
TablaAlbaranes.FieldByName('IMPORTEIVA').AsFloat := ImporteIVA;
TablaAlbaranes.FieldByName('IMPORTETOTAL').AsFloat := ImporteTotal;
finally
Bookmark := FDetallesBookmark;
EnableControls;
end;
end;
end;
function TfrAlbaranCliente.CancelarAnadir: Boolean;
begin
Result := False;
try
RollBack;
TablaDetallesMem.Close;
TablaAlbaranes.Close;
TablaDetallesAlbaranes.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrAlbaranCliente.CancelarEliminar: Boolean;
begin
Result := False;
try
RollBack;
TablaAlbaranes.Close;
TablaDetallesAlbaranes.Close;
TablaDetallesMem.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrAlbaranCliente.CancelarModificar: Boolean;
begin
Result := False;
try
RollBack;
TablaDetallesMem.Close;
TablaAlbaranes.Close;
TablaDetallesAlbaranes.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrAlbaranCliente.ComprobarDatos: Boolean;
begin
Result := False;
if EsCadenaVacia(FechaAlbaran.DataBinding.Field.AsString) then
begin
VerMensaje(msgCliFaltaFechaAlta);
FechaAlbaran.SetFocus;
Exit;
end;
if Modo = Anadir then
begin
if EsCadenaVacia(CodCliente.DataBinding.Field.AsString) then
begin
VerMensaje(msgCliFaltaCodCli);
Paginas.ActivePageIndex := 0;
CodCliente.SetFocus;
Exit;
end
end
else
begin
if EsCadenaVacia(Nombre.DataBinding.Field.AsString) then
begin
VerMensaje(msgCliFaltaNombreCli);
Paginas.ActivePageIndex := 0;
Nombre.SetFocus;
Exit;
end
end;
if TablaDetallesMem.IsEmpty then
begin
VerMensaje(msgCliFaltaArticulos);
Paginas.ActivePage := pagContenido;
gridDetalles.SetFocus;
Exit;
end;
Result := True;
end;
constructor TfrAlbaranCliente.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Entidad := entAlbaranCliente;
FCodigoProvincia := NULL;
FCodigoPoblacion := NULL;
FCodigoCliente := NULL;
FCodigoArticulo := NULL;
BaseDatos := dmBaseDatos.BD;
Transaccion := dmBaseDatos.Transaccion;
dmTablaArticulos.ArtModelo := entArticulo;
TablaAlbaranes := TIBDataSet.Create(Self);
TablaDetallesAlbaranes := TIBDataSet.Create(Self);
TablaDetallesMem := TRxMemoryData.Create(Self);
dsAlbaran.DataSet := TablaAlbaranes;
dsDetallesAlbaranes.DataSet := TablaDetallesMem;
with TablaAlbaranes do
begin
Database := BaseDatos;
Transaction := Transaccion;
SelectSQL.Assign(dmTablaAlbaranesCliente.sqlConsultar);
InsertSQL.Assign(dmTablaAlbaranesCliente.sqlInsertar);
ModifySQL.Assign(dmTablaAlbaranesCliente.sqlModificar);
DeleteSQL.Assign(dmTablaAlbaranesCliente.sqlEliminar);
end;
with TablaDetallesAlbaranes do
begin
Database := BaseDatos;
Transaction := Transaccion;
SelectSQL.Assign(dmTablaAlbaranesCliente.sqlConsultarGridDetalles);
InsertSQL.Assign(dmTablaAlbaranesCliente.sqlInsertarDetalles);
ModifySQL.Assign(dmTablaAlbaranesCliente.sqlModificarDetalles);
DeleteSQL.Assign(dmTablaAlbaranesCliente.sqlEliminarDetalles);
end;
with TablaDetallesMem do
begin
CopyStructure(TablaDetallesAlbaranes);
FieldByName('CODIGOALBARAN').Required := False;
FieldByName('NUMCONCEPTO').Required := False;
end;
dmTablaAlbaranesCliente.InicializarGridDetalles(gridDetalles);
Paginas.ActivePage := pagCliente;
end;
destructor TfrAlbaranCliente.Destroy;
begin
TablaDetallesMem.Close;
TablaDetallesMem.Free;
TablaAlbaranes.Close;
TablaAlbaranes.UnPrepare;
TablaAlbaranes.Free;
TablaDetallesAlbaranes.Close;
TablaDetallesAlbaranes.Unprepare;
TablaDetallesAlbaranes.Free;
inherited;
end;
function TfrAlbaranCliente.EliminarDatos: Boolean;
begin
Result := False;
try
if dmTablaAlbaranesCliente.EsUltima(Codigo.DataBinding.Field.AsString) then
dmTablaAlbaranesCliente.DecrementarCodigo;
TablaAlbaranes.Delete;
BorrarDetalles;
Commit;
TablaAlbaranes.Close;
TablaDetallesAlbaranes.Close;
TablaDetallesMem.Close;
Result := True;
except
on E : EIBError do
begin
case E.IBErrorCode of
isc_lock_conflict : VerMensajeFmt(msgCliFacProBloqueado, [Codigo.DataBinding.Field.AsString]);
else
TratarExcepcion(E);
end;
end;
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlbaranCliente.FreeContenido;
var
Contador : integer;
AListaCodigos : TStringList;
begin
if (ContenidoModal is TRdxFrameAlbaranesCliente) then begin
CodigoAlbaran := (ContenidoModal as TRdxFrameAlbaranesCliente).CodigoAlbaran;
ActivarModo;
end;
if (ContenidoModal is TfrArticulos) then
begin
//CodigoArticulo := (ContenidoModal as TRdxFrameArticulos).CodigoArticulo;
AListaCodigos := (ContenidoModal as TfrArticulos).ListaArticulos;
for Contador := AListaCodigos.Count - 1 downto 0 do
begin
CodigoArticulo := AListaCodigos.Strings[Contador];
actAnadirConcepto.Execute;
end;
TablaDetallesMem.Delete;
end;
if (ContenidoModal is TRdxFrameClientes) then
CodigoCliente := (ContenidoModal as TRdxFrameClientes).CodigoCliente;
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;
function TfrAlbaranCliente.ModificarDatos: Boolean;
begin
Result := False;
try
CalcularTotalAlbaran;
TablaAlbaranes.Post;
BorrarDetallesIB;
SalvarDetalles;
Commit;
TablaAlbaranes.Close;
TablaDetallesAlbaranes.Close;
TablaDetallesMem.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlbaranCliente.SetCodigoArticulo(Value: Variant);
var
CodigoAux : String;
DatosArticulo : TDatosArticulo;
begin
if (EsCadenaVacia(Value)) then
begin
FCodigoArticulo := CodigoAux;
Exit;
end;
CodigoAux := Trim(Value);
if (dmTablaArticulos.ValidarCodigo(CodigoAux)) then
begin
CodigoAux := dmTablaArticulos.FormatearCodigo(CodigoAux);
if (dmTablaArticulos.ExisteCodigo(CodigoAux)) then
FCodigoArticulo := CodigoAux
else begin
raise Exception.CreateFmt(msgDatosCodArtNoExiste, [CodigoAux]);
end;
end
else begin
raise Exception.CreateFmt(msgDatosCodArtIncorrecto, [CodigoAux]);
Exit;
end;
DatosArticulo := TDatosArticulo.Create(CodigoAux);
try
with TablaDetallesMem do
begin
Edit;
FieldByName('CODIGOALBARAN').AsString := Codigo.DataBinding.Field.AsString;
FieldByName('NUMCONCEPTO').AsString := dmTablaAlbaranesCliente.FormatearNumConcepto(IntToStr(RecNo));
FieldByName('CODIGOARTICULO').AsString := DatosArticulo.Codigo;
FieldByName('REFERENCIA').AsString := DatosArticulo.Referencia;
FieldByName('DESCRIPCION').AsString := DatosArticulo.Descripcion;
FieldByName('IMPORTEUNIDAD').AsFloat := DatosArticulo.Precio;
if EsCadenaVacia(FieldByName('CANTIDAD').AsString) then
FieldByName('CANTIDAD').AsString := '1';
Post;
gridDetalles.Refresh;
CalcularTotalDetalle;
end;
FCodigoArticulo := Value;
finally
DatosArticulo.Free;
end;
end;
procedure TfrAlbaranCliente.SetCodigoCliente(Value: Variant);
var
DatosCliente : TDatosCliente;
CodAux : Variant;
DireccionElegida : TDireccionElegida;
NumSucursal : Integer;
begin
if EsCadenaVacia(Value) then
exit;
CodAux := Trim(Value);
if (dmTablaClientes.ValidarCodigo(CodAux)) then begin
CodAux := dmTablaClientes.FormatearCodigo(CodAux);
if (dmTablaClientes.ExisteCodigo(CodAux)) then
FCodigoCliente := CodAux
else begin
VerMensajeFmt(msgCliCodCliNoExiste, [CodAux]);
Paginas.ActivePageIndex := 0;
CodCliente.SetFocus;
Exit;
end;
end
else begin
VerMensajeFmt(msgCliCodCliIncorrecto, [CodAux]);
Paginas.ActivePageIndex := 0;
CodCliente.SetFocus;
Exit;
end;
DatosCliente := TDatosCliente.Create(FCodigoCliente);
try
CodCliente.DataBinding.Field.AsString := DatosCliente.Codigo;
if DatosCliente.Sucursales.Count > 0 then
begin
frElegirDireccionCliente := TfrElegirDireccionCliente.Create(Self);
try
frElegirDireccionCliente.Cliente := DatosCliente;
frElegirDireccionCliente.ShowModal;
DireccionElegida := frElegirDireccionCliente.DireccionSeleccionada;
NumSucursal := frElegirDireccionCliente.NumSucursal;
finally
frElegirDireccionCliente.Free;
end;
end
else
DireccionElegida := dePrincipal;
if DireccionElegida = dePrincipal then
begin
NIFCIF.DataBinding.Field.AsString := DatosCliente.Nifcif;
Nombre.DataBinding.Field.AsString := DatosCliente.Nombre;
Calle.DataBinding.Field.AsString := DatosCliente.Calle;
Numero.DataBinding.Field.AsString := DatosCliente.Numero;
Piso.DataBinding.Field.AsString := DatosCliente.Piso;
Provincia.DataBinding.Field.AsString := DatosCliente.Provincia;
FCodigoProvincia := dmTablaProvincias.DarCodigoProvincia(DatosCliente.Provincia);
Poblacion.DataBinding.Field.AsString := DatosCliente.Poblacion;
CodigoPostal.DataBinding.Field.AsString := DatosCliente.CodigoPostal;
Telefono1.DataBinding.Field.AsString := DatosCliente.Telefono1;
Telefono2.DataBinding.Field.AsString := DatosCliente.Telefono2;
Movil1.DataBinding.Field.AsString := DatosCliente.Movil1;
Movil2.DataBinding.Field.AsString := DatosCliente.Movil2;
Fax.DataBinding.Field.AsString := DatosCliente.Fax;
PersonaContacto.DataBinding.Field.AsString := DatosCliente.PersonaContacto;
end
else begin
with DatosCliente.Sucursales do
begin
NIFCIF.DataBinding.Field.AsString := Sucursal[NumSucursal].Nifcif;
Nombre.DataBinding.Field.AsString := Sucursal[NumSucursal].Nombre;
Calle.DataBinding.Field.AsString := Sucursal[NumSucursal].Calle;
Numero.DataBinding.Field.AsString := Sucursal[NumSucursal].Numero;
Piso.DataBinding.Field.AsString := Sucursal[NumSucursal].Piso;
Provincia.DataBinding.Field.AsString := Sucursal[NumSucursal].Provincia;
FCodigoProvincia := dmTablaProvincias.DarCodigoProvincia(Sucursal[NumSucursal].Provincia);
Poblacion.DataBinding.Field.AsString := Sucursal[NumSucursal].Poblacion;
CodigoPostal.DataBinding.Field.AsString := Sucursal[NumSucursal].CodigoPostal;
Telefono1.DataBinding.Field.AsString := Sucursal[NumSucursal].Telefono1;
Telefono2.DataBinding.Field.AsString := Sucursal[NumSucursal].Telefono2;
Movil1.DataBinding.Field.AsString := Sucursal[NumSucursal].Movil1;
Movil2.DataBinding.Field.AsString := Sucursal[NumSucursal].Movil2;
Fax.DataBinding.Field.AsString := Sucursal[NumSucursal].Fax;
PersonaContacto.DataBinding.Field.AsString := Sucursal[NumSucursal].PersonaContacto;
end;
end;
finally
DatosCliente.Free;
end;
end;
procedure TfrAlbaranCliente.SetCodigoPoblacion(Value: Variant);
begin
if (not EsCadenaVacia(Value)) then
begin
FCodigoPoblacion := Value;
Poblacion.DataBinding.Field.AsString := dmTablaPoblaciones.darNombrePoblacion(FCodigoProvincia, FCodigoPoblacion);
end;
end;
procedure TfrAlbaranCliente.SetCodigoProvincia(Value: Variant);
begin
if (not EsCadenaVacia(Value)) then
begin
FCodigoProvincia := Value;
Provincia.DataBinding.Field.AsString := dmTablaProvincias.DarNombreProvincia(FCodigoProvincia);
end;
end;
procedure TfrAlbaranCliente.VerModal;
begin
if (ContenidoModal is TRdxFramePoblaciones) then
(ContenidoModal as TRdxFramePoblaciones).CodigoProvincia := CodigoProvincia;
if (ContenidoModal is TRdxFrameClientes) then
(ContenidoModal as TRdxFrameClientes).CodigoCliente := CodigoCliente;
if (ContenidoModal is TfrArticulos) then
begin
FCodigoArticulo := TablaDetallesMem.FieldByName('CODIGOARTICULO').AsString;
if not EsCadenaVacia(FCodigoArticulo) then
(ContenidoModal as TfrArticulos).CodigoArticulo := FCodigoArticulo;
end;
inherited;
end;
procedure TfrAlbaranCliente.CantidadDetalleSetText(Sender: TField;
const Text: String);
begin
if EsCadenaVacia(Text) then
Sender.AsString := '1'
else
Sender.AsString := Text;
CalcularTotalDetalle;
end;
procedure TfrAlbaranCliente.CodigoArticuloDetalleSetText(Sender: TField;
const Text: String);
var
Codigo : String;
begin
Sender.AsString := Text;
CodigoArticulo := Text;
end;
procedure TfrAlbaranCliente.GridBotonCodigoArticuloClick(Sender: TObject; AButtonIndex: Integer);
begin
TablaDetallesMem.Edit;
ContenidoModal := TfrArticulos.Create(Self);
gridDetalles.SetFocus;
end;
procedure TfrAlbaranCliente.PrecioDetalleSetText(Sender: TField;
const Text: String);
begin
if EsCadenaVacia(Text) then begin
Sender.AsString := '0';
exit;
end;
if Entidad = entAbonoCliente then
begin
try
if StrToFloat(Text) > 0
then begin
VerMensaje (msgImporteNegativo);
Sender.AsFloat := (-1) * StrToFloat(Text)
end
else Sender.AsString := Text;
except
on E : EConvertError do begin
Sender.AsString := '0'
end;
end;
end
else
Sender.AsString := Text;
CalcularTotalDetalle;
end;
procedure TfrAlbaranCliente.CodigoExit(Sender: TObject);
begin
if (Modo <> Anadir) or (Visible = false) then
Exit;
if not EsCadenaVacia(Codigo.Text) then
begin
if (dmTablaAlbaranesCliente.validarCodigo(Codigo.Text)) then
begin
Codigo.DataBinding.Field.AsString := dmTablaAlbaranesCliente.FormatearCodigo(Codigo.Text);
if (dmTablaAlbaranesCliente.ExisteCodigo(Codigo.Text)) then begin
VerMensajeFmt(msgCliCodFacProRepetido, [Codigo.Text]);
Codigo.SetFocus;
end;
end
else begin
VerMensajeFmt(msgCliCodFacProIncorrecto, [Codigo.Text]);
Codigo.SetFocus;
end
end
else
Codigo.DataBinding.Field.AsString := dmTablaAlbaranesCliente.DarNuevoCodigo;
end;
procedure TfrAlbaranCliente.CodClienteExit(Sender: TObject);
begin
if not (Modo in [Anadir, Modificar]) then
Exit;
end;
procedure TfrAlbaranCliente.DtoSetText(Sender: TField; const Text: String);
begin
if EsCadenaVacia(Text) then
Sender.AsString := '0'
else begin
ValidarDto(Text);
Sender.AsString := Text;
end;
CalcularTotalAlbaran;
end;
procedure TfrAlbaranCliente.IVASetText(Sender: TField; const Text: String);
begin
if EsCadenaVacia(Text) then
Sender.AsString := '0'
else begin
ValidarIVA(Text);
Sender.AsString := Text;
end;
CalcularTotalAlbaran;
end;
procedure TfrAlbaranCliente.BorrarDetalles;
begin
with TablaDetallesMem do
begin
DisableControls;
EmptyTable;
EnableControls;
end;
end;
procedure TfrAlbaranCliente.BorrarDetallesIB;
begin
with TablaDetallesAlbaranes 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 TfrAlbaranCliente.CargarDetalles;
var
NumeroCampo : Integer;
begin
with TablaDetallesMem do
begin
if TablaDetallesAlbaranes.IsEmpty then
Exit;
DisableControls;
TablaDetallesAlbaranes.First;
while not TablaDetallesAlbaranes.EOF do
begin
Append;
for NumeroCampo := 0 to TablaDetallesAlbaranes.FieldCount-1 do
Fields[NumeroCampo].AsString := TablaDetallesAlbaranes.Fields[NumeroCampo].AsString;
Post;
TablaDetallesAlbaranes.Next;
end;
First;
EnableControls;
end;
end;
procedure TfrAlbaranCliente.SalvarDetalles;
var
NumeroCampo : Integer;
NumConcepto : Integer;
begin
try
with TablaDetallesMem do
begin
if IsEmpty then
Exit;
NumConcepto := 0;
DisableControls;
First;
while not EOF do
begin
TablaDetallesAlbaranes.Append;
for NumeroCampo := 0 to FieldCount-1 do
begin
if Fields[NumeroCampo].FieldName = 'CODIGOEMPRESA' then
TablaDetallesAlbaranes.Fields[NumeroCampo].AsInteger := EmpresaActiva.Codigo
else if Fields[NumeroCampo].FieldName = 'CODIGOALBARAN' then
TablaDetallesAlbaranes.Fields[NumeroCampo].AsString := Codigo.DataBinding.Field.AsString
else
if Fields[NumeroCampo].FieldName = 'NUMCONCEPTO' then
TablaDetallesAlbaranes.Fields[NumeroCampo].AsString := dmTablaAlbaranesCliente.FormatearNumConcepto(IntToStr(NumConcepto))
else
TablaDetallesAlbaranes.Fields[NumeroCampo].AsVariant := Fields[NumeroCampo].AsVariant;
end;
TablaDetallesAlbaranes.Post;
Next;
NumConcepto := NumConcepto + 1;
end;
EnableControls;
end
except
on E : EIBError do begin
if E.IBErrorCode = isc_unique_key_violation then
begin
TablaDetallesAlbaranes.Delete;
TablaDetallesMem.EnableControls;
end;
raise EIBError.Create(E.SQLCode, E.IBErrorCode, E.Message);
end;
end;
end;
procedure TfrAlbaranCliente.DetalleAfterDelete(DataSet: TDataSet);
begin
CalcularTotalAlbaran;
end;
procedure TfrAlbaranCliente.ProvinciaSetText(Sender: TField;
const Text: String);
begin
FCodigoProvincia := dmTablaProvincias.DarCodigoProvincia(Text);
Sender.AsString := Text;
end;
procedure TfrAlbaranCliente.CodigoPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
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, FCodigoAlbaran es NULL y da error al activar modo porque
no se inicializa los parámetros de la sql. Lo hace BuscarAlbaran. }
if not TablaAlbaranes.Active then
BuscarAlbaran;
ContenidoModal := TfrAlbaranesClientes.Create(Self);
end;
procedure TfrAlbaranCliente.CodClientePropertiesButtonClick(
Sender: TObject; AButtonIndex: Integer);
begin
ContenidoModal := TfrClientes.Create(Self);
end;
procedure TfrAlbaranCliente.ProvinciaPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
begin
CaptionModal := msgListaProvincias;
WidthModal := 280;
HeightModal := 460;
ContenidoModal := TfrProvincias.Create(Self);
end;
procedure TfrAlbaranCliente.PoblacionPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
begin
if EsCadenaVacia(CodigoProvincia) then
begin
VerMensaje(msgSinProvincia);
Paginas.ActivePageIndex := 0;
Provincia.SetFocus;
Exit;
end;
CaptionModal := Format(msgListaPoblaciones, [dmTablaProvincias.darNombreProvincia(CodigoProvincia)]);
WidthModal := 280;
HeightModal := 460;
ContenidoModal := TfrPoblaciones.Create(Self);
end;
procedure TfrAlbaranCliente.DetallesAfterInsert(DataSet: TDataSet);
begin
DataSet.FieldByName('DESCRIPCION').AsString := #13+#13+#13;
end;
procedure TfrAlbaranCliente.actAnadirConceptoExecute(Sender: TObject);
begin
try
with TablaDetallesMem do
begin
//DisableControls;
Next;
if EOF then
Append
else begin
Prior;
Insert;
end;
//EnableControls;
end;
Paginas.ActivePage := pagContenido;
gridDetalles.SetFocus;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrAlbaranCliente.actEliminarExecute(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;
CalcularTotalAlbaran;
end;
procedure TfrAlbaranCliente.actEliminarTodoExecute(Sender: TObject);
begin
if (VerMensajePregunta(msgDeseaBorrarTodo) <> IDYES) then
Exit;
BorrarDetalles;
CalcularTotalAlbaran;
end;
procedure TfrAlbaranCliente.ReordenarDetallesMem;
var
NumConcepto : Integer;
CurBookmark: string;
begin
try
with TablaDetallesMem do
begin
if IsEmpty then
Exit;
NumConcepto := RecordCount;
DisableControls;
CurBookmark := Bookmark;
Last;
while not BOF do
begin
Edit;
FieldByName('NUMCONCEPTO').AsString := dmTablaAlbaranesCliente.FormatearNumConcepto(IntToStr(NumConcepto));
Post;
Dec(NumConcepto);
Prior;
end;
Bookmark := CurBookmark;
EnableControls;
end
except
on E : EIBError do begin
if E.IBErrorCode = isc_unique_key_violation then
TablaDetallesMem.EnableControls;
raise EIBError.Create(E.SQLCode, E.IBErrorCode, E.Message);
end;
end;
end;
procedure TfrAlbaranCliente.IntercambiarDetallesMem(PosCon1,
PosCon2: Integer);
var
NumCon1,
NumCon2 : Variant;
begin
try
with TablaDetallesMem do
begin
DisableControls;
RecNo := PosCon1;
NumCon1 := FieldByName('NUMCONCEPTO').AsString;
RecNo := PosCon2;
NumCon2 := FieldByName('NUMCONCEPTO').AsString;
// Intercambio los concepto
Edit;
FieldByName('NUMCONCEPTO').AsString := NumCon1;
Post;
RecNo := PosCon1;
Edit;
FieldByName('NUMCONCEPTO').AsString := NumCon2;
Post;
EnableControls;
ReordenarDetallesMem;
end;
except
TablaDetallesMem.EnableControls;
end;
end;
function TfrAlbaranCliente.GetCodigoCliente: Variant;
begin
if TablaAlbaranes.Active then
Result := TablaAlbaranes.FieldByName('CODIGOCLIENTE').AsVariant
else
Result := NULL;
end;
procedure TfrAlbaranCliente.RESetText(Sender: TField; const Text: String);
begin
if EsCadenaVacia(Text) then
Sender.AsString := '0'
else begin
ValidarDto(Text);
Sender.AsString := Text;
end;
CalcularTotalAlbaran;
end;
procedure TfrAlbaranCliente.DesactivarEventosCampos;
begin
with TablaAlbaranes do
begin
FieldByName('CODIGOCLIENTE').OnSetText := NIL;
FieldByName('IVA').OnSetText := NIL;
FieldByName('DESCUENTO').OnSetText := NIL;
end;
with TablaDetallesMem do
begin
FieldByName('CODIGOARTICULO').OnSetText := NIL;
if FindField('REFERENCIA') <> NIL then
FieldByName('REFERENCIA').OnSetText := NIL;
FieldByName('CANTIDAD').OnSetText := NIL;
FieldByName('IMPORTEUNIDAD').OnSetText := NIL;
AfterDelete := NIL;
AfterInsert := NIL;
end;
with VistaDetalles do
begin
if GetColumnByFieldName('CODIGOARTICULO') <> NIL then
TcxButtonEditProperties(GetColumnByFieldName('CODIGOARTICULO').Properties).OnButtonClick := NIL;
if GetColumnByFieldName('REFERENCIA') <> NIL then
TcxButtonEditProperties(GetColumnByFieldName('REFERENCIA').Properties).OnButtonClick := NIL;
end;
end;
procedure TfrAlbaranCliente.CodCliSetText(Sender: TField;
const Text: String);
begin
Sender.AsString := Text;
CodigoCliente := Text;
end;
procedure TfrAlbaranCliente.actEliminarUpdate(Sender: TObject);
begin
if not (Modo in [Anadir, Modificar]) then
(Sender as TAction).Enabled := False
else
(Sender as TAction).Enabled := not (TablaDetallesMem.RecordCount = 0);
end;
procedure TfrAlbaranCliente.actEliminarTodoUpdate(Sender: TObject);
begin
if not (Modo in [Anadir, Modificar]) then
(Sender as TAction).Enabled := False
else
(Sender as TAction).Enabled := not (TablaDetallesMem.RecordCount = 0);
end;
procedure TfrAlbaranCliente.ReferenciaArticuloDetalleSetText(
Sender: TField; const Text: String);
var
ReferenciaAux : String;
CodigoArtAux : String;
begin
Sender.AsString := Text;
ReferenciaAux := Text;
if (dmTablaArticulos.DarCodigoArt(ReferenciaAux, CodigoArtAux)) then
CodigoArticulo := CodigoArtAux
else begin
raise Exception.CreateFmt(msgDatosRefArtNoExiste, [ReferenciaAux]);
end;
end;
procedure TfrAlbaranCliente.GridBotonReferenciaArticuloClick(
Sender: TObject; AButtonIndex: Integer);
begin
TablaDetallesMem.Edit;
ContenidoModal := TfrArticulos.Create(Self);
gridDetalles.SetFocus;
end;
end.