Formulario asistente de selección genérico

Creado por David Miralpeix, Modificado el Fri, 16 Feb 2024 a las 12:26 PM por David Miralpeix

Este formulario sirve para que un usuario pueda buscar un valor en una tabla de manera sencilla.

Consiste en configurar un formulario con un grid y un filtro, para que al hacer doble clic en el registro elegido, obtener el valor seleccionado.
Notas:
- Cuando un control de tipo combo tiene la propiedad "CaptionLink" activada, al pulsar F3, se lanza este formulario automáticamente con las columnas definidas en el control.
- También es llamado desde los campos de los grids al pulsar F3. Siempre que éstos tengan configuradas las propiedades del grid AsignaAsistente y AssistsFields (ver apartado de grid, asignación de asistente F3) que son las que determinarán el comportamiento de éste formulario.


Código VB6:

Definición del método addField:
Public Sub AddField(ByVal aField As String, Optional ByVal aDescrip As String, Optional ByVal aType As String, _
Optional ByVal aSize As Variant, Optional ByVal aAutosize As Boolean = False, _
Optional ByVal aDataField As Boolean = False, Optional ByVal aSearchField As Boolean = False, Optional aFormat As String = "")
-- Tipos de datos: "String", "Numeric", "Boolean", "Date", ""
-- Formatos (los mismos que los campos grid): "Sin decimales", "Con 2 decimales", "Fecha corta", etc.

Definición del método de carga:
Public Function Carga(aSource As String, aWhere As String, aOrder As String, Optional aDataField As String, _
Optional aValue As Variant, Optional aWidth As Single, Optional aHeight As Single, _
Optional aPropietario As Object, _
Optional ByVal aLoad As Boolean = False, _
Optional aControlFoco As eAsistenteFoco = eFiltrarPor) As Variant


El último parametro es para que especifiques donde quieres el foco.
Public Enum eAsistenteFoco
eTexto = 1
eBotFiltrar
eFiltrarPor
eCoincidir
EGrid
End Enum

Sub Main()

     frmAux.Descargar 'ATENCIÓN: DEBE ESTAR SIEMPRE QUE NO SE MUESTRE EL FORMULARIO.
 
     Dim lIdArticulo
     Dim lIdFamilia
     Dim lLista
 
     Set lAsist = gCn.ahoraProceso("DameAsistente",False,gCn) 
     With lAsist 
         .Caption="Indique la tarifa a aplicar"
         .AddField "Descrip", "Descripción", "String", , True, , True 
         .AddField "IdLista", "IdLista", "String", 1000, , True 
         lLista = .Carga("Listas_precios_Cli", " IdLista > = 0", "Descrip", "IdLista", lValue, , , gcn.sesion.MainForm )
     End With 
     If Len(lLista) > 0 Then
         MsgBox lLista
     Else
         MsgBox "no se ha seleccionado ninguna tarifa",vbExclamation,"Atención"
     End If

End Sub


Código C#:

using AhoraAsistentes;
using AhoraCore;
using AhoraOCX;
using static AhoraCore.VBA.Interaction;

namespace AhoraScriptsVacia
{
    public class Script_20 : AhoraOCX.AhoraBaseScript
    {
        public void Main()
        {
            IAsistente lAsist = (IAsistente)gCn.AhoraProceso("DameAsistente", out _, gCn);
            lAsist.Text = "Indique la tarifa a aplicar";
            lAsist.AddField("Descrip", "Descripcion", ETipoDato.String, null, true, false, true);
            lAsist.AddField("IdLista", "IdLista", ETipoDato.String, 67, false, true);
            Valor lLista = lAsist.Carga("Listas_Precios_Cli", "IdLista >= 0", "Descrip", "IdLista", null, 0, 0, gCn.Sesion.MainForm);
            if (lLista.ToString().Length > 0 )
            {
                MsgBox(lLista);
            }
            else
            {
                MsgBox("No se ha seleccionado ninguna tarifa", VbMsgBoxStyle.vbExclamation, "Atención");
            }
        }
    }
}


Para más información sobre este método: https://ahora.freshdesk.com/a/solutions/articles/44001792458

¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo