{ =============================================================================== 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.8 Fecha versión actual: 06-03-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 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. 09-05-2002 Cambio de grid en lugar de utilizar UltimDBGrid, utilizaremos dxDBGrid. 15-05-2002 Revisión. Cuando se añaden muchos materiales a la vez se respeta el orden de selección. 15-05-2002 P225. Guardar el último orden utilizado en las columnas de la lista de materiales. 30-07-2002 Revisión. Había un fallo al seleccionar varios materiales a la vez. No se borraba el contenido de la lista de selecciona- dos cuando se seleccionaba uno solo y se deseleccionaban los demás. 15-09-2002 P243. Añadir un campo de búsqueda rápida por la descripción. 06-03-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. =============================================================================== } unit Articulos; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, DBTables, Grids, DBGrids, ComCtrls, IBDatabase, ToolWin, ExtCtrls, IBCustomDataSet, IBQuery, RXDBCtrl, RdxPaneles, RdxBarras, RdxBotones, Tipos, Mensajes, RdxFrameArticulos, dxCntner, dxTL, dxDBCtrl, dxDBGrid, StdCtrls, RdxComboBox, dxDBEdtr, dxDBELib, dxEditor, dxExEdtr, dxEdLib; type TfrArticulos = class(TRdxFrameArticulos) BarraArticulos: TRdxBarraSuperior; bAnadir: TRdxBotonSuperior; bModificar: TRdxBotonSuperior; bEliminar: TRdxBotonSuperior; bConsultar: TRdxBotonSuperior; bBuscar: TRdxBotonSuperior; bListar: TRdxBotonSuperior; bLocalizar: TRdxBotonSuperior; brSeleccion: TRdxBarraInferior; bSeleccionar: TRdxBoton; bCancelarGuardar: TRdxBoton; dsArticulos: TDataSource; pnlCuerpo: TRdxPanel; pnlExtra: TRdxBarraSuperior; pnlBusquedaRapida: TRdxPanel; eBusqueda: TLabel; BusquedaRapida: TdxLookupEdit; pnlGrid: TPanel; gridArticulos: TdxDBGrid; imgSombra: TImage; procedure bAnadirClick(Sender: TObject); procedure bModificarClick(Sender: TObject); procedure bEliminarClick(Sender: TObject); procedure bConsultarClick(Sender: TObject); procedure bBuscarClick(Sender: TObject); procedure bSeleccionarClick(Sender: TObject); virtual; procedure bCancelarGuardarClick(Sender: TObject); procedure bListarClick(Sender: TObject); procedure bLocalizarClick(Sender: TObject); procedure gridArticulosRefreshButton(Sender: TObject); procedure BusquedaRapidaKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure gridArticulosDblClick(Sender: TObject); procedure gridArticulosSelectedCountChange(Sender: TObject); private FListaArticulosAux : TStringList; protected procedure ActualizarBotones; procedure BuscarArticulo; override; procedure FreeContenido; override; procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override; public constructor Create (AOwner : TComponent); override; destructor Destroy; override; published property TablaArticulos; property Entidad; end; var frArticulos: TfrArticulos; implementation {$R *.DFM} uses BaseDatos, Articulo, BuscarArticulo, TablaArticulos, ListarArticulos, LocalizarArticulo, Configuracion, Literales; constructor TfrArticulos.Create (AOwner : TComponent); begin inherited Create(AOwner); Entidad := entArticulo; ConfigurarFrame(Self, Self.Entidad); BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion;; TablaArticulos := TIBDataSet.Create(Self); dsArticulos.DataSet := TablaArticulos; with gridArticulos do begin IniFileName := Configuracion.FICHERO_CONFIGURACION; IniSectionName := 'MATERIAL'; OptionsBehavior := OptionsBehavior + [edgoStoreToIniFile]; end; with TablaArticulos do begin DisableControls; Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaArticulos.sqlGrid); Prepare; Open; ActualizarBotones; dmTablaArticulos.InicializarTablaArticulos(@TablaArticulos); EnableControls; end; dmTablaArticulos.InicializarGridArticulos(gridArticulos); gridArticulos.LoadFromIniFile(gridArticulos.IniFileName); FListaArticulosAux := TStringList.Create; gridArticulos.GotoFirst; end; destructor TfrArticulos.Destroy; begin TablaArticulos.Close; TablaArticulos.UnPrepare; TablaArticulos.Free; if FListaArticulosAux <> NIL then begin FListaArticulosAux.Clear; FListaArticulosAux.Free; FListaArticulosAux := NIL; end; inherited; end; procedure TfrArticulos.BuscarArticulo; begin with TablaArticulos do begin DisableControls; Close; Open; ActualizarBotones; dmTablaArticulos.InicializarTablaArticulos(@TablaArticulos); EnableControls; end; TablaArticulos.Locate('CODIGO',CodigoArticulo,[]); end; procedure TfrArticulos.FreeContenido; begin if (Contenido is TRdxFrameArticulos) then CodigoArticulo := (Contenido as TRdxFrameArticulos).CodigoArticulo; inherited; end; procedure TfrArticulos.bAnadirClick(Sender: TObject); begin Contenido := TfrArticulo.Create(Self); Contenido.Modo := Anadir; end; procedure TfrArticulos.bModificarClick(Sender: TObject); begin CodigoArticulo := TablaArticulos.FieldByName('CODIGO').AsString; Contenido := TfrArticulo.Create(Self); Contenido.Modo := Modificar; end; procedure TfrArticulos.bEliminarClick(Sender: TObject); begin CodigoArticulo := TablaArticulos.FieldByName('CODIGO').AsString; Contenido := TfrArticulo.Create(Self); Contenido.Modo := Eliminar; end; procedure TfrArticulos.bConsultarClick(Sender: TObject); begin CodigoArticulo := TablaArticulos.FieldByName('CODIGO').AsString; Contenido := TfrArticulo.Create(Self); Contenido.Modo := Consultar; end; procedure TfrArticulos.bBuscarClick(Sender: TObject); begin CodigoArticulo := TablaArticulos.FieldByName('CODIGO').AsString; Contenido := TfrBuscarArticulo.Create(Self); end; procedure TfrArticulos.bSeleccionarClick(Sender: TObject); var ListaArtSelec : TStringList; iAux : Integer; Aux : integer; begin if TablaArticulos.RecordCount = 0 then begin VerMensaje(msgArtNoHayArt); exit; end; // Para no hacer un BuscarArticulo que no es necesario // FCodigoArticulo := TablaArticulos.FieldByName('CODIGO').Value; if gridArticulos.SelectedCount <= 1 then FCodigoArticulo := TablaArticulos.FieldByName('CODIGO').Value else ListaArticulos := FListaArticulosAux; //FListaArticulos := dmTablaArticulos.darListaArticulos(gridArticulos, @TablaArticulos); CloseFrame; end; procedure TfrArticulos.bCancelarGuardarClick(Sender: TObject); begin FCodigoArticulo := Null; CloseFrame; end; procedure TfrArticulos.bListarClick(Sender: TObject); begin CodigoArticulo := TablaArticulos.FieldByName('CODIGO').AsString; Contenido := TfrListarArticulos.Create(Self); Contenido.Modo := Listar; end; procedure TfrArticulos.bLocalizarClick(Sender: TObject); begin CodigoArticulo := TablaArticulos.FieldByName('CODIGO').AsString; Contenido := TfrLocalizarArticulo.Create(Self); Contenido.Modo := Localizar; Contenido.Visible := True; end; procedure TfrArticulos.ActualizarBotones; begin if BaseDatos.IsReadOnly then begin bAnadir.Enabled := False; bModificar.Enabled := False; bEliminar.Enabled := False; bConsultar.Enabled := True; bBuscar.Enabled := True; bListar.Enabled := True; bLocalizar.Enabled := True; Exit; end; if TablaArticulos.RecordCount = 0 then begin bAnadir.Enabled := True; bModificar.Enabled := False; bEliminar.Enabled := False; bConsultar.Enabled := False; bBuscar.Enabled := False; bListar.Enabled := False; bLocalizar.Enabled := False; end else begin bAnadir.Enabled := True; bModificar.Enabled := True; bEliminar.Enabled := True; bConsultar.Enabled := True; bBuscar.Enabled := True; bListar.Enabled := True; bLocalizar.Enabled := True; end; end; procedure TfrArticulos.gridArticulosRefreshButton(Sender: TObject); begin BuscarArticulo; end; procedure TfrArticulos.gridArticulosSelectedCountChange(Sender: TObject); var IndiceCol : Integer; CodArt : String; IndiceSel : Integer; begin if TablaArticulos.Active then begin IndiceCol := gridArticulos.ColumnByFieldName('CODIGO').Index; CodArt := gridArticulos.FocusedNode.Strings[IndiceCol]; FListaArticulosAux.Clear; for IndiceSel:=0 to gridArticulos.SelectedCount-1 do FListaArticulosAux.Add(gridArticulos.SelectedNodes[IndiceSel].Strings[IndiceCol]); end; end; procedure TfrArticulos.BusquedaRapidaKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = VK_RETURN) and (Modo = Seleccionar) then bSeleccionar.Click; end; procedure TfrArticulos.CambiarModo(ModoAnterior, Modo: TRdxModo); begin inherited; dmTablaArticulos.InicializarTablaArticulos(@TablaArticulos); if Modo = Seleccionar then gridArticulos.OptionsBehavior := gridArticulos.OptionsBehavior + [edgoMultiSelect] else gridArticulos.OptionsBehavior := gridArticulos.OptionsBehavior - [edgoMultiSelect]; end; procedure TfrArticulos.gridArticulosDblClick(Sender: TObject); begin if Modo = Seleccionar then bSeleccionar.Click else bModificar.Click; end; end.