{ =============================================================================== 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, ExtCtrls, StdCtrls, RdxTitulos, RdxPaneles, RdxCampos, cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxButtonEdit, cxDropDownEdit, RdxRadioButton, RdxShape, TablaArticulos, Tipos, RdxFrame, cxGraphics, Entidades, InformeEstadoAlmacen, VistaPrevia; type TfrListadoArticulosAlmacen = class(TRdxFrame) eAlmacen: TLabel; CodAlmacen: TcxButtonEdit; NombreAlmacen: TRdxEdit; Separador: TRdxShape; pnlVistaPrevia: TPanel; eInfoCriterios: TLabel; rbTodos: TRdxRadioButton; rbArticulos: TRdxRadioButton; DescripcionIni: TcxButtonEdit; DescripcionFin: TcxButtonEdit; rbFamilias: TRdxRadioButton; cbFamiliaIni: TcxComboBox; Label1: TLabel; eInformacion: TLabel; cDatos: TRdxCabecera; cbFamiliaFin: TcxComboBox; pnlTitulo: TRdxPanelTituloOperacion; pnlCuerpo: TPanel; 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 FVistaPrevia : TfrVistaPrevia; FCodigoAlmacen: Variant; FCodigoArticuloAux : Variant; FArticuloIni : TDatosArticulo; FArticuloFin : TDatosArticulo; FInforme : TdmInformeEstadoAlmacen; procedure ActivarNombres; procedure ActivarFamilias; procedure DesactivarNombres; procedure DesactivarFamilias; procedure SetCodigoAlmacen(const Value: Variant); procedure RefrescarInforme; protected procedure ActualizarEstado; override; procedure FreeContenido; override; procedure VerModal; override; function CloseFrame : Boolean; 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, RdxFrameAlmacenes, RdxFrameArticulos, TablaFamilias, ArticulosAlmacen, Literales, Variants; {$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); dmTablaArticulos.ArtModelo := entArticulo; 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; FVistaPrevia := TfrVistaPrevia.Create(Self); FVistaPrevia.Parent := pnlVistaPrevia; FInforme := TdmInformeEstadoAlmacen.Create(Self); FInforme.Preview := FVistaPrevia.Preview; RefrescarInforme; end; destructor TfrListadoArticulosAlmacen.Destroy; begin FInforme.Free; FArticuloIni.Free; FArticuloFin.Free; inherited; end; procedure TfrListadoArticulosAlmacen.RefrescarInforme; begin if VarIsNull(FCodigoAlmacen) then Exit; 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; function TfrListadoArticulosAlmacen.CloseFrame: Boolean; begin FInforme.Preview := NIL; (FVistaPrevia as TRdxFrame).CloseFrame; Result := inherited CloseFrame; end; end.