Limpiar contenio Formulario con "Combobox"

Tengo un formulario en el que realizao busquedas con varios criterios. Esa busqueda se muestra en una rejilla integrada en el propio formulario.
Este formulario tiene varios combobox para seleccionar criterios.
Hay tambien un botón que lanza un evento con el que limpio los controles y la rejilla, para que el usuario pueda realizar una nueva busqueda.
Los controles que muestra el formulario estan enlazados, unos a un campo de la tabla y otros a variables locales y los combobox a tablas maestras.
Los que apuntan contra variables locales los puedo limpiar sin problemas simplemente igualando a cero esa variable en el evento, y la rejilla la limpio con el comando procesar y cortar lista.
Pero los combobox y los controles enlazados a campos de la tabla no encuentro forma de dejarlos vacios.
No me vale “Aceptar sin cerrar” ni nada de eso ya que no es un formulario de alta ni es modal.
Vengo del mundo .NET y la verdad me estoy volviendo loco por algo que considero tendría que ser sencillisimo, pero no doy con la manrea de hacerlo.
A ver si me podeis echar una mano.
Muchas gracias.

Buenas tardes:

Los combos tienen la mala costumbre de presentar por defecto la primera opción sin que se pueda distinguir visualmente si el valor está grabado o no…

Si los alimentas de tablas estáticas, crea un nuevo elemento en cada estática (yo suelo usar la clave “" y sin texto. Para “anular” su presentación en el formulario, rellena el campo del combo con el valor "” y aparentemente estará vacío. Si apuntan a tablas normales, pues algo parecido.

Después haz que tu lógica no tenga en cuenta el valor “_” (o el que decidas usar en cada caso)

Saludos. Ramiro

Gracias por tu ayuda Ramiro, pero no soy capaz de que funcione como queremos.
Sinceramente no enteindo como algo tan tan sencillo se puede complicar tanto… estoy seguro que en parte es culpa del desconocimiento de la herramienta, pero tampoco encontramos ningún tipo de información por ningún lado.
¿No hay forma de que por medio de eventos o lo que sea, cuando pulse el botón de limpiar campos, el formulario se reinicie y se quede como cuando lo abro?

Bueno lo diho gracias por tu ayuda, pero nos estamos desilusionando con la herramienta.

Se me ocurre que podrías utilizar en vez de combovox controles de edición enlazados a tablas maestras, con el boton arriba abajo, agregas a la propiedad del control “Vista de datos de lista”, una rejilla que te mostraría todas las opciones de la tabla maestra y también a la propiedad tipo de menú de boton: botón Izquierda, al que le puedes asignar un menú de botón para un localizador de esas opciones, altas y edición de las mismas, así esta en Vbase en los formularios viejos, o en viejas versiones,

De esta forma puedes siempre limpiar el contenido de los controles con eventos ya que cuando se abre el formulario aparecen vacios, y si quieres sub indexarlos también puedes,.

Prueba un comboview, que lo cargas por proceso y eliges ficha

Prueba con un manejador de evento que modifque los campos puntero del combobox al valor 0.

Saludos

@Integra2013

El control combobox en V7 puede ser usado solamente para editar campos enlazados a tablas maestras o campos enlazados a tablas estáticas.

En la base de conocimiento técnica, tienes un artículo sobre Interactuar con un control combo box mediante JavaScript

Explica cómo:

  • Asignar registros al combo box
  • Leer el ítem seleccionado en el combo

Hola integra2013.

Efectivamente, hacer lo que quieres parece en principio sencillo y debería de funcionar tal como se espera.

Los comboxbox aparecen en blanco cuando se carga el formulario con un registro nuevo. Cuando seleccionamos manualmente un valor del combobox ya no hay forma de blanquear el combobox ni siquiera por código haciendo “Modificar campo(#CAMPO_PUNTERO, 0)”. Esto yo considero que es un mal funcionamiento del control combobox y debería de arreglarse.

Como apunta Ramiro en las tablas estáticas es fácil añadir un valor que sea el valor vacío, pero en las tablas maestras es un engorro.

Como muchas veces ocurre y apunta Antonio, el JavaScript nos permitirá salvar esta carencia del código nativo Velneo.

Así para borrar los controles de búsqueda:

  • Controles enlazados a Variables Locales -> vaciar la variables local
  • Controles enlazados a campos -> comando Velneo: Modificar campo(#CAMPO, “”)
  • Controles enlazados a campos maestros o tablas estáticas con combobox -> ejecutas un manejador de evento JavaScript con el siguiente código:

var form = theRoot.dataView() // formualrio activo
form.control(“CBO_EMPRESA”).currentIndex = -1 // maestro
form.control(“CBO_EMPLEADO_TIPO”).currentIndex = -1 // estática

Pruébalo y nos cuentas
Saludos
Paco Satue

Buenas noches Paco… Acabo de probar tu solución y… ERES MI HEROE!!!
Funciona perfectamente.
Con tu solución he creado un manejador de evento que limpia todos los controles… hasta los combobox.

Muchisimas gracias a todos por vuestra ayuda y a Paco por su solución…

Un saludo.

Alberto.

Abusando un poco más Paco… en el formulario hay controles de edicción alfanumerica que estan enlazados a campos de tablas maestras.
El botón de “limpiar” tambien debe borrar el contenido que tengan. Estoy intentandolo con:
form.control(“NOMBRE”).clear()
pero no hace nada, no da error pero no borra el contenido del control.
Lo estoy haciendo mal verdad?
Cual sería la forma?

Gracias y perdona el abuso… :slight_smile:

Hola integra2013.

Parece ser que la propiedad currentIndex también funciona para la clase VBoundFieldEdit.

Pruébalo
Saludos
Paco Satué

Bueno, después de probar y probar (gracias Paco por tu inestimable ayuda, aunque con los controles de edición alfabetica no he sido capaz de conseguir borrar el contenido con js) la única solución que he encontrado es asignar el control a una variable y luego en el alta tratarlas.
Ahora me surgen mil consultas, pero bueno eso ya es otra historia…

De nuevo gracias a todos y en especial a Paco.

Hola integra2013.

Me alegro que te hayan servido las indicaciones. De todas formas yo sí que consigo borrar el contenido de un objeto VBoundFieldEdit con la propiedad currentIndex = -1. Por lo menos así lo he probado en la 7.15.

Saludos
Paco Satué

Hola Paco:

Muchas gracias por la info, me ha sido muy útil. :wink:

Hola Fran.

Gracias a tí por dejar constancia de que las respuestas del foro han sido útiles.

Espero que cunda el ejemplo.
No solo hay que saber preguntar sino que “es de bien nacidos ser agradecidos”.

Saludos
Paco Satué

Hola, ahora que pasaron 2 años… esto sigue así en version 23 ?
es decir debemos seguir usando JS para vaciar los comboboxs o ya se puede hacer via velneo (como deberia!) ?

Que yo sepa, sigue igual