Ejemplos Javascript (Combobox y separador de formularios))

Buenas,

podrías activar siempre la primera pestaña antes de eliminar, o hacerlo más coqueto y activar justo la anterior, index -1

Una pregunta adicional,

He visto la utilización de Controls () en este hilo. Mi pregunta es, ¿Hay forma de recoorrer todos los controles de un formulario?

Saludos

 

Muchas Gracias

Buenas a todos, estaba necesitando un ejemplo para utilizar esto (un combobox alimentado con javascript). Pero veo que la página de fillipe no está ya disponible, alguno posee todavía este vin o me podría mostrar un ejemplo?

Saludos, muchas gracias.

Hola Humber.

Un ejemplo sencillo:

  • Necesito un Combo con los meses del Año para un formulario de Búsquedas
  • La variable local que recoge el mes seleccionado es NMES
  • El Combo, a pesar de tener NMES vinculada a la propiedad Contenido, no actualiza dicha propiedad con el mes seleccionado. Tendré que habilitar entonces un Evento en el Combo (Item: Cambio de seleccionado) para refrescar el valor de NMES.

Necesitamos entonces 3 manejadores de Evento: uno para rellenar el Combo, otro para fijar el mes en el combo y un tercero para leer el mes seleccionado en el Combo.

RELLENAR_COMBO


// Formulario y control Combo
var oForm = theRoot.dataView();
var oCombo = oForm.control(“CBO_MES”);

// Añadimos los ítems al combo
// El Combo tiene un Nombre del Item y un valor del Item.
oCombo.addItem("", 0);
oCombo.addItem(“enero”, 1);
oCombo.addItem(“febrero”, 2);
oCombo.addItem(“marzo”, 3);
oCombo.addItem(“abril”, 4);
oCombo.addItem(“mayo”, 5);
oCombo.addItem(“junio”, 6);
oCombo.addItem(“julio”, 7);
oCombo.addItem(“agosto”, 8);
oCombo.addItem(“septiembre”, 9);
oCombo.addItem(“octubre”, 10);
oCombo.addItem(“noviembre”, 11);
oCombo.addItem(“diciembre”, 12);

FIJAR_COMBO


// Formulario y control Combo
var oForm = theRoot.dataView();
var oCombo = oForm.control(“CBO_MES”);

// Obtenemos el mes de la variable local del formulario
var sel = theRoot.varToInt(“NMES”)
// Fijamos el elemento seleccionado
oCombo.setCurrentIndex(sel)

LEER_COMBO


// Se ejecuta con Evento Item: cammbio de seleccioando
// Formulario y control Combo
var oForm = theRoot.dataView();
var oCombo = oForm.control(“CBO_MES”);

// Obtenemos la posición del ítem seleccionado en el combo
var sel = oCombo.currentIndex;
// Extraemos el valor numérico del ítem seleccionado
var codsel = oCombo.itemData(sel);
//Asignamos el dato leído a la variable local del formulario
theRoot.setVar(“NMES”, codsel);

Saludos
Paco Satué

1 me gusta

Muchas Gracias.
saludos,
Cesar Fidalgo.

Buenos dias:

El planteamiento de Paco es, como siempre, válido pero ¡manda carayo con Life is Soft…! ¡Montar eso en cada Formulario en donde necesite seleccionar un mes!

Yo lo resolvería así:

1.El formulario sería de una Tabla en memoria que uso como comodín
2.La Tabla del Formulario tiene un puntero a la estática de Meses
3.La estática de meses tiene como primer elemento uno sin descripción para simular el caso vacío y que no muestre por defecto lo que no esté grabado
4.La selección se hace con un combo que muestra la estática de meses

El resto es trivial…

En definitiva, todo esto se resuelve huyendo de los Formularios sin origen como de la peste. Es posible que tenga alguno en mis aplicaciones, pero casi lo dudo…

Saludos. Ramiro

Muchas gracias @seh y @Ramiropa por sus respuestas. Pensé que sería menos tedioso hacerlo con javascript.

Me gustó mas la solución de @Ramiropa, la verdad no lo había pensado, y es una solución bastante sencilla.

Gracias a los dos.

Saludos.

Hola Ramiro.

¡Hombre! todos tenemos claro que la solución JavaScript no es lo ideal y yo he criticado desde el principio lo mal resuelto que está este tema en Velneo y lo más grave de todo es que es una bomba de relojeria que tarde o temprano nos explotará en las manos. Aparte de mis visiones apocalípticas, el tema del hilo era exclusivamente referido a ejemplos Javascript para rellenar el Combo sin entrar si es más óptimo hacerlo con código Velneo nativo.

Quizás el ejemplo no ha sido muy acertado porque he elegido una Lista estática de información, en este caso los meses del año.

Pero podemos plantear otro problema donde metemos el elemento dinámico.

  • Tengo una tabla de histórico donde un campo tiene como valor el AÑO.
  • Quiero acotar las búsqueda por el AÑO y debo tener en el Combo de selección todos los valores posibles que toma el campo AÑO.
  • El proceso RELLENAR_COMBO ya no es estático sino que viene alimentado por otro proceso PRO_LISTA_AÑOS

RELLENAR_COMBO


importClass("VProcess");
var oForm = theRoot.dataView();
var oListaAnos = new VRegisterList(theRoot);
var oRegistro = new VRegister(theRoot);
var oProceso = new VProcess(theRoot);
var nAno = 0, nNumAnos = 0
var oCombo = oForm.control("CBO_AÑO");
oCombo.addItem("", 0);
// Proceso que devuelve la Lista de Años en la tabla Histórico
oProceso.setProcess("0PS_Ejercicios_app/PRO_LISTA_AÑOS")
// Ejecuta la selección y la devuelve en la Lista oListaAnos 
if (oProceso.exec(VProcess.RunInServer)) {
	oListaAnos = oProceso.result()
}
if (oListaAnos) {
  // Nº de elementos del Combo
  nNumAnos = oListaAnos.size()
  for ( i = 0 ; i < nNumAnos ; i++) {
    oRegistro = oListaAnos.readAt(i)
    // El combo tiene un Nombre del Item y un valor del Item.
    // En este caso coinciden
    oCombo.addItem(oRegistro.fieldToInt("AÑO"), oRegistro.fieldToInt("AÑO"));
  }
}

PROCESO PRO_LISTA_AÑOS


Cargar lista ( HISTORICO@0PS_Ejercicios_dat, AÑO, , , , )
  Multipartir lista ( AÑO )
   Rem ( Aquí tenemos una Lista con todos los Registros de un Año determinado )
   Seleccionar ficha por posición ( 1 )
   Leer ficha seleccionada
     Añadir ficha a la salida

En este caso ya no tenemos posibilidad de tabla estática ni tampoco el campo Año es un puntero Maestro.

En cuanto a lo de los formularios Sin Origen, pues habrá para todos los gustos. Cuando uno empieza con Velneo y ha sido mi caso, siempre asignaba Origen al formulario. Ha sido en los Seminarios de Velneo donde he visto que en muchos casos se prescinde del Origen para poder resolver diversas situaciones.

Saludos
Paco Satué

Hola Paco:

Gracias por tu última aportación… (por cierto que no era mi ánimo corregir tu mensaje anterior sino simplemente ofrecer una alternativa que me parecía más sencilla)

Respecto a tu último párrafo, me surge una duda…
¿Qué situaciones ven su solución facilitada porque el formulario no tenga origen?

Saludos. Ramiro

Hola Ramiro.

Que haya debate en el foro siempre es bueno y hará más divertido leer el foro.

Los formularios pueden tener Origen o no tenerlo, todo dependerá de lo que vaya a hacer. Habrá formularios sin Origen en diversos casos:

  • Los formularios que no accedan a datos
  • Formularios que gestionan Vistas de datos (origen Lista)
  • Formularios de Selección, Localización y Búsqueda
  • Formulario principal del Autoexec
  • Formularios de importación/exportación de datos

Saludos
Paco Satué