# Pregunta sobre objetos js

**URL:** <https://foros.velneo.com/t/pregunta-sobre-objetos-js/7461>\
**Category:** Velneo\
**Created:** [16 Octubre, 2014 08:42 UTC](https://foros.velneo.com/t/pregunta-sobre-objetos-js/7461 "2014-10-16T08:42:11Z")\
**Posts on this page:** 11\
**Page:** 1

<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:** [16 Octubre, 2014 08:42 UTC](https://foros.velneo.com/t/pregunta-sobre-objetos-js/7461/1 "2014-10-16T08:42:11Z")

</div>

Hola a todos.

A ver si alguien que haya peleado con los objetos de interfaz puede ayudarme.

Tengo un formulario con una vista de datos de tipo rejilla con la quiero trabajar en js.

Intento obtener el vAbstractListDataView asociado a dicha rejilla.

En un manejador de evento js intento accederla, pero por desconocimiento del modelo de objetos no lo consigo.

Estoy haciendo:

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

// Accedemos al listview. Se resuelve con el identificador del control  
control\_lista = form.control(“LST”);

// Accedemos a la lista asociada al listview  
lista\_registros = control\_lista.root().content();

No funciona, el caso es que no se cómo obtener el dataview asociado al control LST dentro del formulario.

¿Alguien tiene idea?

Gracias.

---

<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:** [16 Octubre, 2014 09:02 UTC](https://foros.velneo.com/t/pregunta-sobre-objetos-js/7461/2 "2014-10-16T09:02:38Z")

</div>

Hola info.

El objeto control\_lista ya es lo que buscas y puedes acceder a toda la funcionalidad de la [Vista de Datos](http://velneo.es/info_v7_716_es/velneo_vdevelop_v7/scripts/clases/core/widget/vabstractdataview/vabstractlistdataview/) y de la [propia Rejilla](http://velneo.es/info_v7_716_es/velneo_vdevelop_v7/scripts/clases/core/widget/vabstractdataview/vabstractlistdataview/vgridlistdataview/).

Saludos  
Paco Satué

---

<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:** [16 Octubre, 2014 09:47 UTC](https://foros.velneo.com/t/pregunta-sobre-objetos-js/7461/3 "2014-10-16T09:47:31Z")

</div>

Hola Paco.

Eso es lo que pensaba… pero no consigo acceder al register list de la rejilla, la última línea:

lista\_registros = control\_lista.root().content();

me da error diciendo que root no existe, cuando es un método de VAbstractDataView, en algo me estoy liando.

Mi idea es fácil, al insertar una línea en la rejilla, seleccionar el último registro.

Desde control\_lista sí tengo acceso a setCurrentSelect pero no consigo obtener la lista para sacar el índice a seleccionar.

De momento lo tengo sacado por un manejador v7 que lo guarda en una variable local, y le hago el setCurrentSelect pero me gustaría saber en qué me estoy equivocando y hacerlo todo en js.

---

<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:** [16 Octubre, 2014 10:01 UTC](https://foros.velneo.com/t/pregunta-sobre-objetos-js/7461/4 "2014-10-16T10:01:22Z")

</div>

Hola Info.

Céntrate en el objeto control\_lista (clase VAbstractListDataView) y olvídate del root() que seguramente existe cuando la Vista de datos es un subformulario.

Con el objeto control\_lista ya tienes total acceso a la Lista de registros de la Rejilla  
Tienes append(VRegister) para añadir una Ficha  
Tienes getList(VRegisterList) para obtener la Lista completa  
Tienes setCurrentSelect(VRegister) para seleccionar una Ficha de la rejilla

Si no te sale, envía el código que intentas hacer y le echamos un vistazo.

Saludos  
Paco Satué

---

<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:** [16 Octubre, 2014 10:04 UTC](https://foros.velneo.com/t/pregunta-sobre-objetos-js/7461/5 "2014-10-16T10:04:21Z")

</div>

Bueno, el usar una variable local en el formulario tampoco me funciona.

Seteo la variable desde v7, llamo al manejador de objeto javascript y la sentencia:

var Indice = theRoot.varToInt(‘IR\_ULTIMO\_REGISTRO\_LISTA’);

Me devuelve Indice = 0

ni que decir que la variable local del formulario IR\_ULTIMO\_REGISTRO\_LISTA sí tiene valor (comprobado por mensaje)… otra vez no se que pasa

esto es un dolor de muelas, se necesita el debugger no se pueden perder horas con estas cosas…

Gracias Paco probaré el getList, no lo había visto! Tiene pinta de ser justo lo que necesito

---

<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:** [16 Octubre, 2014 10:18 UTC](https://foros.velneo.com/t/pregunta-sobre-objetos-js/7461/6 "2014-10-16T10:18:10Z")

</div>

Bueno, con las últimas indicaciones ya está.

Pongo el código para quien le interese.

Simplemente se posiciona en el último registro de una rejilla dentro de un formulario, en mi caso en las facturas cuando vas introduciendo líneas, que se vaya visualizando la última introducida en lugar de quedarse al principio de la rejilla:

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

// Accedemos al listview. Se resuelve con el identificador del control  
var control\_lista = form.control(“LST”);

// Accedemos a la lista asociada al listview  
var lista = new VRegisterList(theRoot);  
lista.setTable(control\_lista.objectInfo().inputTable().idRef());  
control\_lista.getList(lista);

// Obtenemos Indice a seleccionar  
var Indice = lista.size()-1;

// Seteamos el último registro de la lista  
control\_lista.setCurrentSelect( Indice );

Si a alguien se le ocurre una forma más sencilla se agradece.

Gracias por tu ayuda Paco

---

<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:** [16 Octubre, 2014 11:10 UTC](https://foros.velneo.com/t/pregunta-sobre-objetos-js/7461/7 "2014-10-16T11:10:50Z")

</div>

Si lo que querías era eso, creo que lo tienes mucho más fácil así.

```auto

Interfaz: Procesar("LST"), Todas
Seleccionar por posición: sysListSize

```

Prueba y dices que si te vale, no lo he probado pero creo que te funcionará sin problemas, tendrás que llamarlo siempre después de introducir una línea.

---

<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:** [16 Octubre, 2014 11:28 UTC](https://foros.velneo.com/t/pregunta-sobre-objetos-js/7461/8 "2014-10-16T11:28:50Z")

</div>

Hola info.

El código JS es correcto, pero seleccionar un registro por posición en una Rejilla me parece un poco arriesgado porque no garantizas 100% que seleccionas el ID correcto. Imagina que por cualquier causa el registro recién añadido no es el último de la Rejilla.

Yo obtendría una referencia al VRegister que acabas de añadir y usaría setCurrentSelect(VRegister), de esta forma nunca te equivocas.

Saludos  
Paco Satué

---

<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:** [16 Octubre, 2014 13:40 UTC](https://foros.velneo.com/t/pregunta-sobre-objetos-js/7461/9 "2014-10-16T13:40:03Z")

</div>

Gracias wikan, no había caido en lo de Seleccionar por posición de V7

Tienes razón Paco, en este caso en concreto no fallaría por la forma en la que se carga la rejilla, pero queda mucho más seguro referenciando el vRegister, voy a probarlo como dices también, ya que me parece más elegante.

---

<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:** [16 Octubre, 2014 21:59 UTC](https://foros.velneo.com/t/pregunta-sobre-objetos-js/7461/10 "2014-10-16T21:59:59Z")

</div>

Hola info.

Si no quieres usar JS puedes recorrer la lista de la Rejilla y seleccionar la que tenga el ID recien añadido.  
Guarda el nuevo ID en una variable local NID\_NUEVO y ejecuta un manejador con lo siguiente:

``

```

Interfaz: Procesar (GRD_LISTA , Todas )
Recorrer lista sólo lectura
Set ( NFILA, NFILA + 1 )
If ( #ID = NID_NUEVO )
Set ( NSELECCIONADA, NFILA )
If ( NSELECCIONADA > 0 )
Seleccionar ficha por posición ( NSELECCIONADA )

```

En rejillas con pocas fichas esto es muy rápido.

Saludos  
Paco Satué

---

<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:** [17 Octubre, 2014 09:09 UTC](https://foros.velneo.com/t/pregunta-sobre-objetos-js/7461/11 "2014-10-17T09:09:36Z")

</div>

Es cierto, lo probaré a ver si incide en el rendimiento, el tema de recorrer la lista ya sabes que irá penalizando conforme crezca el documento, pero como dices, probablemente no sea perceptible con rejillas de menos de 1000 registros.

Gracias
