
Diseño de formularios
Publicado por José Luis (4 intervenciones) el 02/08/2014 21:09:24
Con el fin de aumentar mis conocimientos en Visual Fox Pro, estoy desarrollando una pequeña aplicación de facturación tomando como base el ejemplo del laboratorio nº 4 de la Universidad Nacional de Ingeniería - Centro de Extensión y Proyección social de Perú, implementado por Juan José Allaucca Paucar con el cual me es imposible contactar vía email porque los correos que he enviado a todas las direcciones que poseo de dicho señor me son rechazados.
Dicho ejemplo lo descargué del portal http://Mygnet.com
Nombre: ejemplos en visual fox 6
Archivo: vf2lab4438.zip
He notado que en dicho ejemplo falta el formulario para dar de alta/baja modificación a los artículos y el formulario para las mismas funciones aplicado a clientes para los cuales se ha de emitir la factura correspondiente.
He empezado diseñando un formulario relativo a los artículos.
Mi problema, y para cuya solución pido ayuda, es que no consigo dar con las instrucciones que permitan presentar el formulario en pantalla y que las casillas/cuadros de texto aparezcan en blanco. Cuando ejecuto el formulario siempre muestra el primer registro de la tabla.
Cada casilla está vinculada mediante la propiedad controlsource a la tabla "articulo" y si las desvinculo para que aparezca cada casilla en blanco entonces la tabla no se actualiza cuando intento añadir, modificar o eliminar un registro.
Los botones del formulario son los siguientes:
Primer registro (funciona)
Registro anterior ( Id. Id.)
Registro siguiente (Id. Id.)
Ultimo registro (Id. Id.)
y también:
Examinar (funciona)
Añadir (No funciona por lo indicado anteriormente)
Modificar ( Id. Id.)
Eliminar (Id. Id.)
Cerrar (funciona)
Las casillas tienen el sisguiente "name":
ArtCod1 (Código del artículo)
ArtDet1 (Nombre del artículo)
ArtPre1 (Precio)
Artstk1 (Unidades en almacén)
La tabla de artículos se titula "articulo" y tiene los siguientes campos:
ArtCod (Carácter) (ancho 4) (índice)
ArtDet (Carácter) (ancho 40)
ArtPre (Numérico) (ancho 10,2)
Artstk (Numérico) (ancho 4,0)
Lo que pretendo es que, al cargar el formulario, aparezca con las casillas de texto en blanco de tal forma que si el usuario desea añadir, modificar o eliminar registros pueda hacerlo escribiendo en dichas casillas para, a continuación, pulsar el botón correspondiente y que el formulario vuelva a presentar las casillas en blanco para la siguiente operación.
Incluso he intentado poner en el formulario un botón titulado "Nuevo" para que el usuario pulse en él antes de iniciar la escritura, pero no he logrado tampoco hacerlo funcionar.
EL codigo fuente escrito para cada evento es el siguiente:
-------------
Form1 Init
*Carga del formulario y presentación en pantalla
Set echo off
Set talk off
*Pasar la dirección de la base de datos
set default to c:\proyfactur\data
mTabla="articulo.dbf" && Asigna a una variable el nombre del archivo
if !file(mTabla) && Si no encuentra la tabla
mMensaje = messagebox("No existe el archivo",0+64, "Atención")
endif
sele 1
* Activa la tabla con el índice mediante variable macro y asigna alias
use &mTabla order tag artcod alias articulo
scatter memvar memo && Carga el registro activo en una matriz/vector de memoria
thisform.refresh
*ir al objeto principal
thisform.artcod1.setfocus
return
--------------------------
BtnAñadir Click
*Agregar un registro con los datos escritos en pantalla
SELE 1
*Verificar si hay datos en blanco en alguna casilla
if empty(thisform.ArtCod1.value)
wait window "Código incorrecto..." &&nowait
thisform.ArtCod1.setfocus
return
endif
if empty(thisform.ArtDet1.value)
wait window "Nombre incorrecto..." &&nowait
thisform.ArtDet1.setfocus
return
endif
if empty(thisform.ArtPre1.value)
wait window "Precio incorrecto..." &&nowait
thisform.ArtPre1.setfocus
return
endif
if empty(thisform.Artstk1.value)
wait window "Unidades incorrectas..." &&nowait
thisform.Artstk1.setfocus
return
endif
*Agregar nuevo registro con los datos escritos en el formulario
SELE 1
append blank
gather memvar
*Dejar en blanco la matriz/vector de memoria
scatter memvar blank
*Ir a la primera casilla de texto del formulario
thisform.ArtCod1.setfocus
thisform.refresh
-----------------------
BtnModificar Click
*Actualizar/modificar el contenido de un campo
*Verificar si hay datos en blanco
if empty(thisform.ArtCod1.value)
wait window "Código incorrecto..." nowait
thisform.ArtCod1.setfocus
return
endif
if empty(thisform.ArtDet1.value)
wait window "Nombre incorrecto..." nowait
thisform.ArtDet1.setfocus
return
endif
if empty(Thisform.ArtPre1.value)
wait window "Precio incorrecto..." nowait
thisform.ArtPre1.setfocus
return
endif
if empty(Thisform.Artstk1.value)
wait window "Unidades incorrectas..." nowait
thisform.Artstk1.setfocus
return
endif
*Actualizar datos del campo índice
SELE 1
ArtCod = alltrim(thisform.ArtCod1.value)
seek ArtCod
if found() && Actualizar registro hallado"
gather memvar memo &&Vuelca los datos de la matriz/vector en memoria al registro
wait window "Datos actualizados..." nowait
else
mMens1 = "Imposible actualizar el código "+ArtCod+" no existe"+chr(13)
mMens2 = "Utilice otro código e intente actualizar de nuevo..."
mOpc = messagebox(mMens1+ mMens2,0+64, "Atención")
thisform.ArtCod1.setfocus
return
endif
return
------------------------
BtnEliminar Click
*Borrar un registro
SELE 1
ArtCod = alltrim(thisform.ArtCod1.value)
seek ArtCod
if !found() && No existe el código
mMens1 = "Imposible retirar el código " + ArtCod + " no existe"+chr(13)
mMens2 = "Utilice otro código e intentelo de nuevo..."
nOpc = messagebox(mMens1 + mMens2,0+64,"Atención")
thisform.ArtCod1.setfocus
return
endif
mMens1 = "¿Desea borrar el código "+ ArtCod + " del sistema?"+chr(13)
mOpc =messagebox(mMens1,1+32, "Borrar registro")
if mOpc = 1 && Clic en botón Aceptar
SELE 1
delete
wait window "Registro borrado del sistema..." nowait
*Mover el puntero al próximo registro disponible
if !eof()
skip 1
endif
if eof()
go bottom
endif
endif
scatter memvar memo
thisform.refresh
return
Dicho ejemplo lo descargué del portal http://Mygnet.com
Nombre: ejemplos en visual fox 6
Archivo: vf2lab4438.zip
He notado que en dicho ejemplo falta el formulario para dar de alta/baja modificación a los artículos y el formulario para las mismas funciones aplicado a clientes para los cuales se ha de emitir la factura correspondiente.
He empezado diseñando un formulario relativo a los artículos.
Mi problema, y para cuya solución pido ayuda, es que no consigo dar con las instrucciones que permitan presentar el formulario en pantalla y que las casillas/cuadros de texto aparezcan en blanco. Cuando ejecuto el formulario siempre muestra el primer registro de la tabla.
Cada casilla está vinculada mediante la propiedad controlsource a la tabla "articulo" y si las desvinculo para que aparezca cada casilla en blanco entonces la tabla no se actualiza cuando intento añadir, modificar o eliminar un registro.
Los botones del formulario son los siguientes:
Primer registro (funciona)
Registro anterior ( Id. Id.)
Registro siguiente (Id. Id.)
Ultimo registro (Id. Id.)
y también:
Examinar (funciona)
Añadir (No funciona por lo indicado anteriormente)
Modificar ( Id. Id.)
Eliminar (Id. Id.)
Cerrar (funciona)
Las casillas tienen el sisguiente "name":
ArtCod1 (Código del artículo)
ArtDet1 (Nombre del artículo)
ArtPre1 (Precio)
Artstk1 (Unidades en almacén)
La tabla de artículos se titula "articulo" y tiene los siguientes campos:
ArtCod (Carácter) (ancho 4) (índice)
ArtDet (Carácter) (ancho 40)
ArtPre (Numérico) (ancho 10,2)
Artstk (Numérico) (ancho 4,0)
Lo que pretendo es que, al cargar el formulario, aparezca con las casillas de texto en blanco de tal forma que si el usuario desea añadir, modificar o eliminar registros pueda hacerlo escribiendo en dichas casillas para, a continuación, pulsar el botón correspondiente y que el formulario vuelva a presentar las casillas en blanco para la siguiente operación.
Incluso he intentado poner en el formulario un botón titulado "Nuevo" para que el usuario pulse en él antes de iniciar la escritura, pero no he logrado tampoco hacerlo funcionar.
EL codigo fuente escrito para cada evento es el siguiente:
-------------
Form1 Init
*Carga del formulario y presentación en pantalla
Set echo off
Set talk off
*Pasar la dirección de la base de datos
set default to c:\proyfactur\data
mTabla="articulo.dbf" && Asigna a una variable el nombre del archivo
if !file(mTabla) && Si no encuentra la tabla
mMensaje = messagebox("No existe el archivo",0+64, "Atención")
endif
sele 1
* Activa la tabla con el índice mediante variable macro y asigna alias
use &mTabla order tag artcod alias articulo
scatter memvar memo && Carga el registro activo en una matriz/vector de memoria
thisform.refresh
*ir al objeto principal
thisform.artcod1.setfocus
return
--------------------------
BtnAñadir Click
*Agregar un registro con los datos escritos en pantalla
SELE 1
*Verificar si hay datos en blanco en alguna casilla
if empty(thisform.ArtCod1.value)
wait window "Código incorrecto..." &&nowait
thisform.ArtCod1.setfocus
return
endif
if empty(thisform.ArtDet1.value)
wait window "Nombre incorrecto..." &&nowait
thisform.ArtDet1.setfocus
return
endif
if empty(thisform.ArtPre1.value)
wait window "Precio incorrecto..." &&nowait
thisform.ArtPre1.setfocus
return
endif
if empty(thisform.Artstk1.value)
wait window "Unidades incorrectas..." &&nowait
thisform.Artstk1.setfocus
return
endif
*Agregar nuevo registro con los datos escritos en el formulario
SELE 1
append blank
gather memvar
*Dejar en blanco la matriz/vector de memoria
scatter memvar blank
*Ir a la primera casilla de texto del formulario
thisform.ArtCod1.setfocus
thisform.refresh
-----------------------
BtnModificar Click
*Actualizar/modificar el contenido de un campo
*Verificar si hay datos en blanco
if empty(thisform.ArtCod1.value)
wait window "Código incorrecto..." nowait
thisform.ArtCod1.setfocus
return
endif
if empty(thisform.ArtDet1.value)
wait window "Nombre incorrecto..." nowait
thisform.ArtDet1.setfocus
return
endif
if empty(Thisform.ArtPre1.value)
wait window "Precio incorrecto..." nowait
thisform.ArtPre1.setfocus
return
endif
if empty(Thisform.Artstk1.value)
wait window "Unidades incorrectas..." nowait
thisform.Artstk1.setfocus
return
endif
*Actualizar datos del campo índice
SELE 1
ArtCod = alltrim(thisform.ArtCod1.value)
seek ArtCod
if found() && Actualizar registro hallado"
gather memvar memo &&Vuelca los datos de la matriz/vector en memoria al registro
wait window "Datos actualizados..." nowait
else
mMens1 = "Imposible actualizar el código "+ArtCod+" no existe"+chr(13)
mMens2 = "Utilice otro código e intente actualizar de nuevo..."
mOpc = messagebox(mMens1+ mMens2,0+64, "Atención")
thisform.ArtCod1.setfocus
return
endif
return
------------------------
BtnEliminar Click
*Borrar un registro
SELE 1
ArtCod = alltrim(thisform.ArtCod1.value)
seek ArtCod
if !found() && No existe el código
mMens1 = "Imposible retirar el código " + ArtCod + " no existe"+chr(13)
mMens2 = "Utilice otro código e intentelo de nuevo..."
nOpc = messagebox(mMens1 + mMens2,0+64,"Atención")
thisform.ArtCod1.setfocus
return
endif
mMens1 = "¿Desea borrar el código "+ ArtCod + " del sistema?"+chr(13)
mOpc =messagebox(mMens1,1+32, "Borrar registro")
if mOpc = 1 && Clic en botón Aceptar
SELE 1
delete
wait window "Registro borrado del sistema..." nowait
*Mover el puntero al próximo registro disponible
if !eof()
skip 1
endif
if eof()
go bottom
endif
endif
scatter memvar memo
thisform.refresh
return
Valora esta pregunta


0