{ =============================================================================== 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.7 Fecha versión actual: 04-10-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 02-11-2001 En CambiarEntidad tengo que cambiar manualmante la entidad de la barra de titulo ArticulosAlmacen, ya que no está incluida dentro del frame y no se entera de la entidad en la que está, que puede ser ArticulosAlmacen, ArticulosAlmacenFisico o ArticulosAlmacenObra, y en cada uno tendrá un titulo diferente. El no estar incluido en el panel era por un problema de barras en ciertos casos, que salian las dos barras a la vez. Añadir el botón finalizar obra que solo será visible cuando la entidad en la que nos encontremos sea entArticulosAlmacenObra. 02-03-2002 En el contenido se pueden añadir muchos materiales a la vez. 07-04-2002 Se ha adaptado a una unica transacción. 11-08-2002 p223. Se ha modificado finalizar obra para la ampliacion de historico de obras. 07-09-2002 Adaptada la función 'CambiarEntidad'. 15-04-2004 Al hacer doble click sobre el grid, se pasará a modificar el registro o se seleccionará, dependiendo del modo en el que se encuentre la pantalla. 15-04-2004 p272. Adaptación a multiempresa. 04-10-2004 Se ha añadido el metodo cambiarEntidad para que cambie de color en funcion del modulo desde el que se la llame =============================================================================== } unit ListadoArticulosAlmacen; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ListadoBase, ExtCtrls, StdCtrls, RdxTitulos, RdxPaneles, RdxCampos, cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxButtonEdit, cxDropDownEdit, RdxRadioButton, RdxShape, TablaArticulos, Tipos; type TfrListadoArticulosAlmacen = class(TfrListadoBase) eAlmacen: TLabel; CodAlmacen: TcxButtonEdit; NombreAlmacen: TRdxEdit; Separador: TRdxShape; eInfoCriterios: TLabel; rbTodos: TRdxRadioButton; rbArticulos: TRdxRadioButton; DescripcionIni: TcxButtonEdit; DescripcionFin: TcxButtonEdit; rbFamilias: TRdxRadioButton; cbFamiliaIni: TcxComboBox; Label1: TLabel; cbFamiliaFin: TcxComboBox; procedure DescripcionIniPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure CodAlmacenPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure rbTodosClick(Sender: TObject); procedure rbArticulosClick(Sender: TObject); procedure rbFamiliasClick(Sender: TObject); procedure RdxFrameShow(Sender: TObject); procedure DescripcionIniPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure DescripcionFinPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure DescripcionFinPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure cbFamiliaIniPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure cbFamiliaFinPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure CodAlmacenPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); private FCodigoAlmacen: Variant; FCodigoArticuloAux : Variant; FArticuloIni : TDatosArticulo; FArticuloFin : TDatosArticulo; procedure ActivarNombres; procedure ActivarFamilias; procedure DesactivarNombres; procedure DesactivarFamilias; procedure SetCodigoAlmacen(const Value: Variant); procedure RefrescarInforme; override; protected procedure ActualizarEstado; override; procedure FreeContenido; override; procedure VerModal; override; function CambiarEntidad (EntidadAnterior, Entidad : TRdxEntidad): Boolean; override; public { Public declarations } property CodigoAlmacen : Variant read FCodigoAlmacen write SetCodigoAlmacen; constructor Create(AOwner : TComponent); override; destructor Destroy; override; end; var frListadoArticulosAlmacen: TfrListadoArticulosAlmacen; implementation uses Configuracion, Almacenes, TablaAlmacenes, StrFunc, RdxEmpresaActiva, Mensajes, InformeEstadoAlmacen, RdxFrameAlmacenes, Entidades, RdxFrameArticulos, TablaFamilias, ArticulosAlmacen, Literales; {$R *.DFM} procedure TfrListadoArticulosAlmacen.DescripcionIniPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin Case Entidad of entAlmacen : EntidadModal := entArticulosAlmacen; entAlmacenFisico : EntidadModal := entArticulosAlmacenFisico; entAlmacenObra : EntidadModal := entArticulosAlmacenObra; end; ContenidoModal := TfrArticulosAlmacen.Create(Self); if not VarIsNull(FCodigoArticuloAux) then begin FArticuloIni.Codigo := FCodigoArticuloAux; dmTablaArticulos.DarDatosArticulo(FArticuloIni); DescripcionIni.EditingText := FArticuloIni.Descripcion; PostMessage(DescripcionIni.Handle, WM_KEYDOWN, VK_RETURN, 0); end; end; procedure TfrListadoArticulosAlmacen.SetCodigoAlmacen(const Value: Variant); var DatosAlmacen : TDatosAlmacen; begin if Value = Null then Exit; if FCodigoAlmacen <> Value then begin FCodigoAlmacen := Value; DatosAlmacen := TDatosAlmacen.Create; try DatosAlmacen.CodigoEmpresa := EmpresaActiva.Codigo; DatosAlmacen.Codigo := FCodigoAlmacen; if dmTablaAlmacenes.DarDatosAlmacen(DatosAlmacen) then begin CodAlmacen.Text := FCodigoAlmacen; NombreAlmacen.Text := DatosAlmacen.Nombre end else raise Exception.CreateFmt(msgAlmCodAlmNoExiste, [CodigoAlmacen]); finally DatosAlmacen.Free; end; RefrescarInforme; end; end; procedure TfrListadoArticulosAlmacen.CodAlmacenPropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin if EsCadenaVacia (DisplayValue) then begin Error := True; ErrorText := msgInfFaltaAlmacen; Exit; end; try StrToInt(DisplayValue); except Error := True; ErrorText := Format(msgAlmCodAlmIncorrecto, [DisplayValue]); Exit; end; if (dmTablaAlmacenes.ValidarCodigo(DisplayValue)) then begin if (not dmTablaAlmacenes.ExisteAlmacen(EmpresaActiva.Codigo, StrToInt(DisplayValue))) then begin Error := True; ErrorText := Format(msgAlmCodAlmNoExiste, [DisplayValue]); Exit; end; end else begin Error := True; ErrorText := Format(msgAlmCodAlmIncorrecto, [DisplayValue]); Exit; end; CodigoAlmacen := StrToInt(DisplayValue); end; constructor TfrListadoArticulosAlmacen.Create(AOwner: TComponent); var DescripcionAux : String; begin inherited; ConfigurarFrame(Self, Self.Entidad); FCodigoAlmacen := NULL; FArticuloIni := TDatosArticulo.Create; FArticuloFin := TDatosArticulo.Create; FCodigoArticuloAux := NULL; DescripcionAux := dmTablaArticulos.DarArticuloMin; FArticuloIni.Codigo := ''; FArticuloIni.Descripcion := DescripcionAux; DescripcionIni.EditingText := FArticuloIni.Descripcion; DescripcionAux := dmTablaArticulos.DarArticuloMax; FArticuloFin.Codigo := ''; FArticuloFin.Descripcion := DescripcionAux; DescripcionFin.EditingText := FArticuloFin.Descripcion; cbFamiliaIni.Properties.Items := dmTablaFamilias.darFamilias; cbFamiliaIni.Properties.Items.Delete(0); //Borro el item en blanco. cbFamiliaIni.ItemIndex := 0; cbFamiliaFin.Properties.Items := dmTablaFamilias.darFamilias; cbFamiliaFin.Properties.Items.Delete(0); //Borro el item en blanco. cbFamiliaFin.ItemIndex := cbFamiliaFin.Properties.Items.Count - 1; FInforme := TdmInformeEstadoAlmacen.Create(Self); FInforme.Preview := FVistaPrevia.Preview; end; destructor TfrListadoArticulosAlmacen.Destroy; begin FreeAndNil(FArticuloIni); FreeAndNil(FArticuloFin); // El informe se destruye en el padre inherited; end; procedure TfrListadoArticulosAlmacen.RefrescarInforme; begin with (FInforme as TdmInformeEstadoAlmacen) do begin CodigoAlmacen := FCodigoAlmacen; NombreAlmacen := Self.NombreAlmacen.Text; if rbTodos.Checked then Tipo := tiTodo else begin if rbArticulos.Checked then begin Tipo := tiPorDescripcion; DescripcionIni := FArticuloIni.Descripcion; DescripcionFin := FArticuloFin.Descripcion; end else begin Tipo := tiPorFamilias; FamiliaIni := cbFamiliaIni.Text; FamiliaFin := cbFamiliaFin.Text; end; end; Previsualizar; end; end; procedure TfrListadoArticulosAlmacen.FreeContenido; begin if (ContenidoModal is TfrArticulosAlmacen) then FCodigoArticuloAux := (ContenidoModal as TfrArticulosAlmacen).CodigoArticulo; if (ContenidoModal is TRdxFrameAlmacenes) then CodigoAlmacen := (ContenidoModal as TRdxFrameAlmacenes).CodigoAlmacen; inherited FreeContenido; end; procedure TfrListadoArticulosAlmacen.ActualizarEstado; var CadenaAux : string; begin CadenaAux := DarNombreEntidad(Entidad); eAlmacen.Caption := CadenaAux + ':'; CadenaAux := AnsiLowerCase(CadenaAux); cDatos.Caption := 'Parámetros para el listado de material de ' + CadenaAux; eInformacion.Caption := 'Elija '; if CadenaAux = 'almacen' then eInformacion.Caption := eInformacion.Caption + 'el ' + CadenaAux + ' en el cual ' else eInformacion.Caption := eInformacion.Caption + 'la ' + CadenaAux + ' en la cual '; eInformacion.Caption := eInformacion.Caption + 'se generará el listado de su estado:'; end; procedure TfrListadoArticulosAlmacen.ActivarFamilias; begin cbFamiliaIni.Enabled := True; cbFamiliaIni.SetFocus; cbFamiliaFin.Enabled := True; end; procedure TfrListadoArticulosAlmacen.ActivarNombres; begin DescripcionIni.Enabled := True; DescripcionIni.SetFocus; DescripcionFin.Enabled := True; end; procedure TfrListadoArticulosAlmacen.DesactivarFamilias; begin cbFamiliaIni.Enabled := False; cbFamiliaFin.Enabled := False; end; procedure TfrListadoArticulosAlmacen.DesactivarNombres; begin DescripcionIni.Enabled := False; DescripcionFin.Enabled := False; end; procedure TfrListadoArticulosAlmacen.rbTodosClick(Sender: TObject); begin DesactivarNombres; DesactivarFamilias; RefrescarInforme; end; procedure TfrListadoArticulosAlmacen.rbArticulosClick(Sender: TObject); begin ActivarNombres; DesactivarFamilias; RefrescarInforme; end; procedure TfrListadoArticulosAlmacen.rbFamiliasClick(Sender: TObject); begin ActivarFamilias; DesactivarNombres; RefrescarInforme; end; procedure TfrListadoArticulosAlmacen.RdxFrameShow(Sender: TObject); begin DesactivarNombres; DesactivarFamilias; CodAlmacen.SetFocus; end; procedure TfrListadoArticulosAlmacen.DescripcionIniPropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin if EsCadenaVacia(DisplayValue) then DisplayValue := dmTablaArticulos.DarArticuloMin else if AnsiCompareText(DisplayValue, DescripcionFin.Text) > 0 then begin ErrorText := msgInfArticuloIniMayor; Error := True; Exit; end; FArticuloIni.Descripcion := DisplayValue; FArticuloIni.Codigo := ''; RefrescarInforme; end; procedure TfrListadoArticulosAlmacen.DescripcionFinPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin case Entidad of entAlmacen : EntidadModal := entArticulosAlmacen; entAlmacenFisico : EntidadModal := entArticulosAlmacenFisico; entAlmacenObra : EntidadModal := entArticulosAlmacenObra; end; ContenidoModal := TfrArticulosAlmacen.Create(Self); if not VarIsNull(FCodigoArticuloAux) then begin FArticuloFin.Codigo := FCodigoArticuloAux; dmTablaArticulos.DarDatosArticulo(FArticuloFin); DescripcionFin.EditingText := FArticuloFin.Descripcion; PostMessage(DescripcionFin.Handle, WM_KEYDOWN, VK_RETURN, 0); end; end; procedure TfrListadoArticulosAlmacen.DescripcionFinPropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin if EsCadenaVacia(DisplayValue) then DisplayValue := dmTablaArticulos.DarArticuloMax else if AnsiCompareText(DisplayValue, DescripcionIni.Text) < 0 then begin ErrorText := msgInfArticuloIniMayor; Error := True; Exit; end; FArticuloFin.Descripcion := DisplayValue; FArticuloFin.Codigo := ''; RefrescarInforme; end; procedure TfrListadoArticulosAlmacen.cbFamiliaIniPropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin if AnsiCompareText(DisplayValue, cbFamiliaFin.Text) > 0 then begin ErrorText := msgInfFamiliaIniMayor; Error := True; Exit; end; RefrescarInforme; end; procedure TfrListadoArticulosAlmacen.cbFamiliaFinPropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin if AnsiCompareText(DisplayValue, cbFamiliaIni.Text) < 0 then begin ErrorText := msgInfFamiliaIniMayor; Error := True; Exit; end; RefrescarInforme; end; procedure TfrListadoArticulosAlmacen.VerModal; begin if (ContenidoModal is TfrArticulosAlmacen) then begin (ContenidoModal as TfrArticulosAlmacen).CodigoAlmacen := CodigoAlmacen; //Aunque desactive Almacen no se asegura que pueda darse un cambio de almacen (ContenidoModal as TfrArticulosAlmacen).cbxAlmacen.Enabled := False; (ContenidoModal as TfrArticulosAlmacen).bFinalizar.Visible := False; end; inherited; end; procedure TfrListadoArticulosAlmacen.CodAlmacenPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin EntidadModal := Entidad; ContenidoModal := TfrAlmacenes.Create(Self); end; function TfrListadoArticulosAlmacen.CambiarEntidad(EntidadAnterior, Entidad: TRdxEntidad): Boolean; begin if not inherited CambiarEntidad(EntidadAnterior, Entidad) then Exit; ConfigurarFrame(Self, Self.Entidad); end; end.