TTprxSelectFromGridForm
Descripción
El objeto TTprxSelectFromGridForm (Form para seleccionar valores.) permite seleccionar valores durante la edición de cualquier tabla. Normalmente se accede a este form presionando F5 sobre cualquier campo que tenga una clave foránea sobre otra tabla (por ejemplo: el campo cliente en una factura).
En su versión más sencilla ejecuta una sentencia SQL que completa la grilla con los registros producto del SQL y el usuario puede seleccionar un registro posicionándose sobre el mismo y picando el botón Seleccionar. Pero el form admite más de una sentencia.

Por ejemplo, Elegir sentencia SQL tiene tres elementos:
- primitivo: el SQL trae los atributos primitivos.
- clase: el SQL trae los atributos de tipo clase.
- enumeraciones: el SQL trae los atributos de tipo enumeración.
(Ver Catalogos, tipos de datos disponibles).
Si el form contiene más de una sentencia, cuando cambiamos la sentencia en el combo se refrescan los resultados de la pantalla.
El form también permite importar datos de una planilla Excel, en ese caso habilita un panel superior para elegir la planilla (y hoja) de la computadora:

El form puede tener dos tipos de selección de registros:
- Simple: solo se puede elegir un registro.
- Múltiple: se pueden elegir varios registros a la vez.
Identidad
- Ancestro: TTprxForm
- Carpeta: C:\DevelopPrx\classes
- Archivo: prxSelectFromGridForm.PAS
Declaración
El form primero declara una clase que permite guardar las distintas sentencias SQL:
type TTprxSelectFromGridFormSentencia = class(TComponent) private FNombre: String; FComandos: TStringList; protected public property Nombre: String read FNombre write FNombre; property Comandos: TStringList read FComandos write FComandos; published end;
Y la declaración finalmente es:
type TTprxSelectFromGridForm = class(TTprxForm) ActionSELECCION_F5: TAction; Panel3: TPanel; Panel2: TPanel; SpeedButtonVERSENTENCIA: TSpeedButton; ButtonSELECCIONAR: TButton; ButtonCANCELAR: TButton; ComboBoxSENTENCIA: TComboBox; Panel1: TPanel; prxDBGridSELECCION: TfvsDBGrid; PanelPLANILLA: TPanel; GroupBox1: TGroupBox; Panel5: TPanel; Panel6: TPanel; Panel7: TPanel; Panel8: TPanel; Panel9: TPanel; prxStaticText1: TStaticText; EditPLANILLA: TEdit; Panel10: TPanel; Panel11: TPanel; prxStaticText2: TStaticText; Panel12: TPanel; Panel13: TPanel; StaticText2: TStaticText; OpenDialog1: TOpenDialog; ComboBoxHOJA: TComboBox; prxADODataSetExcel1: TprxADODataSetExcel; CheckBoxTODOS: TCheckBox; ButtonSELECCIONAR_PLANILLA: TButton; ButtonCARGAR_PLANILLA: TButton; ComboSetFocus: TAction; GrillaSetFocus: TAction; procedure FormShow(Sender: TObject); procedure ButtonSELECCIONARClick(Sender: TObject); procedure ButtonCANCELARClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure ComboBoxSENTENCIASelect(Sender: TObject); procedure FormCreate(Sender: TObject); procedure SpeedButtonVERSENTENCIAClick(Sender: TObject); procedure ActionSELECCION_F5Execute(Sender: TObject); procedure SpeedButtonPLANILLAClick(Sender: TObject); procedure EditPLANILLAExit(Sender: TObject); procedure SpeedButtonCARGARClick(Sender: TObject); procedure ComboSetFocusExecute(Sender: TObject); procedure GrillaSetFocusExecute(Sender: TObject); procedure FormProgresoClose(Sender: TObject); procedure prxDBGridSELECCIONMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure prxDBGridSELECCIONKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure CheckBoxTODOSClick(Sender: TObject); private FListo: Boolean; FSeleccionMultiple: Boolean; FImportarPlanilla: Boolean; FComando: String; FSentenciaDefecto: String; FCampoDefecto: String; FValorDefecto: String; FProgresoForm: TTprxProgresoForm; FSeleccionar: Boolean; protected Sentencias: array of TTprxSelectFromGridFormSentencia; SentenciasCount: Integer; procedure SetComando(aValue: String); function PanelPlanillaVisible: Boolean; procedure SetSeleccionar(aValue: Boolean); procedure ImprimirCantidadSeleccionada; property Listo: Boolean read FListo write FListo; property ProgresoForm: TTprxProgresoForm read FProgresoForm write FProgresoForm; public procedure AgregarSentencia(aNombre: String; aSentencia: String); overload; procedure AgregarSentencia(aNombre: String; aSentencia: TStringList); overload; procedure Recorrer(aCall: TTprxSelectFromGridFormOnRecord); function ComboBoxELEGIDO: String; property SeleccionMultiple: Boolean read FSeleccionMultiple write FSeleccionMultiple; property ImportarPlanilla: Boolean read FImportarPlanilla write FImportarPlanilla; property SentenciaDefecto: String read FSentenciaDefecto write FSentenciaDefecto; property CampoDefecto: String read FCampoDefecto write FCampoDefecto; property ValorDefecto: String read FValorDefecto write FValorDefecto; property Seleccionar: Boolean read FSeleccionar write SetSeleccionar; published property Comando: String read FComando write SetComando; end;
Implementación
procedure FormShow(Sender: TObject)
Si el form tiene varias sentencias elige a la primera.
Si el form permite tener selección múltiple de registros agrega la propiedad dgMultiSelect a la grilla usando:
if SeleccionMultiple then prxDBGridSELECCION.Options := prxDBGridSELECCION.Options + [dgMultiSelect];
procedure AgregarSentencia(aNombre: String; aSentencia: String)
Permite agregar una sentencia SQL indicando:
- aNombre es el nmbre de la sentencia (primitivo, clase, enumeracion en la imagen).
- aSentencia es la sentencia como un string.
procedure AgregarSentencia(aNombre: String; aSentencia: TStringList)
Similar anterior, pero informa la sentencia como una lista de strings.
procedure ButtonSELECCIONARClick(Sender: TObject)
Si existe por lo menos un registro seleccionado retorna ModalResult := mrOk, si no hay registros seleccionados retorna ModalResult := mrCancel. Luego cierra el form.
procedure ButtonCANCELARClick(Sender: TObject)
Retorna ModalResult := mrCancel y cierra el form.
procedure ComboBoxSENTENCIASelect(Sender: TObject)
Ejecutado cuando cambia la sentencia SQL en el combo ejecuta los comandos asociados y refresca los registros de la grilla.
procedure SpeedButtonVERSENTENCIAClick(Sender: TObject)
Pedrmite ver la sentencia SQL elegida picando el botón con una lupa a la izquierda del combo.
procedure Recorrer(aCall: TTprxSelectFromGridFormOnRecord)
Recorre el resultado de un dataset y llama al procedimiento informado en el argumento aCall.
Importar planilla
function PanelPlanillaVisible: Boolean
Visibiliza el panel con los datos necesarios para importar registros desde una planilla.
procedure SpeedButtonPLANILLAClick(Sender: TObject)
Abre el diálogo de selección de Windows para seleccionar una planilla.
procedure EditPLANILLAExit(Sender: TObject)
Al salir del campo planilla carga la lista de hojas.
procedure SpeedButtonCARGARClick(Sender: TObject)
Carga los datos de la planilla.
Uso
Ejemplo de uso tomado de TpAUX_CAMPO_SELECT_F5_unit.SELECT.
var vF: TTprxSelectFromGridForm; begin vF := TTprxSelectFromGridForm.Create(Self); vF.Caption := 'Seleccionar'; vF.AgregarSentencia('SELECT', SQL_COMANDO); vF.ShowModal; if vF.ModalResult = mrOk then begin DataSet.FieldValues[Campo] := vF.prxADOQueryAUXDeBase.Fields[0].AsString; Result := True; end else Result := False; vF.Release; end;
Instanciamos el form y definimos su título:
vF := TTprxSelectFromGridForm.Create(Self); vF.Caption := 'Seleccionar';
Agregamos la sentencia llamada SELECT, los comandos se encuentran en la lista SQL_COMANDO:
vF.AgregarSentencia('SELECT', SQL_COMANDO);
Mostramos el form en modo Modal para que no pueda usarse ninguna otra pantalla de la aplicación hasta que cerrems ésta:
vF.ShowModal;
Como el form se abrió en modo Modal, al cerrarlo va a setear su propiedad ModalResult a mrOk indicando éxito o a mrCancel indicando fracaso. Entonces si el valor de retorno del form es mrOk:
if vF.ModalResult = mrOk then begin DataSet.FieldValues[Campo] := vF.prxADOQueryAUXDeBase.Fields[0].AsString; Result := True; end else Result := False; <pre> Asignamos el valor del primer campo de la grilla (vF.prxADOQueryAUXDeBase.Fields[0].AsString) al campo que abrió el form (DataSet.FieldValues[Campo]): <pre> DataSet.FieldValues[Campo] := vF.prxADOQueryAUXDeBase.Fields[0].AsString;
Finalmente cerramos el form y liberamos la memoria que había ocupado:
vF.Release;
Usos
- TprxCmpCABECERA.AsignarComprobante_Registrado.
- [[TTfvsCatalogoImportarForm.SpeedButton_PENDIENTES_APLICACIONClick.
- TTfvsDBClientFrameMemo.prxMemoSENTENCIAKeyDown.
- TTfvsDBClientFrameRoleDefinition.fva_agregar_objeto_con_form_seleccion_click.
- TgfcAGENDA_implemented.AsociarConUnPagoClick.
- Tfva_campos_item.EDIT_SELECT.
- TpAUX_CAMPO_SELECT_F5_unit.SELECT.
- TpAUX_CLASE_OPCIONES_unit.Auditoria_OnClick.
- TpAUX_CLASE_OPCIONES_unit.OnClick_SQL_SELECCIONAR.
- TpAUX_CLASE_ORIGEN_unit.OnClick.