{ =============================================================================== 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.3 Fecha versión actual: 20-08-2002 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 31-03-2002 Eliminar el procedimiento virtual BorrarLineasDetalle, que se aplicaba al TratarCambios y decir que si. 07-04-2002 Se ha adaptado el frame para transaccion unica. 09-04-2002 Sustituir las constantes IDYES/IDNO por IDOK. 20-08-2002 Añadir en TratarCambios el Cancel. =============================================================================== } unit RdxFrameMovimientos; {$I ..\COMPILE.INC} interface uses Consts, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, RdxFrame, RdxDBFrame, IBCustomDataSet, Tipos, IBDataBase, DB, RxMemDS; type TRdxFrameMovimientos = class(TRdxDBFrame) private FTablaPedidos : TIBDataSet; FTablaDetalleMem : TRxMemoryData; protected FCodigoAlmacenOrigen : Variant; FCodigoAlmacenDestino : Variant; FCodigoArticulo : Variant; FCodigoPedido : Variant; FCodigoCliente : Variant; FListaAlmacenesCodigo : TStringList; FListaCodigosAlmacen : TStringList; procedure SetTablaPedidos (Value : TIBDataSet); procedure SetTablaDetalleMem (Value : TRxMemoryData); procedure SetCodigoAlmacenOrigen (Value : Variant); virtual; procedure SetCodigoAlmacenDestino (Value : Variant); virtual; procedure SetCodigoArticulo (Value : Variant); virtual; procedure SetCodigoPedido (Value : Variant); virtual; procedure SetCodigoCliente (Value : Variant); virtual; procedure BuscarAlmacenOrigen; virtual; abstract; procedure BuscarAlmacenDestino; virtual; abstract; procedure BuscarPedido; virtual; abstract; procedure BuscarCliente; virtual; abstract; function TratarCambios : integer; override; procedure SetContenido (NuevoFrame : TRdxFrame); override; procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override; public property TablaPedidos: TIBDataSet read FTablaPedidos write SetTablaPedidos; property TablaDetalleMem: TRxMemoryData read FTablaDetalleMem write SetTablaDetalleMem; property CodigoAlmacenOrigen : Variant read FCodigoAlmacenOrigen write SetCodigoAlmacenOrigen; property CodigoAlmacenDestino : Variant read FCodigoAlmacenDestino write SetCodigoAlmacenDestino; property CodigoPedido : Variant read FCodigoPedido write SetCodigoPedido; property CodigoCliente : Variant read FCodigoCliente write SetCodigoCliente; property CodigoArticulo : Variant read FCodigoArticulo write SetCodigoArticulo; constructor Create (AOwner : TComponent); override; destructor Destroy; override; published property BaseDatos; property Transaccion; end; implementation {$R *.DFM} uses IB, Mensajes {$IFDEF RDX_D6}, Variants{$ENDIF}; { TRdxFrameProveedores } const msgPregunta = '¿Esta seguro de que desea salir del movimiento?'; constructor TRdxFrameMovimientos.Create(AOwner: TComponent); begin inherited Create(AOwner); FTablaPedidos := nil; FTablaDetalleMem := nil; FCodigoAlmacenOrigen := NULL; FCodigoAlmacenDestino := NULL; FCodigoPedido := NULL; FCodigoCliente := NULL; FCodigoArticulo := NULL; FListaAlmacenesCodigo := TStringList.Create; FListaCodigosAlmacen := TStringList.Create; end; destructor TRdxFrameMovimientos.Destroy; begin FListaAlmacenesCodigo.Free; FListaCodigosAlmacen.Free; inherited; end; procedure TRdxFrameMovimientos.SetContenido(NuevoFrame: TRdxFrame); begin if (FContenido <> NIL) then if (Contenido.Name = NuevoFrame.ClassName) then begin NuevoFrame.Free; exit; end; inherited; end; procedure TRdxFrameMovimientos.SetCodigoAlmacenOrigen(Value: Variant); begin if (not VarIsNull(Value)) then begin FCodigoAlmacenOrigen := Value; BuscarAlmacenOrigen; end; end; procedure TRdxFrameMovimientos.SetCodigoArticulo(Value: Variant); begin if VarIsNull(Value) then exit; if Value = '' then exit; FCodigoArticulo := Value; end; procedure TRdxFrameMovimientos.SetCodigoAlmacenDestino(Value: Variant); begin if not VarIsNull(Value) then begin FCodigoAlmacenDestino := Value; BuscarAlmacenDestino; end; end; procedure TRdxFrameMovimientos.SetCodigoPedido(Value: Variant); begin if (not VarIsNull(Value)) then begin FCodigoPedido := Value; BuscarPedido; end; end; procedure TRdxFrameMovimientos.SetCodigoCliente(Value: Variant); begin if (not VarIsNull(Value)) then begin FCodigoCliente := Value; BuscarCliente; end; end; procedure TRdxFrameMovimientos.CambiarModo(ModoAnterior, Modo: TRdxModo); begin inherited; if (FModo in [Normal, Seleccionar]) then begin TablaDetalleMem.Close; TablaDetalleMem.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 almacén que tiene el frame en CodigoAlmacen (al activar el modo Añadir NO se pisa este valor con el código de almacén nuevo), preguntamos si la tabla esta activa por si se ha cerrado al realizar algun cambio en modificar y ejecutar TratarCambios} if (not TablaDetalleMem.Active) or (ModoAnterior = Anadir) then BuscarAlmacenDestino; end; end; procedure TRdxFrameMovimientos.SetTablaPedidos(Value: TIBDataSet); begin if (FTablaPedidos <> Value) then begin FTablaPedidos := Value; end; end; procedure TRdxFrameMovimientos.SetTablaDetalleMem(Value: TRxMemoryData); begin if (FTablaDetalleMem <> Value) then begin FTablaDetalleMem := Value; end; end; function TRdxFrameMovimientos.TratarCambios : integer; begin if TablaDetalleMem.Modified = true then TablaDetalleMem.Post; if (TablaDetalleMem.RecordCount <> 0) then case VerMensajePregunta(msgPregunta) of IDYES : Result := IDOK; IDNO : Result := IDNO; IDCANCEL : Result := IDCANCEL; end else Result := IDOK; end; end.