Visual fox pro

Viejo jairo:
Poseo dos tablas que tienen, la primera tabla nit, empresa r.legal, direcciontelefono, y la otra posee los campos"2tabla numero, tipo fecha objeto contratista, termino, fecha ini, fecha fin etc, nit de la primera tabla, con contratista están relacionadas, lo que deseo es que cuando yo le de un nit de los que estén, me salga el cotratista, ojo la primera tabla se llama contratista y la seguinda ordenes; y que los botones de siguiente anterior me funcionen con este procedimiento, ya que lo tengo con cuadro combinado y hay quedarle muchos clic, y haber que pantallzo tienes para un menu de ordenes para colocar en el menu principal o donde lo puedo encontrar en internet.

1 respuesta

Respuesta
1
- Vamos a buscar información de la primera tabla(Contratista)
Yo colocaría un textbox con un Botón en el textbox capturo el NIT(recuerda que debes indicar al usuario si en NIT se guarda o no con guiones"-" o algún carácter raro), en el botón tenemos dos posibilidades.
Ej :
select contratista
nregistro = recno("contratista") **Capturo el registro actual si de pronto no
** existe el nit
go top ** Me paro en el primer registro
Locate for nit = This.MyForm.txtNit.Value **txtnit es la caja de texto
if !found() ** Me indica si la búsqueda NO fue exitosa
Messagebox("No se encontró el contratista, intente de nuevo")
go nregistro ** Me voy al registro original(en caso de
** querer mantener la información en
** pantalla)
This.MyForm.txtNit.setfocus ** Coloco el cursor en el campo de texto
endif
This.MyForm.refresh
bien
select contratista
nregistro = recno("contratista")
go top
seek(This.MyForm.txtNit.Value,"Contratista","IndNit") ** seek hace lo mismo que el
** locate pero mucho más
** rápido(rushmore), para esto
** debes colocar un índice en la
** tabla que se llame para este
** ejemplo IndNit
if !found()
Messagebox("No se encontró el contratista, intente de nuevo")
go nregistro
This.MyForm.txtNit.setfocus
endif
This.MyForm.refresh
Cabas, si colocas lo campos en el controlsource estos se llenan automáticamente con la información de la tabla, y así se actualiza la información.(No olvides el refresh())
- Lo de los botones es un poco más complicado
Para el botón de ir al primer registro debes colocara algo parecido a :
select contratista
Go top ** Te lleva al primer registro si el controlsource de cada
** Objeto de la forma tiene el campo correspondiente este se
** actualiza automáticamente
Para el botón del ir al registro anterior debes indicar algo parecido a :
select contratista
if bof() and eof() ** Identifica si la tabla no esta vacía(este es otro cuento)
return
endif
skip -1 ** te lleva al registro anterior
Para el botón del ir al registro siguiente debes indicar algo parecido a :
select contratista
if bof() and eof() ** Identifica si la tabla no esta vacía(este es otro cuento)
return
Endif
Skip 1 ** Te lleva al registro siguiente la diferencia esta en el
** menos "-"
- Para ir al ultimo registro
Go bottom
Lo anterior te funciona si vas a recorre la tabla de contratista(solo esa).
Porque "solo esa" debido a que según me cuentas tenemos una relación entre contratista y ordenes, y esta relación es de uno a muchos, por lo tanto la pantalla debe funcionar para mi concepto de la siguiente manera :
Yo selecciono un contratista (sea con el botón de búsqueda, con un browse o con los botones de adelantar y atrasar)
En ese momento se presenta la información del contratista
En un grid se presentan las ORDENES que se ha realizado con este contratista
Cabas como estas comenzando te puede parecer un poco complicado todo este asunto, pero una vez haga tu primera aplicación te das cuenta de muchas cosas como por ejemplo el nombre de los campos en las tablas(no quiero parecer antipático pero en el momento que hagas un query será complicado) es decir si normalizas cosas como esas será más fácil hacer mantenimiento al código es decir yo crearía la tabla de contratista de la siguiente manera
cnit_contr c(20) - no exceder los diez caracteres en el nombre (cuando creas un query este te corta los nombres largos, lo mismo ocurre cuando le das un list structure a la tabla). Al principio coloco el tipo de dato c : carácter, n numérico... etc, esto para que te permite agilizar la programación, por ejemplo el sexo de representante legal tengo las siguiente posibilidades
m y f, 1 y 0 ó .F. y :T.
Si yo tengo csex_contr ya se que preguntó por "m" o por "f"
Si yo tengo lsex_contr ya se que es lógico y pueden ser .T. o .F. (depende lo que definas para .T.: masculino o .T. para femenino)
Por ultimo es bueno colocar un mnemotécnico con el nombre de la tabla para el caso de las llaves foráneas y otro mnemotécnico para los campos, esto da manera pero al final es muy bueno
"Espero haber entendido la pregunta"
Una buena metodología de Visual FoxPro es tener un programa principal estructurado con un encabezado (definición de variables publicas, configuración) un cuerpo(enlace con la ayuda, con el menú, etc) y un cierre (cierra tablas recupera la ayuda de fox, etc.)
Si tienes este programa es más fácil, primero creas el menú y lo dejas en el mismo directorio donde está este programa, y lo ejecutas algo parecido esto
DO MenPal. Mpr ** MenPal es el nombre del menú y la extensión .mpr es el menú compilado este archivo se origina cuando generas el proyecto o cuando estas creando el menú, en el menú de fox menú\generar
No conozco un lugar en Internet donde hablen del menú(lo siento).
Si te confundí en algo no dudes en pedir la aclaración
Cordial Saludo
Jairohamon
PD : Disculpa la carreta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas