{ =============================================================================== 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: 04-10-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 27-11-2001 Cambio de los titulos respectivos a obra y almacenes en el procedimiento CambiarEntidad. 07-04-2002 Se ha adaptado a una unica transacción. 15-04-2004 p272. Adaptación a multiempresa. 04-10-2004 Cambio CambiarEntidad para que soporte otro color. =============================================================================== } unit ArticuloAlmacen; 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, Mensajes, Tipos, RdxFrameArticulosAlmacen; type TfrArticuloAlmacen = class(TRdxFrameArticulosAlmacen) pnlScroll: TRdxScrollPanel; brSimple: TRdxBarraInferior; bSalir: TRdxBoton; pnlAlmacen: TRdxPanel; eAlmacen: TLabel; cAlmacen: TRdxCabecera; pnlStock: TRdxPanel; cStock: TRdxCabecera; Existencias: TRdxDBEdit; eStockActual: TLabel; eStockMax: TLabel; StockMaximo: TRdxDBEdit; ePendRecibir: TLabel; eStockMin: TLabel; StockMinimo: TRdxDBEdit; pnlMaterial: TRdxPanel; RdxCabecera1: TRdxCabecera; Codigo: TRdxDBEdit; eCodigo: TLabel; cbxFamilia: TRdxDBComboBox; eFamilia: TLabel; Precio: TRdxDBEdit; ePrecioEuros: TLabel; cbxUnidadesMedida: TRdxDBComboBox; eUnidades: TLabel; eDescripcion: TLabel; Descripcion: TRdxDBEdit; eObservaciones: TLabel; Observaciones: TRdxDBMemo; dsArticulosAlmacen: TDataSource; Titulo: TRdxPanelTituloOperacion; cbxAlmacen: TRdxDBComboBox; brDoble: TRdxBarraInferior; bAceptar: TRdxBoton; bCancelar: TRdxBoton; PendRecibir: TRdxEdit; procedure bAceptarClick(Sender: TObject); procedure bCancelarGuardarClick(Sender: TObject); procedure bSalirClick(Sender: TObject); procedure CodigoButtonClick(Sender: TObject); protected function CambiarEntidad (EntidadAnterior, Entidad : TRdxEntidad): Boolean; override; procedure ActivarModoConsultar; override; procedure ActivarModoEliminar; override; function EliminarDatos : Boolean; override; function CancelarEliminar : Boolean; override; procedure VerModal; override; procedure FreeContenido; override; procedure BuscarAlmacen; override; procedure BuscarArticulo; override; function ComprobarDatos: Boolean; override; public constructor Create(AOwner : TComponent); override; destructor Destroy; override; published property TablaArticulosAlmacen; property CodigoAlmacen; property CodigoArticulo; end; var frArticuloAlmacen: TfrArticuloAlmacen; implementation {$R *.DFM} uses BaseDatos, TablaArticulos, Articulos, TablaArticulosAlmacen, ArticulosAlmacen, TablaAlmacenes, Excepciones, Configuracion, RdxEmpresaActiva, Literales; constructor TfrArticuloAlmacen.Create(AOwner : TComponent); var i : Integer; begin inherited Create(AOwner); ConfigurarFrame(Self, Self.Entidad); BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaArticulosAlmacen := TIBDataSet.Create(Self); dsArticulosAlmacen.DataSet := TablaArticulosAlmacen; with TablaArticulosAlmacen do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaArticulosAlmacen.sqlConsultar); DeleteSQL.Assign(dmTablaArticulosAlmacen.sqlEliminar); RefreshSQL.Assign(dmTablaArticulosAlmacen.sqlConsultar); end; {Carga todos los almacenes en el combox, como no habra posibilidad de cambio, da igual la entidad que sea} dmTablaAlmacenes.DarAlmacenes(EmpresaActiva.Codigo, FListaAlmacenesCodigo,FListaCodigosAlmacen); for i:=0 to FListaAlmacenesCodigo.Count-1 do cbxAlmacen.Items.Add(FListaAlmacenesCodigo.Names[i]); end; destructor TfrArticuloAlmacen.Destroy; begin TablaArticulosAlmacen.Close; TablaArticulosAlmacen.UnPrepare; TablaArticulosAlmacen.Free; inherited; end; procedure TfrArticuloAlmacen.bAceptarClick(Sender: TObject); begin if (RealizarOperacion) then CloseFrame; end; procedure TfrArticuloAlmacen.BuscarAlmacen; begin cbxAlmacen.ItemIndex := cbxAlmacen.Items.IndexOf(FListaCodigosAlmacen.Values[CodigoAlmacen]); end; procedure TfrArticuloAlmacen.BuscarArticulo; begin if Transaccion = NIL then exit; try with TablaArticulosAlmacen do begin Close; // Buscar la fila a tratar si es necesario if (not VarIsNull(CodigoAlmacen)) and (not VarIsNull(CodigoArticulo)) then begin Params.ByName('CODIGOALMACEN').AsString := CodigoAlmacen; Params.ByName('CODIGOARTICULO').AsString := CodigoArticulo; end; Params.ByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; Open; end; dmTablaArticulos.InicializarTablaArticulos(@TablaArticulosAlmacen); if (not VarIsNull(CodigoAlmacen)) and (not VarIsNull(CodigoArticulo)) then PendRecibir.Text := dmTablaArticulosAlmacen.DarUnidadesPendRecibirArticuloAlmacen(EmpresaActiva.Codigo, CodigoAlmacen,CodigoArticulo); except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrArticuloAlmacen.ActivarModoConsultar; begin dsArticulosAlmacen.AutoEdit := False; Codigo.VerBoton := True; try TablaArticulosAlmacen.Open; if TablaArticulosAlmacen.RecordCount = 0 then begin VerMensajeFmt(msgArtNoExisteArtAlm, [CodigoArticulo]); CloseFrame; Exit; end; TablaArticulosAlmacen.Cancel; Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrArticuloAlmacen.ActivarModoEliminar; begin dsArticulosAlmacen.AutoEdit := False; Codigo.VerBoton := True; try TablaArticulosAlmacen.Open; if TablaArticulosAlmacen.RecordCount = 0 then begin VerMensajeFmt(msgArtNoExisteArtAlm, [CodigoArticulo]); CancelarEliminar; CloseFrame; Exit; end; TablaArticulosAlmacen.Cancel; Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrArticuloAlmacen.FreeContenido; begin if (ContenidoModal is TRdxFrameArticulosAlmacen) then begin CodigoAlmacen := (ContenidoModal as TRdxFrameArticulosAlmacen).CodigoAlmacen; CodigoArticulo := (ContenidoModal as TRdxFrameArticulosAlmacen).CodigoArticulo; end; inherited FreeContenido; end; procedure TfrArticuloAlmacen.CodigoButtonClick(Sender: TObject); begin inherited; if (TratarCambios = IDCANCEL) then exit; Case Entidad of entArticuloAlmacen : EntidadModal := entArticulosAlmacen; entArticuloAlmacenFisico : EntidadModal := entArticulosAlmacenFisico; entArticuloAlmacenObra : EntidadModal := entArticulosAlmacenObra; end; ContenidoModal := TfrArticulosAlmacen.Create(Self); end; procedure TfrArticuloAlmacen.VerModal; begin if (ContenidoModal is TRdxFrameArticulosAlmacen) then (ContenidoModal as TRdxFrameArticulosAlmacen).CodigoAlmacen := FCodigoAlmacen; inherited VerModal; end; function TfrArticuloAlmacen.EliminarDatos: Boolean; begin Result := False; try TablaArticulosAlmacen.Delete; Commit; TablaArticulosAlmacen.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrArticuloAlmacen.CancelarEliminar: Boolean; begin Result := False; try RollBack; TablaArticulosAlmacen.Close; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrArticuloAlmacen.bCancelarGuardarClick(Sender: TObject); begin if (TratarCambios = IDOK) then CloseFrame; end; procedure TfrArticuloAlmacen.bSalirClick(Sender: TObject); begin try Rollback; CloseFrame; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrArticuloAlmacen.ComprobarDatos: Boolean; begin Result := False; Case Modo of Eliminar : if dmTablaArticulosAlmacen.ArticuloAlmacenTieneExistencias(EmpresaActiva.Codigo, CodigoAlmacen,CodigoArticulo) then begin VerMensaje(msgArtTieneExistencias); Exit; end; end; Result := True; end; function TfrArticuloAlmacen.CambiarEntidad(EntidadAnterior, Entidad: TRdxEntidad): Boolean; begin if not inherited CambiarEntidad(EntidadAnterior, Entidad) then Exit; ConfigurarFrame(Self, Self.Entidad); Case Entidad of //entArticuloAlmacénFisico no lo ponemos porque por defecto el frame tiene los //titulos adaptados para él. entArticuloAlmacenObra : begin cAlmacen.Caption := 'Obra'; eAlmacen.Caption := 'Obra:'; cStock.Caption := 'Stock del material en la obra' end; entArticuloAlmacen : begin cAlmacen.Caption := 'Almacén/Obra'; eAlmacen.Caption := 'Almacén/Obra:'; cStock.Caption := 'Stock del material en el almacén u obra' end; end; end; end.