unit Articulo; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxEdit, DB, cxDBData, Menus, am2000menuitem, am2000popupmenu, am2000, cxButtonEdit, cxDBEdit, cxMaskEdit, cxDropDownEdit, cxContainer, cxTextEdit, cxMemo, StdCtrls, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView, cxGridCardView, cxGridDBCardView, cxGrid, AdvPanel, ExtCtrls, RdxBotones, RdxPaneles, RdxBarras, RdxTitulos, RdxFrame, ArticuloModelo, IBCustomDataSet, IBQuery, cxLookupEdit, cxDBLookupEdit, cxDBLookupComboBox, ActnList, cxDataStorage; type TfrArticulo = class(TfrArticuloModelo) Label1: TLabel; Precio: TcxDBTextEdit; Label2: TLabel; Referencia: TcxDBTextEdit; procedure CodigoPropertiesButtonClick(Sender: TObject;AButtonIndex: Integer); override; procedure cbxFamiliaPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); private FFamilia : Variant; function CargarPropiedadesModelo(Familia: Integer): Boolean; protected procedure ActivarModoAnadir; override; procedure ActivarModoModificar; override; procedure ActivarModoEliminar; override; procedure ActivarModoConsultar; override; procedure InicializarTablas; override; end; var frArticulo: TfrArticulo; implementation uses TablaArticulos, TablaPropiedadesArticulo, TablaPropiedades, TablaFamilias, Entidades, BaseDatos, IBSQL, Articulos, Mensajes, RxMemDS, Literales, Configuracion; {$R *.dfm} { TfrArticulo } procedure TfrArticulo.ActivarModoAnadir; begin inherited; dmTablaArticulos.InicializarTablaArticulos(@TablaArticulos); // TablaArticulos.FieldByName('FAMILIA').OnSetText := FamiliaSetText; Referencia.SetFocus; end; procedure TfrArticulo.ActivarModoModificar; begin inherited; dmTablaArticulos.InicializarTablaArticulos(@TablaArticulos); // TablaArticulos.FieldByName('FAMILIA').OnSetText := FamiliaSetText; Descripcion.SetFocus; end; function TfrArticulo.CargarPropiedadesModelo(Familia: Integer): Boolean; var Contador : Integer; DatosArtModelo : TDatosArticuloModelo; PropiedadAux : TDatosPropiedad; begin Result := False; DatosArtModelo := TDatosArticuloModelo.Create(Familia); try if (DatosArtModelo.ListaPropiedades.Count > 0) and (VerMensajePregunta(msgDatosCargaPropFamilia) = IDYES) then begin // Insertamos las propiedades with TablaPropiedadesMem do begin DisableControls; EmptyTable; try First; for Contador := 0 to (DatosArtModelo.ListaPropiedades.Count - 1) do begin PropiedadAux := DatosArtModelo.ListaPropiedades.Items[Contador]; Insert; FieldByName('CODIGOPROPIEDAD').AsInteger := PropiedadAux.CodigoPropiedad; FieldByName('VALOR').AsString := PropiedadAux.Valor; Post; end; finally EnableControls; end; end; end; finally DatosArtModelo.Free; end; Result := True; end; procedure TfrArticulo.CodigoPropertiesButtonClick(Sender: TObject;AButtonIndex: Integer); begin if (TratarCambios = IDCANCEL) then exit; { Esto es porque en modo 'Modificar' hacemos un cambio y pulsamos este botón se cierra la tabla y si en el frame hijo (el del grid) damos a cancelar, FCodigoArticulo es NULL y da error al activar modo porque no se inicializa los parámetros de la sql. Lo hace BuscarInstalador. } if not TablaArticulos.Active then BuscarArticulo; ContenidoModal := TfrArticulos.Create(Self); end; procedure TfrArticulo.InicializarTablas; begin Entidad := entArticulo; dmTablaArticulos.ArtModelo := entArticulo; with TablaArticulos do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaArticulos.sqlConsultar); InsertSQL.Assign(dmTablaArticulos.sqlInsertar); ModifySQL.Assign(dmTablaArticulos.sqlModificar); DeleteSQL.Assign(dmTablaArticulos.sqlEliminar); RefreshSQL.Assign(dmTablaArticulos.sqlConsultar); end; with TablaPropiedades do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaPropiedadesArticulo.sqlGrid); InsertSQL.Assign(dmTablaPropiedadesArticulo.sqlInsertar); ModifySQL.Assign(dmTablaPropiedadesArticulo.sqlModificar); DeleteSQL.Assign(dmTablaPropiedadesArticulo.sqlEliminar); RefreshSQL.Assign(dmTablaPropiedadesArticulo.sqlConsultar); end; end; procedure TfrArticulo.cbxFamiliaPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin inherited; if (FFamilia <> DisplayValue) then begin FFamilia := DisplayValue; if CargarPropiedadesModelo(dsFamilias.DataSet.FieldByName('CODIGO').AsInteger) then Descripcion.SetFocus; ActualizarBotones; end; end; procedure TfrArticulo.ActivarModoEliminar; begin inherited; dmTablaArticulos.InicializarTablaArticulos(@TablaArticulos); end; procedure TfrArticulo.ActivarModoConsultar; begin inherited; dmTablaArticulos.InicializarTablaArticulos(@TablaArticulos); end; end.