VFP 9+localizar un registro en un combo o list, si No exuste, poder darlo de alta - IDEAS

5,394 views
Skip to first unread message

José Jiménez Zuryta

unread,
Dec 2, 2010, 9:08:05 AM12/2/10
to Comunidad de Visual Foxpro en Español
Estimados: lo que deseo hacer es que por medio de un ListBos o
ComboBox, poder buscar un proveedor de mi tabla proveedores, y en caso
de que no exista, seguir tecleando el nombre completo y poder darlo
de alta.
Que me sugieren utilizar?, tienen algún ejemplo para basarme en el?

Gracias por su valiosa ayuda

Jose Zurita

unread,
Dec 2, 2010, 9:16:25 AM12/2/10
to PublicesvFoxpro, Luis MAria Guayan

Jairo Miranda

unread,
Dec 2, 2010, 9:46:29 AM12/2/10
to publice...@googlegroups.com

Creas un textbox y al lado un list invisible = .f. .

En el list con la opción de generador cargar los datos de los proveedores
(provvedor.id, proveedor.nombre , etc)
El list mostrarar los registros coincidientes de acurdo a la clave de
ordenamiento
En el texbox en el método interativechange escribes el siguiente código


En el texbox interativechange

LOCAL nIndex
WITH Thisformset.MAYORLISTA

.List2.visible = .T.

FOR nIndex = 1 TO .List2.ListCount
IF UPPER( .List2.ListItem(nIndex)) = UPPER( ALLTRIM( this.Value ) )
.List2.ListIndex = nIndex
EXIT
ENDIF
ENDFOR
.List2.Refresh
ENDWITH

En el list ** list2 al hacer click o bobleclick


WITH Thisformset.CHEQUES1.Container1.Grid11
SELECT Mayor01
SET ORDER TO tag codcta
Thisformset.CHEQUES1.Container1.Grid11.refresh
ENDWITH

Espero te sirva

Jose Zurita

unread,
Dec 3, 2010, 9:46:20 AM12/3/10
to PublicesvFoxpro
No entendí muy bien la solución:
1. Crear un TextBox  y a un lado un List con la propiedad Visible = .F., esta correcto?. El TextBox servirá para teclear el nombre del proveedor que nos interese y en el List Box aparecerá la lista de Proveedores que coincidan con el Nombre?, supongo!!!   Es solo un ListBox?
2. El código que deberá de ir en el TExtBox me queda claro, la duda que tengo aqui es que hablas de un thisformset.MAYORLISTA, este control cual es? También hablas de un list2.visible... Este control es el List?
3. En donde dices, En El list ** List2 al hacer click o doble click.. te refieres al objeto list único que habrá?... por que hacer click o doble click en el control? para que?, hablas de otros controles u objetos como el Cheques1.container???? en esta parte me perdi

Jose Antonio

unread,
Dec 3, 2010, 10:47:36 AM12/3/10
to publice...@googlegroups.com
A ver si este ejemplo que te adjunto, te sirve como guía.

Un saludo.

--
Jose A. Blasco
Zaragoza - España

combo.arj

Jairo Miranda

unread,
Dec 3, 2010, 3:17:53 PM12/3/10
to publice...@googlegroups.com


 En el list    list2 al hacer click o bobleclick
 

Perdon ese codigo no va pero…. si deseas aqui puedes colocar código para  buscar otros datos del  registro   de vendedor 


 
 
Espero te sirva

IVAN MARTINEZ

unread,
Dec 4, 2010, 7:11:28 PM12/4/10
to publice...@googlegroups.com


La Politica generica que yo uso es la siguiente

1) El Listbox lista solamente los que existen hasta ese momemto.

2) Si quiere hacer algo al archivo de proveedores pongo al lado un boton que llama al programa de mantenimiento de Proveedores

3) Al salir del programa de mantenimiento regresa al boton que lo invoco y refresco el listbox.

Ventajas

1) reutilizo  Los programas de Mantenimiento.

2) Los esquemas de seguridad estan incorporados una sola vez.

 

Ivan Martinez von Halle







>>>-----Mensaje original-----
>>>De: publice...@googlegroups.com
>>>[mailto:publice...@googlegroups.com] En nombre de José
>>>Jiménez Zuryta
>>>Enviado el: Jueves, 02 de Diciembre de 2010 09:38 a.m.
>>>Para: Comunidad de Visual Foxpro en Español
>>>Asunto: [vfp] VFP 9+localizar un registro en un combo o


>>>list, si No exuste, poder darlo de alta - IDEAS
>>>

Outlook.jpg

Fabricio

unread,
Dec 5, 2010, 12:18:23 PM12/5/10
to Comunidad de Visual Foxpro en Español
Yo utilizo este método para agregar nuevos registros a mis combos de
Clientes, Proyectos, etc. Me gusta que el combo siempre aparezca como
lista desplegable para facilitar la búsqueda, le doy al usuario la
posibilidad de agregar un nuevo registro presionando la tecla [Ins], o
eliminar un registro presionando la tecla [Supr].

En en primer caso, para agregar un nuevo registro, en el evento
keypress capturo la llamada, cambio propiedad Style=0, inicializo el
valor del combo, en mi caso Value=0, restablezco el modo de escritura
InsMode(!InsMode()).

Entonces el usuario ahora puede escribir el nuevo registro que quiere
adicionar al combo, cuando presiona [Enter], en el método valid
verifico que .Value esté vacío y que .Text no esté vacío. Si se cumple
guardo el valor de .Text en una variable, cambio la propiedad Style=2,
le pregunto si realmente quiere agregar el registro, si responde que
si, inserto el registro en la tabla correspondiente, le hago
un .Requery al combo, y por ultimo le asigno a la popiedad Value el
valor que previamente habia guardado en la variable. LISTO, en mi
tabla ya está el nuevo registro, el combo lo tiene como uno de sus
elementos y además lo tiene seleccionado.

Si acaso el usuario cuando escribe, digita un valor que ya existe,
entonces el combo toma el valor de la lista, cambio la propiedad
Style=2 y no pasa nada.

En el caso de haber presionado Suprimir o Delete, verifico que este un
elemento seleccionado, !Empty(.Value), hago las verificaciones del
caso para no dejar registros huerfanos en otras tablas, si hay
registros relacionados le mando aviso que no puede borrarlo, de lo
contrario le pido me confirme si quiere borrarlo, si responde si,
elimino el registro de la tabla, le hago un .Requery al combo, y
asunto acabado.

Saludos y siempre para servirte.

Fabricio

Victor Espina

unread,
Dec 6, 2010, 8:01:29 AM12/6/10
to Comunidad de Visual Foxpro en Español
El uso de los controles ComboBox y ListBox esta limitado al numero
maximo de opciones que se mostraran en esos controles. Aunque
tecnicamente un ComboBox o ListBox puede contener miles de items, en
la practica la realidad es que estos controles resultan muy poco
practicos en casos donde se tiene mas de una docena de opciones
posibles.

Mas claramente, usar un ComboBox o un ListBox para permitirle al
usuario seleccionar entre un maximo de 12 de opciones es completamente
viable; hacer lo mismo para que el usuario seleccione uno entre
decenas o cientos de opciones, no solamente no es practico sino que
puede llegar a ser bastante lento.

En e caso especifico de la seleccion de clientes, ademas de ser
inpractico debido a la cantidad de opciones posibles, tambien se le
anade el tema de la velocidad con la que se puede llenar el combobox o
listbox.

Supongamos que vendemos nuestro sistema a un cliente nuevo. Al inicio,
mientras el usuario va alimentando la tabla de clientes, el codigo
funcionara perfectamente. Pero a medida que el numero de clientes vaya
pasando de apenas unos pocos a unos cientos, y luego a unos miles, nos
encontraremos conque nuestro programa se tarda unos cuantos segundos
en poder llenar el combobox o listbox con todos los clientes
registrados.

Incluso si incluimos la posibilidad de ir filtrando interactivamente a
lista en base a lo que el cliente va escribiendo, de modo de solo
mostrar aquellos clientes que coinciden con la pista indicada, lo
cierto es que es muy probaable que las primeras 2 o 3 veces que
llenemos el combo o listbox con las opciones resultantes del
fiiltrado, aun tengamos que manejar cientos de resultados posibles.

En el pasado, yo he probado distintas tecnicas para manejar esta
situacion, desde el tipico codigo + descripcion, hasta esta tecnica
del combobox / listbox filtrado dinamicamente. Hasta ahora, solo dos
tecnicas me han funcionado de manear practica en ambientes de
produccion:

1. TextBox + Grid + (2) CommandButton: el usuario indica parte del
nombre del cliente deseado en el TextBox, y yo uso esa informacion
para realizar un query sobre la BD que me traiga los clientes que
coinciden con esa pista y muestro el cursor resultante en el Grid. Si
el cliente deseado aparece en el grid, el usuario pulsa en un boton
"Aceptar" que selecciona el codigo del cliente que este seleccionado
en el Grid. Si el cliente no aparece en la lista y se desea ingresarlo
como cliente nuevo, se pulsa en un boton "Nuevo Cliente" que invoca un
dialogo para tal efecto.

La ventaja de este metodo es que el Grid ofrece dos ventajas
importante sobre el ComboBo / ListBox: mayor velocidad de carga (casi
instantanea de hecho) y capacidad ilimitada de opciones.


2. Textbox + ComboBox: el usuario usa el TextBox para indicar el
codigo del cliente deseado o parte del nombre del mismo. Al pulsar
Enter se invoca una rutina que valida si el texto indicado corresponde
a un codigo de cliente registrado; si es el caso, se traen los datos
del cleinte y se llena el ComboBox con un solo registro
correspondiente a los datos del cliente. Si el texto indicado no
corresponde al codigo de ningun cliente registrado, entonces se asume
que es parte del nombre y se hace un query que traiga todos los
clientes cuyo nombre contenga el texto indicado. Con este cursor se
procede a llenar el ComboBox, anadiendo una opcion adicional al final
que diga "(Nuevo cliente)". Si el usuario seleccion cualquier opcion
que sea <= ListCount, entonces se toma el codigo de cliente del item
seleccionado, se asigna el valor al TextBox y se vuelve a invocar el
codigo de validcion (que esta vez si encontrara el cliente
directamente). Si se selecciona la ultima opcion (ListIndex =
ListCount), entonces se invoca un dialogo de creacion del cliente. Al
cerrarse este dialogo (asumiendo que efectivamente se creo el
cliente), se asigna el codigo del nuevo cliente al TextBox y se invoca
de nuevo la rutina de validacion, de modo que caiga en el caso 1
(textbox corresponde a codigo de cliente existente).


Espero que estas ideas te sean de utilidad


Saludos

Victor Espina

Jose Zurita

unread,
Dec 6, 2010, 9:01:28 AM12/6/10
to PublicesvFoxpro
Lo consideraré, gracias.


From: iva...@gmail.com
To: publice...@googlegroups.com
Subject: RE: [vfp] VFP 9+localizar un registro en un combo o list, si No exuste, poder darlo de alta - IDEAS
Date: Sat, 4 Dec 2010 19:41:28 -0430
Outlook.jpg

Jose Zurita

unread,
Dec 6, 2010, 9:03:31 AM12/6/10
to PublicesvFoxpro
Lo revisaré y trataré de aplicar tu idea.

> Date: Sun, 5 Dec 2010 09:18:23 -0800
> Subject: [vfp] Re: VFP 9+localizar un registro en un combo o list, si No exuste, poder darlo de alta - IDEAS
> From: fabricio...@hotmail.com
> To: publice...@googlegroups.com

Jose Zurita

unread,
Dec 6, 2010, 9:08:42 AM12/6/10
to PublicesvFoxpro, vesp...@gmail.com
Excelente. lo revisaré y trataré d aplicar tusolución. Tienes alguna forma de ejemplo en donde hagas esto?, si podrías mandarmelo a mi correo jzu...@hotmail.com

> Date: Mon, 6 Dec 2010 05:01:29 -0800

> Subject: [vfp] Re: VFP 9+localizar un registro en un combo o list, si No exuste, poder darlo de alta - IDEAS

Walter R. Ojeda Valiente

unread,
Dec 6, 2010, 10:00:24 AM12/6/10
to publice...@googlegroups.com
Según las técnicas del buen diseño en los combobox se deberían mostrar hasta un máximo de 12 ítems.

Aunque sabemos que a muchos eso no les importa.

Saludos.

Walter.

Victor Espina

unread,
Dec 8, 2010, 9:36:55 AM12/8/10
to Comunidad de Visual Foxpro en Español
Aqui va un ejemplo muy sencillo de como hacer una busqueda
incremental. Espero les sirva.

http:/www.victorespina.com.ve/public/searchex.rar

Saludos

Victor Espina

On 6 dic, 11:08, Jose Zurita <jzur...@hotmail.com> wrote:
> Excelente. lo revisaré y trataré d aplicar tusolución. Tienes alguna forma de ejemplo en donde hagas esto?, si podrías mandarmelo a mi correo jzur...@hotmail.com
>
>
>
>
>
>
>
> > Date: Mon, 6 Dec 2010 05:01:29 -0800
> > Subject: [vfp] Re: VFP 9+localizar un registro en un combo o list, si No exuste, poder darlo de alta - IDEAS
> > From: vespi...@gmail.com

Jairo Miranda

unread,
Dec 9, 2010, 11:47:26 AM12/9/10
to publice...@googlegroups.com
Ya lo baje gracias lo voy a probar y te cuento

jairo

Luis Enrique Fernández

unread,
Jul 25, 2013, 8:25:11 AM7/25/13
to publice...@googlegroups.com
Hola Fabricio,

He intentado esta solución y algo debo hacer mal porque no me funciona del todo. ¿Te puedo enviar el código?
¿Puedes revisarlo o enviar el tuyo?

Gracias.

Ricardo Pina

unread,
Jul 25, 2013, 8:32:11 AM7/25/13
to Grupo VFP
Hola Luis Enrique
 
Puedes abrir un hilo nuevo en vez de resucitar uno que va para los 3 años de difunto.
sube tu código y alguien te podra ayudar.
 
Saludos
--
            

                   Ricardo Pina

Desarrollo y Servicios Informáticos

                  Profesionales
               www.dsip.com.ar

 

 

Antonio Domínguez

unread,
Nov 25, 2021, 8:08:11 PM11/25/21
to Comunidad de Visual Foxpro en Español
tengo un valor almacenado y lo quiero mostrar en el list, cómo lo hago?.
saludos

Captura.JPG

Developer System

unread,
Dec 1, 2021, 6:20:15 PM12/1/21
to Comunidad de Visual Foxpro en Español
Reply all
Reply to author
Forward
0 new messages