# ComboBox en formulario sin origen

**URL:** <https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219>\
**Category:** Velneo\
**Created:** [28 Julio, 2015 15:49 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219 "2015-07-28T15:49:58Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![ebermuz](https://avatars.discourse-cdn.com/v4/letter/e/dfb087/32.png) [@ebermuz](https://foros.velneo.com/u/ebermuz)\
**Post date:** [28 Julio, 2015 15:49 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/1 "2015-07-28T15:49:58Z")

</div>

Caluroso saludo a la comunidad de velneo  
Tengo un formulario de búsqueda sin origen con una variable local. El formulario tiene un control de Combobox que debe rellenarse con unos ítems, el item seleccionado debe gravarse en la variable local. Estuve ensayando en un ejemplo con JavaScript - “Interactuar con un control combo box mediante JavaScript”- El script no grava el ítem seleccionado. Alguien que tenga éste combobox con JavaScript depurado y que [funcione.Me](http://funcione.Me) pueden dar una mano.  
Gracias de antemano  
Eliseo

---

<div class="post-metadata">

**Author:** ![sergi-esteve](https://avatars.discourse-cdn.com/v4/letter/s/7993a0/32.png) [@sergi-esteve](https://foros.velneo.com/u/sergi-esteve)\
**Post date:** [28 Julio, 2015 16:13 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/2 "2015-07-28T16:13:20Z")

</div>

Hola.

No se el ejemplo que comentas.

Yo lo tengo así en algún sitio.

- En el formulario una variable local ITEM\_SEL de tipo numérico.

- Un manejador js llamado LLENA\_COMBO\_BOX (En este caso lo rellena con una tabla de almacenes, pero es aplicable a cualquier rellenado)

//Accedemos al root del formulario en curso  
form = theRoot.dataView();

// Accedemos al control combo box. Se resuelve con el identificador del control  
combo = form.control(‘CB\_ALMACENES’);

// Recorremos lista de almacenes remotos  
var recAlmacenes = new VRegisterList(theRoot);  
recAlmacenes.setTable(“4osmrjb4.vcd/ALMACENES”);

var res = [];  
recAlmacenes.load( “ID” , res );  
for( var i=0; i \< recAlmacenes.listSize(); i++ )  
{  
var almacen = recAlmacenes.readAt( i );   
if ( almacen.isOK() ) combo.addItem(almacen.fieldToString(“NAME”), almacen.fieldToInt(“ID”) );  
}

- Un manejador JS llamado LEE\_COMBO\_SELEC

// Capturamos el formulario  
form = theRoot.dataView();

// Accedemos al control combo box. Se resuelve con el identificador del control  
combo = form.control(“CB\_ALMACENES”);

//Obtenemos la posición del ítem seleccionado en el combo  
var sel = combo.currentIndex;

//Extraemos el valor del ítem seleccionado (en este caso, el ID del registro)  
var codsel = combo.itemData(sel);

//Asignamos el dato leído a la variable local del formulario ITEM\_SEL  
theRoot.setVar(“ITEM\_SEL”, codsel);

- Puedes rellenar el combo llamando al maejador LLENA\_COMBO\_BOX en el post-init (o cualquier evento posterior)
- En cualquier momnento, para recoger el valor el combo llamas al manejador LEE\_COMBO\_SELEC y a partir de ahí tienes el valor en la variable ITEM\_SEL.

Un saludo.

---

<div class="post-metadata">

**Author:** ![mdelgado](https://avatars.discourse-cdn.com/v4/letter/m/cc9497/32.png) [@mdelgado](https://foros.velneo.com/u/mdelgado)\
**Post date:** [29 Julio, 2015 13:00 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/3 "2015-07-29T13:00:09Z")

</div>

@Eliseo

Una solución simple, pero efectiva, es crear en tu sistema una tabla en memoria. Usa esta tabla para añadir enlaces a los maestros que necesites mostrar en algún combobox de tu aplicación. Ponle este origen a aquellos formularios que tienes sin origen y listo.

---

<div class="post-metadata">

**Author:** ![ebermuz](https://avatars.discourse-cdn.com/v4/letter/e/dfb087/32.png) [@ebermuz](https://foros.velneo.com/u/ebermuz)\
**Post date:** [29 Julio, 2015 16:36 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/4 "2015-07-29T16:36:43Z")

</div>

Gracias sergi.estive y mdelgado por sus aportes.  
Los formularios de búsquedas sin origen son de mucha ayuda en la búsqueda de registros.  
Aquí les dejo a toda la comunidad de velneo los detalles del proceso un poco didáctico,  
pero es una fiel copia de Rafael Cueto en base del conocimiento del soporte.

1. Crea un manejador de Evento pero con lenguaje Java Script

2. Pega el siguiente script:

Explicacion: Los textos que se encuentran entre comillas es lo que va a rellenar el ComboBox. Pueden ser otros items

Dispara éste script con la Conexion de eventos ( Señal: Post\_ini-inicializado)

1. Crea otro manejador de Evento en lenguaje Java Script.
2. Pega el siguiente script

// Capturamos el formulario  
form = theRoot.dataView();

// Accedemos al control combo box. Se resuelve con el identificador del control  
combo = form.control(“Identificacion del control Combobox”);

//Obtenemos la posición del ítem seleccionado en el combo  
var sel = combo.currentIndex;

//Extraemos el valor del ítem seleccionado (en este caso, el ID del registro)  
var codsel = combo.itemData(sel);

//Asignamos el dato leído a la variable local del formulario ITEM\_SEL ( Identificacion de la variable local)  
theRoot.setVar(“ITEM\_SEL”, codsel);

Explicacion: Dispara éste script con otra conexion de evento distinta a la anterior o sea post\_inicializado  
Vincularlo al boton aceptar y en comando: ejecutar manejador de evento. Evento: lo vincula.

---

<div class="post-metadata">

**Author:** ![tempsmollet](https://avatars.discourse-cdn.com/v4/letter/t/977dab/32.png) [@tempsmollet](https://foros.velneo.com/u/tempsmollet)\
**Post date:** [23 Septiembre, 2015 11:03 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/5 "2015-09-23T11:03:34Z")

</div>

Hola Foro,

He utilizado el ejemplo de [N1]sergi.esteve para poder rellenar y leer un CamboBox en un formulario sin origen, y como no, todo correcto, pero necesito que en el ejemplo de rellenar se pueda filtrar por aquellos registro que contienen un campo Boleano que se usa para indicar si el Doctor esta activo o no.

Como bien he dicho otras veces no tengo ni idea de JS y necesito de alguna alma caritativa para que me eche una mano para poder filtrar por el campo Boleano en el ejemplo de [N1]sergi.esteve, que adjunto a continuación:

**//Accedemos al root del formulario en curso  
form = theRoot.dataView();  
// Accedemos al control combo box. Se resuelve con el identificador del control  
combo = form.control(“COMBO\_BOX\_DOCTORES”);  
// Recorremos lista de los Doctores  
var recDoctores = new VRegisterList(theRoot);  
recDoctores.setTable(“4ka4h8x3.vcd/DOCTORES”);**

var res = [];  
recDoctores.load( “ID” , res );  
for( var i=0; i \< recDoctores.listSize(); i++ )  
{  
var Doctores = recDoctores.readAt( i );  
if ( Doctores.isOK() ) combo.addItem(Doctores.fieldToString(“NAME”), Doctores.fieldToInt(“ID”) );  
}

Espero haberme explicado correctamente,  
Saludos

---

<div class="post-metadata">

**Author:** ![manuel.rd](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/manuel.rd/32/3508_2.png) [@manuel.rd](https://foros.velneo.com/u/manuel.rd)\
**Post date:** [23 Septiembre, 2015 11:18 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/6 "2015-09-23T11:18:35Z")

</div>

Ramón tienes los comboView, que generan un combo en base a un proceso.  
De todas formas, añadiendo

```auto
if(Doctores.fieldToBool("ACTIVO") && Doctores.isOK()){
    combo.addItem(Doctores.fieldToString(“NAME”), Doctores.fieldToInt(“ID”) );
}

```

Ya rellenas el combo solo con los activos.

---

<div class="post-metadata">

**Author:** ![tempsmollet](https://avatars.discourse-cdn.com/v4/letter/t/977dab/32.png) [@tempsmollet](https://foros.velneo.com/u/tempsmollet)\
**Post date:** [23 Septiembre, 2015 11:40 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/7 "2015-09-23T11:40:30Z")

</div>

Hola Manuel, gracias por responder.

Todo correcto, adjunto como ha quedado el JS de ejemplo para rellenar un Combox sin Origen :

**// Ejemplo original de [N1] sergi.esteve  
//Accedemos al root del formulario en curso  
form = theRoot.dataView();  
// Accedemos al control combo box. Se resuelve con el identificador del control  
combo = form.control(“COMBO\_BOX\_DOCTORES”);  
// Recorremos lista de los Doctores  
var recDoctores = new VRegisterList(theRoot);  
recDoctores.setTable(“4ka4h8x3.vcd/DOCTORES”);**

var res = [];  
recDoctores.load( “ID” , res );  
for( var i=0; i \< recDoctores.listSize(); i++ )

// Se filtra la selección por Doctores activo -\> “DOCTOR\_ACTIVO”  
{  
var Doctores = recDoctores.readAt( i );  
if(Doctores.fieldToBool(“DOCTOR\_ACTIVO”) && Doctores.isOK())  
combo.addItem(Doctores.fieldToString(“NAME”), Doctores.fieldToInt(“ID”) );  
}

Saludos

---

<div class="post-metadata">

**Author:** ![gontorre](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/gontorre/32/5728_2.png) [@gontorre](https://foros.velneo.com/u/gontorre)\
**Post date:** [23 Septiembre, 2015 12:23 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/8 "2015-09-23T12:23:41Z")

</div>

Buenos días

Rellenar un combo en un formulario sin origen con datos de una lista es más sencillo que todo eso. Se puede utilizar una vista de datos que tenga como primer objeto el proceso que devuelve la lista que queramos mostrar y como segundo objeto un comboview de la tabla correspondiente.

Para recoger el elemento seleccionado se utiliza una conexión de evento asociada a Item:cambio de seleccionado de la vista de datos que llame a un manejador que haga:

Interfaz: Procesar(LISTA, Todas)  
Leer ficha seleccionada  
Set (N\_ID\_SEL, #ID)

Yo lo tengo así en varios sitios y funciona bien. Todo con código de Velneo.

Un saludo

Gonzalo Torre

---

<div class="post-metadata">

**Author:** ![carlos](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/carlos/32/5261_2.png) [@carlos](https://foros.velneo.com/u/carlos)\
**Post date:** [23 Septiembre, 2015 18:59 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/9 "2015-09-23T18:59:21Z")

</div>

Yo tengo varios combos en un formualrio sin origen y todos ellos los relleno como dice gontorre

---

<div class="post-metadata">

**Author:** ![tempsmollet](https://avatars.discourse-cdn.com/v4/letter/t/977dab/32.png) [@tempsmollet](https://foros.velneo.com/u/tempsmollet)\
**Post date:** [23 Septiembre, 2015 21:03 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/10 "2015-09-23T21:03:03Z")

</div>

Hola,

He probado las dos opciones, tanto la de [N1] sergi.esteve como de [N3] gontorre y la verdad, las dos hacen lo mismo pero con un montaje totalmente diferente, así que cada uno seleccione la que más se adapte a sus necesidades.

Saludos,

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [23 Septiembre, 2015 22:38 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/11 "2015-09-23T22:38:51Z")

</div>

Hola.

Una aclaración.  
Inicialmente lo que solicitaba “eliseo” era cómo rellenar un Combo con una lista arbitraria de Items y esto solo es posible con el control Combobox del formulario.  
Para rellenar desde un lista de registros se puede usar tanto el control Combobox como el Objeto ComboView.

Hay una tercera opción que es el control **Data Catcher Edit**. Asociando directamente la tabla a la propiedad “Vista de datos” tenemos un combobox de forma sencilla. Además podemos Subindexar dinámicamente la Vista de datos mediante el subControl Subindexador.

Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![tempsmollet](https://avatars.discourse-cdn.com/v4/letter/t/977dab/32.png) [@tempsmollet](https://foros.velneo.com/u/tempsmollet)\
**Post date:** [24 Septiembre, 2015 06:53 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/12 "2015-09-24T06:53:22Z")

</div>

Hola Paco,

Acabo de leerme la ayuda y realizar una practica sobre el control que acabas de proponer como otra opción más, y funciona de las mil maravillas, es muy fácil de configurar y además puedes dar unos resultadas finales muy sorprendentes.

Interesante también que se pueda usar el subindexador para poder ordenador según nuestras necesidades y las posibilidades de mostrar el interfaz de varias formas.

- [Presentación del control Data Catcher Edit](http://velneo.es/edicion-de-datos-data-catcher-edit/)
- [Documentación del Data Catcher Edit](http://velneo.es/info_v7_717_es/velneo_vdevelop_v7/proyectos_objetos_y_editores/proyecto_de_aplicacion/formulario/editor_de_formularios/controles_de_edicion/data_catcher_edit/)

Gracias por esta información  
Saludos.

---

<div class="post-metadata">

**Author:** ![tic-software](https://avatars.discourse-cdn.com/v4/letter/t/c4cdca/32.png) [@tic-software](https://foros.velneo.com/u/tic-software)\
**Post date:** [24 Septiembre, 2015 07:04 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/13 "2015-09-24T07:04:54Z")

</div>

Ignoraba que se podía hacer un combo con DataCatcher Edit, para la gran mayoría de usos es mucho más que suficiente.

Gracias Paco.

Ramón.

En el caso de js que has puesto, es más eficiente crear un índice que devuelva sólo dos doctores activos, para no tener que recorrerlos todos y haciendo un if, cambiando la instrucción:

recDoctores.load( “ID” , res );

por

recDoctores.load( “ACTIVOS” , res );

y te ahorras comprobar doctor a doctor.

Pero vamos, si lo has arreglado con un DataCatcher fantástico, más sencillo.

---

<div class="post-metadata">

**Author:** ![tempsmollet](https://avatars.discourse-cdn.com/v4/letter/t/977dab/32.png) [@tempsmollet](https://foros.velneo.com/u/tempsmollet)\
**Post date:** [13 Octubre, 2015 14:21 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/14 "2015-10-13T14:21:07Z")

</div>

Hola Foro,

Siguiendo con el tema necesito saber si es posible añadir un registro en blanco al inicio del combobox.

Como ya os he informado anteriormente no tengo ni idea de JS, y pido si alguno de vosotros es tan amable de indicarme que código tengo de añadir para poder tener un registro en blanco a la lista.

**// Ejemplo original de [N1] sergi.esteve  
//Accedemos al root del formulario en curso  
form = theRoot.dataView();  
// Accedemos al control combo box. Se resuelve con el identificador del control  
combo = form.control(“COMBO\_BOX\_DOCTORES”);  
// Recorremos lista de los Doctores  
var recDoctores = new VRegisterList(theRoot);  
recDoctores.setTable(“4ka4h8x3.vcd/DOCTORES”);**

var res = [];  
recDoctores.load( “ID” , res );  
for( var i=0; i \< recDoctores.listSize(); i++ )

// Se filtra la selección por Doctores activo -\> “DOCTOR\_ACTIVO”  
{  
var Doctores = recDoctores.readAt( i );  
if(Doctores.fieldToBool(“DOCTOR\_ACTIVO”) && Doctores.isOK())  
combo.addItem(Doctores.fieldToString(“NAME”), Doctores.fieldToInt(“ID”) );  
}

Muchas gracias por vuestra ayuda.

Saludos,

---

<div class="post-metadata">

**Author:** ![tic-software](https://avatars.discourse-cdn.com/v4/letter/t/c4cdca/32.png) [@tic-software](https://foros.velneo.com/u/tic-software)\
**Post date:** [13 Octubre, 2015 14:37 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/15 "2015-10-13T14:37:38Z")

</div>

Hola.

Simplemente tienes que añadir un item más, por ejemplo con un espacio en blanco como nombre y ponerle el ID que quieras, por ejemplo el 0 para saber que no han seleccionado ningún elemento. No lo he probado, no sé si dará algún problema con el item 0, pruébalo y nos dices.

// Accedemos al control combo box. Se resuelve con el identificador del control  
combo = form.control(“COMBO\_BOX\_DOCTORES”);  
combo.addItem(" ", 0 );

…

---

<div class="post-metadata">

**Author:** ![tempsmollet](https://avatars.discourse-cdn.com/v4/letter/t/977dab/32.png) [@tempsmollet](https://foros.velneo.com/u/tempsmollet)\
**Post date:** [13 Octubre, 2015 15:10 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/16 "2015-10-13T15:10:05Z")

</div>

Hola @Infortic,

Todo perfecto, gracias de verdad, que pura envidia que os tengo por saber JS, la verdad resuelve muchos huecos que Velneo no tiene.

Saludos.

---

<div class="post-metadata">

**Author:** ![ayudavelneo](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/ayudavelneo/32/4286_2.png) [@ayudavelneo](https://foros.velneo.com/u/ayudavelneo)\
**Post date:** [13 Octubre, 2015 16:59 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/17 "2015-10-13T16:59:35Z")

</div>

Hola:

Acordaros que sin usar vJavaScript, tenemos la posibilidad de utilizar en lugar de un formulario sin origen, un formulario enlazado a una tabla en memoria en el que podemos añadir todos los campos por lo que vamos a querer buscar… incluidas tablas estáticas.

Un saludo

---

<div class="post-metadata">

**Author:** ![tempsmollet](https://avatars.discourse-cdn.com/v4/letter/t/977dab/32.png) [@tempsmollet](https://foros.velneo.com/u/tempsmollet)\
**Post date:** [13 Octubre, 2015 18:02 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/18 "2015-10-13T18:02:40Z")

</div>

Doctor Vila,

Si no le sabe mal, nos puede indicar donde podemos encontrar alguna información a lo que indicas en la anterior entrada.

Saludos

PD: Lo de Doctor, es puro respeto al maestro.

---

<div class="post-metadata">

**Author:** ![ayudavelneo](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/ayudavelneo/32/4286_2.png) [@ayudavelneo](https://foros.velneo.com/u/ayudavelneo)\
**Post date:** [14 Octubre, 2015 07:21 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/19 "2015-10-14T07:21:11Z")

</div>

Hola Ramón:

En **[este post](http://ayudavelneo.com/panel-de-busquedas-avanzadas-en-formulario-principal/)** del blog viene explicado paso a paso lo que os comentaba.

La búsqueda del final tenéis que sustituirla por un proceso que lanzaréis en tercer plano desde el que llamaréis a esta búsqueda (el post es bastante antiguo)

Un saludo

pd. buffff pues no me queda para ser doctor… no soy ni enfermero

---

<div class="post-metadata">

**Author:** ![ymoracon](https://avatars.discourse-cdn.com/v4/letter/y/b2d939/32.png) [@ymoracon](https://foros.velneo.com/u/ymoracon)\
**Post date:** [11 Mayo, 2018 09:41 UTC](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219/20 "2018-05-11T09:41:26Z")

</div>

> [@pacosatu](#):
>
> el control **Data Catcher Edit**

Buenos días.  
Revivo este tema porque tengo una inquietud al respecto.  
He implementado el control Data Catcher Edit para seleccionar los registro de una tabla en un formulario sin origen y me funciona bien, pero no quiero mostrar todos los registros de la tabla sino solo los que cumplan la condición de ESTADO=“ACTIVO”.  
En las propiedades del control Data Catcher Edit no encuentro como filtrar los datos porque con el subindexador me da la opción de hacerlo solo sobre el indice NAME y la tabla tiene más indices.  
Desde ya gracias a quien pueda ayudar.

YIMY MORA ACONCHA

[Página siguiente](https://foros.velneo.com/t/combobox-en-formulario-sin-origen/8219.md?page=2)
