# Pacoideas - Volver al formulario padre desde el evento Cerrar

**URL:** <https://foros.velneo.com/t/pacoideas-volver-al-formulario-padre-desde-el-evento-cerrar/10999>\
**Category:** Compartir código fuente y ejemplos\
**Created:** [3 Abril, 2022 21:25 UTC](https://foros.velneo.com/t/pacoideas-volver-al-formulario-padre-desde-el-evento-cerrar/10999 "2022-04-03T21:25:16Z")\
**Posts on this page:** 6\
**Page:** 1

<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:** [3 Abril, 2022 21:25 UTC](https://foros.velneo.com/t/pacoideas-volver-al-formulario-padre-desde-el-evento-cerrar/10999/1 "2022-04-03T21:25:16Z")

</div>

Hola.

![imagen](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/6/641b844740ff2f8bccbd4ba06d0590b8c1df84ad.png)

Desde la versión 29 disponemos del [Estilo Vista única](https://doc.velneo.com/velneo-vdevelop/proyectos-objetos-y-editores/proyecto-de-aplicacion/formulario#estilos) en el formulario que nos permite abrir solo una instancia del mismo. De forma nativa se comprueba si ya existe una pestaña abierta con el formulario sin origen o con la misma ficha que se va a editar.

Ahora se nos plantea el problema de regresar a la **pestaña** desde la que un determinado formulario ha sido llamado. Es el caso del formulario **principal** con la lista de maestros, desde el que ejecutamos el formulario de edición en modo Vista de los registros de la lista.

La siguiente imagen es una captura de la aplicación **vERP**. Queremos conseguir que el usuario regrese a la pestaña de **Artículos** cuando se cierra el formulario de edición del Artículo.

![image](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/9/9a87fa737ec93ea10dafb308c46ae31d265a290d.png)

La **idea** que os planteo es guardar en el formulario **hijo** una **referencia** a la pestaña con el formulario **padre**. Esta referencia nos servirá para activar la pestaña padre desde el evento cerrar del formulario hijo.

![image](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/1/15519601f9eaa403a8bdc4f3288aa343055a6480.png)

El formulario padre se identifica con un Id único **\_CID\_FORMULARIO** para localizarlo en la lista de Vistas abiertas.

```auto
Rem (Evento PRE_INI del formulario padre)
Rem (Identificamos el formulario con un ID único)
Set ( _CID_FORMULARIO, "FRM_" + timeToString(currentTime(), "HHmmsszzz") )

```

En el evento **PRE\_INI** del formulario hijo guardamos en **\_CID\_VISTA\_ORIGEN** el ID del formulario padre.

```auto
Rem (Evento PRE_INI del formulario hijo)
Rem ( Guarda el identificativo de la Vista actual para volver a ella cuando cerramos esta Vista )
Set ( _CID_FORMULARIO, "FRM_" + timeToString(currentTime(), "HHmmsszzz") )
Set ( _CID_VISTA_ORIGEN, fun:FUN_VISTA_GUARDAR@proyecto.app() )

```

La función **FUN\_VISTA\_GUARDAR** devuelve el ID del formulario padre **\_CID\_FORMULARIO** y lo guarda en la variable **\_CID\_VISTA\_ORIGEN** del formulario hijo.

```auto
// Función FUN_VISTA_GUARDAR
var oVistaActiva = theMainWindow.currentView()
var cIDActiva = ''
if (oVistaActiva) { 
	cIDActiva = oVistaActiva.root().varToString("_CID_FORMULARIO")
}
theRoot.setVar("CID_VISTA_ACTIVA",cIDActiva)

```

Ahora solo nos falta capturar el cierre del formulario desde el evento [PRE-Vista cerrada](https://doc.velneo.com/velneo-vdevelop/proyectos-objetos-y-editores/proyecto-de-aplicacion/sub-objetos-de-vistas-de-datos/conexion-de-evento#pre-vista-cerrada) del Marco **AUTOEXEC**.

```auto
// Se dispara en el Evento PRE-Vista cerrada del Marco AUTOEXEC
// Activa la Vista, si existe, con identificativo _CID_VISTA_ORIGEN
// El formulario que se está cerrando es cIDFormulario
var oVista = theMainWindow.currentView()
// Las Vistas genéricas (como el Visor HTML) no son Vistas de datos
if (oVista.type() > 0) {
	var cIDFormulario = oVista.root().varToString("_CID_FORMULARIO")
	// El formulario que queremos activar es cIDActivar
	var cIDActivar = theMainWindow.currentView().root().varToString("_CID_VISTA_ORIGEN")
	var numVistas = theMainWindow.viewsCount();
	if (cIDActivar) {
		theMainWindow.showMessageStatusBar("Cerrando - " + cIDFormulario,1000)
		for (numVista = 0; numVista < numVistas; numVista++){
			oVista = theMainWindow.getViewAt(numVista);
			// Comprobamos si el formulario es el que queremos activar
			// En la variable local _CID_FORMULARIO se guarda el ID del formulario
			if (oVista.root().varToString("_CID_FORMULARIO") == cIDActivar){
				theMainWindow.setCurrentView(oVista)
				break
			};
		};
	}
}

```

Usamos en este caso un poco de código javascript porque necesitamos el objeto **theMainWindow** para recorrer la lista de [Vistas activas](https://doc.velneo.com/velneo-vdevelop/scripts/lenguajes/javascript/clases/vmainwindow#de-widget). Espero os sea de utilidad.

Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![mat.cas](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/mat.cas/32/5720_2.png) [@mat.cas](https://foros.velneo.com/u/mat.cas)\
**Post date:** [4 Abril, 2022 12:19 UTC](https://foros.velneo.com/t/pacoideas-volver-al-formulario-padre-desde-el-evento-cerrar/10999/2 "2022-04-04T12:19:09Z")

</div>

Se agradecen los aportes Paco.  
¿Hay alguna web o blog donde estes recopilando estas ideas aparte de este foro?

Un Saludo

---

<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:** [4 Abril, 2022 16:05 UTC](https://foros.velneo.com/t/pacoideas-volver-al-formulario-padre-desde-el-evento-cerrar/10999/3 "2022-04-04T16:05:19Z")

</div>

Hola matcas.

A los suscriptores de [Ejercicios con Velneo](https://pacosatu.es/ejercicios-con-velneo/) les he enviado la Extensión _ **"Cosas de Paco Satué"** _ para acceder desde vDevelop al listado completo de mis Aplicaciones, Artículos y aportaciones interesantes al Foro.

Para cualquier duda sobre la Extensión poneros en contacto conmigo a través del [correo electrónico](mailto:ejerciciosvelneo@pacosatu.es) de los Ejercicios con Velneo.

Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![carlosan](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/carlosan/32/5706_2.png) [@carlosan](https://foros.velneo.com/u/carlosan)\
**Post date:** [4 Abril, 2022 18:34 UTC](https://foros.velneo.com/t/pacoideas-volver-al-formulario-padre-desde-el-evento-cerrar/10999/4 "2022-04-04T18:34:08Z")

</div>

Gracias por construir esta idea tan útil. Me la apunto por si alguien me lo pide con fervor.  
Sería ideal que el sistema hiciera este tipo de cosas al estilo “facilitar la vida” tanto a la usuaria como a la programadora porque me parece básico para la mayoría de casos.  
Opcional: activar en sistema la casilla “Volver al formulario padre”, funcionante en caso de existir.

---

<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:** [4 Abril, 2022 19:46 UTC](https://foros.velneo.com/t/pacoideas-volver-al-formulario-padre-desde-el-evento-cerrar/10999/5 "2022-04-04T19:46:40Z")

</div>

Hola Carlosan.

Que hubiera un Estilo de formulario “ **Volver al formulario padre** ”, sería desde luego una funcionalidad tan útil como la de _Vista única_.

No soy muy partidario de que Velneo sea tan asistido porque perdemos el control de muchas funcionalidades nativas, pero este tipo de comportamiento “opcional” usando el Estilo de formulario, sí que es realmente LifeIsSoft.

Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![estisoft](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/estisoft/32/5714_2.png) [@estisoft](https://foros.velneo.com/u/estisoft)\
**Post date:** [22 Septiembre, 2023 16:17 UTC](https://foros.velneo.com/t/pacoideas-volver-al-formulario-padre-desde-el-evento-cerrar/10999/6 "2023-09-22T16:17:14Z")

</div>

Gracias por el aporte funciona perfecto. Me sirvió para solucionar otra necesidad que tenia.  
Como uso esta función en los formularios getCurrentObjectId() para otras funcionalidades que uso la use en lugar de  
Set ( _CID\_FORMULARIO, "FRM_" + timeToString(currentTime(), “HHmmsszzz”) ).  
me quedo así  
Set ( OBJ\_ID\_REF, getCurrentObjectId() ) aprovechando el estilo de vista única.
