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