Diferencia entre revisiones de «TTprxSelectFromGridForm»

De Pragma Wiki
Ir a la navegación Ir a la búsqueda
Sin resumen de edición
Línea 146: Línea 146:
Si el form tiene varias sentencias elige a la primera.
Si el form tiene varias sentencias elige a la primera.


El form puede tener dos tipos de selección de registros:
Si el form permite tener selección múltiple de registros agrega la propiedad '''dgMultiSelect''' a la grilla usando:
*Simple: solo se puede elegir un registro.
<pre>
*Múltiple: se pueden elegir varios registros a la vez.
if SeleccionMultiple then
  prxDBGridSELECCION.Options := prxDBGridSELECCION.Options + [dgMultiSelect];
</pre>
 
===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=
 
Cuando seleccionamos la planilla carga la lista de hojas.

Revisión del 20:49 28 may 2025

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.

Selección de valores.

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:

Importar datos de una planilla.

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

Cuando seleccionamos la planilla carga la lista de hojas.