# Cerrar Formulario

**URL:** <https://foros.velneo.com/t/cerrar-formulario/8155>\
**Category:** Velneo\
**Created:** [30 Junio, 2015 10:51 UTC](https://foros.velneo.com/t/cerrar-formulario/8155 "2015-06-30T10:51:14Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![vlinares](https://avatars.discourse-cdn.com/v4/letter/v/57b2e6/32.png) [@vlinares](https://foros.velneo.com/u/vlinares)\
**Post date:** [30 Junio, 2015 10:51 UTC](https://foros.velneo.com/t/cerrar-formulario/8155/1 "2015-06-30T10:51:14Z")

</div>

Buenos días…

Estoy intentado crear un proceso en js que al intentar abrir un formulario desde una rejilla, si existe otro abierto cierre el anterior…

¿Como puedo programar en js que si se localiza un objeto lo cierre?.

algo así como **formulario.close**

Estaba intentado con esta secuencia de comandos, pero todavía no controlo el js,

/////////////////////////////////////////////////////////////////  
// Busca un formulario si esta activo y lo cierra antes de abrir el nuevo  
//  
//  
//Variables locales:  
// -OBJ\_IDREF: IDRef del Objeto.  
// -OBJ\_TIPO: Tipo del Objeto

var nNunVistas = theMainWindow.viewsCount();  
var vista = null;  
var szFormularioIdRef ="";  
var bExisteTab = false;

// Se recorren todas las vistas centrales en busca del formulario  
for ( nIndice 0 =; nIndice \< nNumVistas; nIndice++)  
{  
vista = theMainWindow.getViewAt ( nIndice );  
if ( vista )  
{  
formulario = vista.centralWidget().objectInfo();  
if ( formulario.type() == theRoot.varToString( “OBJ\_TIPO”) )  
{  
if ( formulario.idRef() == theRoot.varToString( “OBJ\_IDREF” ) )  
{  
bExisteTab = true;  
theRoot.close (formulario.idRef);  
break;  
}  
}  
}  
}  
// Se devuelve el voleano que indica que exitia la pestaña y se ha cerrado  
theRoot.setVar( “ACTIVADO”, bExisteTab);

Gracias por vuestra ayuda.

Saludos  
Vicente

---

<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:** [1 Julio, 2015 17:43 UTC](https://foros.velneo.com/t/cerrar-formulario/8155/2 "2015-07-01T17:43:17Z")

</div>

Hola Vicente.

¿De dónde te has sacado la función theRoot.close(formulario.idRef) ?

Con [formulario.closeForm()](http://velneo.es/info_v7_717_es/velneo_vdevelop_v7/scripts/clases/core/widget/vabstractdataview/vformdataview/#closeForm) es suficiente.

Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![vlinares](https://avatars.discourse-cdn.com/v4/letter/v/57b2e6/32.png) [@vlinares](https://foros.velneo.com/u/vlinares)\
**Post date:** [2 Julio, 2015 07:46 UTC](https://foros.velneo.com/t/cerrar-formulario/8155/3 "2015-07-02T07:46:04Z")

</div>

Buenos días.  
Te explico, como no tengo ni idea de js, voy mirando el manual y probando cosas… osea “dando palos de ciego”.  
La primera prueba que hice fue escribir formulario. pero esta clase no me daba la función que tu me indicas. De hecho lo acabo de probar y no funciona.  
Estuve haciendo pruebas y miran y leyendo… y al final lo que funciona es:

```
          <strong>theMainWindow.closeViewAt(nIndice)</strong>

```

Paso el manejador evento que disparo (en imagen) la función CierraVentana.js que me funciona.

Estoy terminado de pulirlo, quien lo quiera utilizar, que lo considere como una “beta”.

/////////////////////////////////////////////////////////////////  
// Busca un formulario si esta activo y lo cierra antes de abrir el nuevo  
//  
//  
//Variables locales:  
// -OBJ\_IDREF: IDRef del Objeto.  
// -OBJ\_TIPO: Tipo del Objeto

var nNumVistas = theMainWindow.viewsCount();  
var vista = null;  
var szFormularioIdRef = “”;  
var bExisteTab = false;

// Se recorren todas las vistas centrales en busca del formulario  
for ( nIndice = 0; nIndice \< nNumVistas; nIndice++ )  
{  
vista = theMainWindow.getViewAt( nIndice );  
if ( vista )  
{  
formulario = vista.centralWidget().objectInfo();  
if ( formulario.type() == theRoot.varToString( “OBJ\_TIPO” ) )  
{  
if ( formulario.idRef() == theRoot.varToString( “OBJ\_IDREF” ) )  
{

```
            bExisteTab = true;
			theMainWindow.closeViewAt(nIndice);
			//formulario.closeForm;
            break;
        }   
    }
}

```

}

// Se devuelve el booleano que indica si existía la pestaña y se ha activado o no  
theRoot.setVar( “ACTIVADO”, bExisteTab);

Muchas gracias por todo.

Saludos  
Vicente

P.S.- Si alguien es tan amable de organizar un cursito de js que me avise.

![image](https://cdck-file-uploads-canada1.s3.dualstack.ca-central-1.amazonaws.com/flex035/uploads/velneo/original/2X/d/dbaecc12c8497a666802de8895a7df484563a780.jpg)

---

<div class="post-metadata">

**Author:** ![vlinares](https://avatars.discourse-cdn.com/v4/letter/v/57b2e6/32.png) [@vlinares](https://foros.velneo.com/u/vlinares)\
**Post date:** [2 Julio, 2015 10:22 UTC](https://foros.velneo.com/t/cerrar-formulario/8155/4 "2015-07-02T10:22:20Z")

</div>

Buenos días de nuevo…

Me auto corrijo…

En el Manejador de Eventos, la última linea debe ser:

```
   <strong>Interfaz: Ejecutar acción (EXP_MANT)</strong>

```

En lugar de:  
If (!ACTIVADA…)

Saludos

Vicente

---

<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:** [2 Julio, 2015 17:11 UTC](https://foros.velneo.com/t/cerrar-formulario/8155/5 "2015-07-02T17:11:36Z")

</div>

Hola Vicente.

Disculpa, había pensado que la variable formulario era un objeto VFormDataView y en realidad es una Vista VMdiView.  
En este caso es correcto usar theMainWindow.closeViewAt(nIndice)

Saludos  
Paco Satué
