{ =============================================================================== 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.4 Fecha versión actual: 08-10-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 02-03-2002 El frame ahora trabaja con listas de artículos en vez de con un solo artículo. 07-04-2002 Se ha adaptado el frame para transaccion unica. 09-04-2002 Sustituir las constantes IDYES/IDNO por IDOK. 08-10-2004 P289. Se añade una tabla nueva FTablaArticulosFabPro que representara los detalles de articulo "precios de los proveedores y fabricante" =============================================================================== } unit RdxFrameArticulos; {$I ..\COMPILE.INC} interface uses Consts, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, IB, IBCustomDataSet, IBDataBase, DB, Mensajes, Tipos, RdxFrame, RdxDBFrame; type TRdxFrameArticulos = class(TRdxDBFrame) private FTablaArticulos : TIBDataSet; FTablaArticulosFabPro : TIBDataSet; protected FListaArticulos : TStringList; procedure SetTablaArticulos (Value : TIBDataSet); procedure SetTablaArticulosFabPro (Value : TIBDataSet); procedure SetListaArticulos (Value : TStringList); procedure SetCodigoArticulo (Value : Variant); procedure SetFCodigoArticulo (Value : Variant); function GetCodigoArticulo: Variant; function GetFCodigoArticulo: Variant; procedure SetContenido (NuevoFrame : TRdxFrame); override; function TratarCambios : integer; override; procedure BuscarArticulo; virtual; abstract; procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override; public property TablaArticulos: TIBDataSet read FTablaArticulos write SetTablaArticulos; property TablaArticulosFabPro: TIBDataSet read FTablaArticulosFabPro write SetTablaArticulosFabPro; property ListaArticulos : TStringList read FListaArticulos write SetListaArticulos; property CodigoArticulo : Variant read GetCodigoArticulo write SetCodigoArticulo; property FCodigoArticulo : Variant read GetFCodigoArticulo write SetFCodigoArticulo; constructor Create (AOwner : TComponent); override; destructor Destroy; override; published property BaseDatos; property Transaccion; end; implementation {$R *.DFM} uses Literales{$IFDEF RDX_D6},Variants{$ENDIF}; { TRdxFrameArticulos } constructor TRdxFrameArticulos.Create(AOwner: TComponent); begin inherited Create(AOwner); FListaArticulos := TStringList.Create; FTablaArticulos := NIL; end; destructor TRdxFrameArticulos.Destroy; begin FListaArticulos.free; FListaArticulos := NIL; inherited; end; function TRdxFrameArticulos.TratarCambios : integer; begin if (TablaArticulos.Modified = True or TablaArticulosFabPro.Modified = True) then case VerMensajePregunta(msgGuardarCambios) of IDCANCEL : Result := IDCANCEL; IDYES : begin if (RealizarOperacion) then Result := IDOK else Result := IDCANCEL; end; IDNO : begin if (DescartarOperacion) then Result := IDOK else Result := IDCANCEL; end; end else Result := IDOK; end; procedure TRdxFrameArticulos.SetContenido(NuevoFrame: TRdxFrame); begin if (Contenido <> NIL) then if (Contenido.Name = NuevoFrame.ClassName) then begin NuevoFrame.Free; exit; end; inherited; if (TablaArticulos <> NIL) then begin FCodigoArticulo := TablaArticulos.FieldByName('CODIGO').Value; if (Contenido is TRdxFrameArticulos) then (Contenido as TRdxFrameArticulos).CodigoArticulo := FCodigoArticulo; end; end; procedure TRdxFrameArticulos.SetTablaArticulos(Value: TIBDataSet); begin if (FTablaArticulos <> Value) then begin FTablaArticulos := Value; end; end; procedure TRdxFrameArticulos.CambiarModo(ModoAnterior, Modo : TRdxModo); begin inherited; if (FModo in [Normal, Seleccionar]) then begin TablaArticulos.Close; TablaArticulos.Open; end else begin { Si estábamos en el modo Añadir y pasamos a cualquier otro modo SIEMPRE es necesario buscar el codigo de articulo que tiene el frame en CodigoArticulo (al activar el modo Añadir NO se pisa este valor con el código de articulo nuevo), preguntamos si la tabla esta activa por si se ha cerrado al realizar algun cambio en modificar y ejecutar TratarCambios} if (not TablaArticulos.Active) or (ModoAnterior = Anadir) then BuscarArticulo; end; end; function TRdxFrameArticulos.GetCodigoArticulo: Variant; begin Result := FCodigoArticulo; end; function TRdxFrameArticulos.GetFCodigoArticulo: Variant; begin if (ListaArticulos.Count = 0) then Result := NULL else Result := ListaArticulos.Strings[ListaArticulos.Count-1]; end; procedure TRdxFrameArticulos.SetCodigoArticulo(Value: Variant); begin if (not VarIsNull(Value)) then begin FCodigoArticulo := Value; BuscarArticulo; end end; procedure TRdxFrameArticulos.SetFCodigoArticulo(Value: Variant); begin FListaArticulos.Clear; if (not VarIsNull(Value)) then FListaArticulos.Add(Value); end; procedure TRdxFrameArticulos.SetListaArticulos(Value: TStringList); begin if (Value = Nil) or (Value.Count = 0) then exit; FListaArticulos.Clear; FListaArticulos.Assign(Value); end; procedure TRdxFrameArticulos.SetTablaArticulosFabPro(Value: TIBDataSet); begin if (FTablaArticulosFabPro <> Value) then begin FTablaArticulosFabPro := Value; end; end; end.